EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)ช่อง A ควรบอกว่า คอลัมน์ A หรือระบุเซลล์ไปเลยว่าจาก A1 ถึง A3 จะได้เข้าใจตรงกันครับต้องการช่องของตัวนี้ตรงกับช่อง A แล้ว แล้วช่อง Pic.code ให้ขึ้นค่าของช่อง B ตัวนี้เราต้องใช้สูตรอะไรคะ ลองใช้ INDEX & MATCH แล้วรูปไม่ขึ้น
ช่วยเขียนอธิบายปัญหามาด้วย อ่านกฎข้อ 5 ด้านบนประกอบครับAnurakp wrote:รบกวนดูโค้ดให้ทีครับ
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("Sheet1")
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
Set imgIcon = ActiveSheet.Shapes.AddPicture( _
Filename:="D:\" & r.Offset(0, -1).Value & ".jpg", LinkToFile:=False, _
SaveWithDocument:=True, Left:=r.Left, Top:=r.Top, _
Width:=r.Width, Height:=r.Height)
Next r
End Sub
Code นั้นเป็นการลบภาพเดิมทิ้งไปก่อนแล้วค่อยนำภาพจาก Path ที่กำหนดไว้มาแสดง ไม่ควรที่จะมีการเพิ่มภาพเข้ามาเรื่อย ๆ ลองแนบไฟล์พร้อมตัวอย่างและตำแหน่งภาพมาดูกันครับpongpang wrote:จะพบว่า ภาพที่วางในเซล จะเป็นการวางซ้อนเพิ่มตลอด จะต้องปรับปรุง Code อย่างไรครับ ให้วางภาพเพียงภาพเดียว โดยไม่วางภาพซ้อนกันครับ
snasui wrote:Code นั้นเป็นการลบภาพเดิมทิ้งไปก่อนแล้วค่อยนำภาพจาก Path ที่กำหนดไว้มาแสดง ไม่ควรที่จะมีการเพิ่มภาพเข้ามาเรื่อย ๆ ลองแนบไฟล์พร้อมตัวอย่างและตำแหน่งภาพมาดูกันครับpongpang wrote:จะพบว่า ภาพที่วางในเซล จะเป็นการวางซ้อนเพิ่มตลอด จะต้องปรับปรุง 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("Sheet1")
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" Or Left(obj.Name, 3) = "รูป" Then
obj.Delete
End If
Next obj
For Each r In ra
Set imgIcon = ActiveSheet.Shapes.AddPicture( _
Filename:="C:\Users\com\Pictures\" & r.Offset(0, -1).Value & ".jpg", LinkToFile:=False, _
SaveWithDocument:=True, Left:=r.Left, Top:=r.Top, _
Width:=r.Width, Height:=r.Height)
Next r
End Sub
ผลยังคงเหมือนเดิมครับ คือ ภาพที่ได้ใหม่จะทับภาพเก่าซ้อนกันอยู่ 2 ภาพ ครับ ตามไฟล์ที่แนบครับsnasui wrote: ตัวอย่างการปรับ 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("Sheet1") 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" Or Left(obj.Name, 3) = "รูป" Then obj.Delete End If Next obj For Each r In ra Set imgIcon = ActiveSheet.Shapes.AddPicture( _ Filename:="C:\Users\com\Pictures\" & r.Offset(0, -1).Value & ".jpg", LinkToFile:=False, _ SaveWithDocument:=True, Left:=r.Left, Top:=r.Top, _ Width:=r.Width, Height:=r.Height) Next r End Sub
On Error Resume Next
ให้เป็น Comment ไปก่อน แล้ว Run ทีละ Step สังเกตว่า Error ตรงบรรทัดใดครับCode: Select all
For Each r In ra
Set imgIcon = ActiveSheet.Shapes.AddPicture( _
Filename:="D:\1.Personel งานบุคคล\7.รูปพนักงาน\2020\" & r.Offset(0, -1).Value & ".jpg", LinkToFile:=False, _
SaveWithDocument:=True, Left:=r.Left + 1, Top:=r.Top + 1, _
Width:=r.Width + 30, Height:=r.Height + 75)
Next r