Page 1 of 1

ถาม เกี่ยวกับlinkรูปครับ

Posted: Thu Dec 01, 2011 11:57 am
by sdmania
จากตัวอย่างนี้เลยครับ http://snasui.blogspot.com/2011/05/folder-excel.html
คำถามผมอยู่ที่sheet4 จากตัวอย่างที่แนบมาครับ แต่ผมไม่ได้อัพโหลด โฟลเดอร์รูปมาด้วยนะครับเกรงว่าจะใหญ่เกิน
ที่เครื่องผมตั้งโฟลเดอร์ภาพไว้ที่ d:\piccar
และในโฟลเดอร์ผมจะตั้งรหัส ดังนี้ครับ(ขออธิบายหลักการตั้งรหัส เพิ่มเติมนิดนึงครับ)
** ปกติ รหัสสัญญาลูกค้าบริษัทผม จะตั้ง 22-001-1 แต่ในหนึ่งรหัสสัญญา มาตรฐานคร่าวๆคือ3ภาพ ได้แก่ 1รถหน้าตรง 2หน้ารถทำมุม45องศา 3รถกับลูกค้า บางสัญญาอาจไม่มีรูปก็ได้(ลูกค้าเก่ามากรูปหาย) หรือมีมากกว่า3รูปก็ต้องเก็บหมดครับ
ผมใช้เกณฑ์ตั้งรหัสเอาเองว่า เอารหัสสัญญา5หลักแรกบวกกับลำดับภาพ เช่น
รหัสสัญญา 22-605-1 มี4รูป ผมจะตั้งรหัสภาพว่า 22-605-01,22-605-02,22-605-03 และ 22-605-04 ครับ

ปัญหาที่เกิดคือ พนักงานมักพิมพ์รหัสภาพผิดหรือตกหล่น ทำให้ภาพไม่ขึ้นครับ
จะทำอย่างไร ให้cell F4,F5 หรือ F6 เมื่อพิมพ์ตกหล่น หรือพิมพ์ไม่ครบ ก็ให้แจ้งว่าพิมพ์รหัสผิดพลาดน่ะครับ

Re: ถาม เกี่ยวกับlinkรูปครับ

Posted: Thu Dec 01, 2011 12:01 pm
by sdmania
อันนี้แนบภาพครับ การเรียกรูปผมทำได้ตามแบบที่อาจารย์สอนครับ

Re: ถาม เกี่ยวกับlinkรูปครับ

Posted: Thu Dec 01, 2011 12:45 pm
by sdmania
ช่วยแนะนำทีครับว่าควรเขียนcodeอย่าไรดีครับ คือแอบลองแก้เองแล้ว ผิดมาตลอดเลยนะครับ แหะๆ :mrgreen:

ตั้งเป้าว่า เอาแค่กรอกรหัสไม่ครบ ขึ้นภาพฟ้องเลยนะ่ครับว่ากรอกรหัสผิดพลาด :mrgreen:

Re: ถาม เกี่ยวกับlinkรูปครับ

Posted: Thu Dec 01, 2011 1:09 pm
by snasui
:D แนบ Code Macro ที่ได้ปรับปรุงแล้วมาด้วยครับ

Re: ถาม เกี่ยวกับlinkรูปครับ

Posted: Thu Dec 01, 2011 3:00 pm
by sdmania
ปัญหาของผมอยู่ที่Sheet4ครับ
สิ่งที่ผมเพิ่มเติมจาก code ของอาจารย์ คือผมเพิ่ม Dim strValueMsg As String
...
If Left(obj.Name, 4) = "Pict" Then
obj.Delete
ElseIf Left(obj.Name, 4) <> "Pict" Then
strValueMsg = MsgBox("¡ÃÍ¡ÃËÑÊÃÙ»¼Ô´¾ÅÒ´¤ÃѺ", 1 + 64, "á¨é§àµ×͹")
Else: obj.Delete
End If
และตรง if the else คือผมกะว่า elseif ถ้าobj.name,4 ไม่ใช่ "pict"คือการคีย์ไม่ตรงกับชื่อรูปใดๆใน โฟลเดอร์ piccarจึงให้ขึ้นmsgBox ว่าใส่รหัสไม่ครบครับ

แต่ผลลัพธ์ มันไม่ตรงกะที่ผมคาดครับ :shock: แหะๆ ไม่ว่าจะกรอกข้อมูลเป็นกรณี ถูกถูก / ถูกผิด / ผิดถูก / ผิดผิด มันขึ้น msgBoxทุกครั้งครับ
**ในตัวอย่าง ตรงF4 กับF5 ผมใส่รหัสไปเป็นศุนย์ก่อนครับ เพื่อให้มันไม่แสดงภาพจะได้อัพโหลดได้น่ะครับ

ไฟล์

Re: ถาม เกี่ยวกับlinkรูปครับ

Posted: Thu Dec 01, 2011 3:09 pm
by sdmania
ส่วนภาพที่ใส่ไว้ใน d:\piccar สมมุติว่ามี 3 ภาพ
ผมจะตั้งชื่อภาพไว้ว่า 22-001-01 ==>ภาพของรหัสลูกค้า22-01 ภาพที่หนึ่ง
22-001-02 ==>ภาพของรหัสลูกค้า22-01 ภาพที่สอง
22-002-01 ==>ภาพของรหัสลูกค้า22-02 ภาพที่หนึ่ง ครับ


และถ้าผมไปเจอกรณีลูกค้าที่มีแค่รูปเดียว หรือไม่มีรูป ผมทำอย่างไรดีครับ :shock:

Re: ถาม เกี่ยวกับlinkรูปครับ

Posted: Thu Dec 01, 2011 3:43 pm
by sdmania
ถามเพิ่มเติมครับ ผมจะบังครับให้cell f4กำหนดรูปแบบเป็น
cells(4,6).numberFormat = "##-###-#" อย่างนี้ได้ไหมครับ

Re: ถาม เกี่ยวกับlinkรูปครับ

Posted: Fri Dec 02, 2011 6:02 pm
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Sub ShowPicture()
    Dim r As Range, ra As Range
    Dim imgIcon As Object
    Dim obj As Object
    On Error Resume Next
    With Worksheets("Sheet4")
        Set ra = .Range("G4", .Range("F65536").End(xlUp).Offset(0, 1))
    End With
    For Each obj In ActiveSheet.Shapes
        If Left(obj.Name, 4) = "Pict" Then
            obj.Delete
        End If
    Next obj
    For Each r In ra
        r.ClearContents
        Set imgIcon = ActiveSheet.Shapes.AddPicture( _
        Filename:="D:\piccar\" & r.Offset(0, -1).Value & ".jpg", LinkToFile:=False, _
        SaveWithDocument:=True, Left:=r.Left, Top:=r.Top, _
        Width:=r.Width, Height:=r.Height)
        If Err <> 0 Then
            r = "ระบุรหัสไม่ถูกต้อง"
            On Error GoTo 0
        End If
    Next r
End Sub
sdmania wrote:ถามเพิ่มเติมครับ ผมจะบังครับให้cell f4 กำหนดรูปแบบเป็น
cells(4,6).numberFormat = "##-###-#" อย่างนี้ได้ไหมครับ
คิดว่าสามารถทำได้ ลองปรับมาดูก่อนครับ

Re: ถาม เกี่ยวกับlinkรูปครับ

Posted: Tue Dec 06, 2011 9:04 am
by sdmania
ขออภัยที่มาตอบช้านะครับ งานด่วนแทรกแล้วติดหยุดยาวอีกน่ะครับ ขออภัยจริงๆครับ
ขอบคุณสำหรับcodeครับอาจารย์ :mrgreen: ทุกท่านที่มาช่วยตอบด้วยนะครับ
code ที่อาจารย์สอน ใช้ได้เป็นอย่างดีครับ :mrgreen:

Re: ถาม เกี่ยวกับlinkรูปครับ

Posted: Tue Dec 06, 2011 12:04 pm
by sdmania
:shock: อาจารย์ครับรบกวนอาจารย์ หรือท่านผู้รู้อื่นๆช่วยดูcode ให้ทีครับ ผมทำผิดขึ้นตอนตรงไหนไหมครับ

ขั้นตอนการแก้codeของผม คือ พอได้codeจากอาจารย์ ผมก็ copy แล้วมาวางใน vbaครับ แล้วก็กดctrl+s แล้วปิดหน้าต่างvba ไปเลยแล้วมา่ทดลองใช้งานในหน้าต่างexcel ปกติครับ

อธิบายตามภาพข้างล่างนะครับ
รูปquestion54-12-01
ถ้าพิมพ์รหัสถูกต้องให้เป็น T (ผลลัพธ์คือรูปขึ้น) ถ้าพิมพ์ผิดให้เป็น F ครับ (ผลลัพธ์คือ ขึ้นเตือนว่า "พิมพ์รหัสไม่ถูกต้อง")

รูปquestion54-12-02
เป็นรหัสภาพที่เก็บไว้ในโฟลเดอร์piccar อยู่ที่ไดร์ D ครับ

รูปquestion54-12-03
คือผลการทดลอง พิมพ์รหัสครับ ตอนผมพิมพ์ให้เป็น F4->พิมพ์รหัสผิด F5->พิมพ์รหัสผิด ผลที่ได้คือเกิด runtime error
ดังในรูป รูปquestion54-12-04 ครับ

ผมทำผิดขั้นตอนตรงไหนครับ แหะๆ

Re: ถาม เกี่ยวกับlinkรูปครับ

Posted: Tue Dec 06, 2011 12:08 pm
by sdmania
รูปquestion54-12-04 มันขึ้น run time error ครับ


แล้วก็แนบไฟล์ที่ผมทำมาด้วยครับ ปัญหาของผมอยู่ที่ sheet4ครับ

รบกวนทุกท่านด้วยครับ

Re: ถาม เกี่ยวกับlinkรูปครับ

Posted: Tue Dec 06, 2011 1:25 pm
by snasui
:D ให้ทำ Mark On Error GoTo 0 ให้เป็น Comment หรือลบออกไปครับ