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]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)Code: Select all
Sub ShowPicture() 'ชื่อ Sup Procedure จะเป็นชื่ออะไรก็ได้ ถ้าเขียนให้สื่อความหมายว่าต้องการทำอะไรก็จะยิ่งดี
Dim r As Range, ra As Range 'การประกาศตัวแปรให้ r, ra เป็นช่วงข้อมูล
Dim imgIcon As Object 'การประกาศตัวแปรให้ imgIcon เป็น Object
Dim obj As Object 'การประกาศตัวแปรให้ obj เป็น Object
On Error Resume Next 'Code สำหรับการกำหนดว่าแม้มี Error ก็ยังคงให้ Run Code ต่อไป
With Worksheets("Sheet1") 'กำหนดว่าบรรทัดในช่วง With..End With เป็นการกำหนดค่าใน Sheet1
Set ra = .Range("G4", .Range("F65536").End(xlUp).Offset(0, 1)) 'กำหนดให้ตัวแปร ra มีค่าเท่ากับช่วง G4:Gn (n คือค่าสุดท้ายที่มีข้อมูล)
End With
For Each obj In ActiveSheet.Shapes 'กำหนดการ Loop ค่า Object ทั้งหมดในชีทปัจจุบัน
If Left(obj.Name, 4) = "Pict" Then 'ถ้า Object นั้นมี 4 อักขระหน้าของชื่อเป็นคำว่า "Pict" แล้ว
obj.Delete 'ให้ลบ Object นั้น
End If
Next obj 'ไปยัง Object ถัดไป
For Each r In ra 'กำหนดการ Loop แต่ละเซลล์ให้ช่วง 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) 'ให้นำภาพตามชื่อที่อยู่ในเซลล์ด้านซ้ายของแต่ละเซลล์ ใน Folder D: โดยชื่อของภาพต้องมีนามสกุลเป็น .jpg มาแสดง โดยให้ความสูง ความกว้างพอดีกับเซลล์ (จะกำหนดนามสกุลภาพเป็นอย่างอื่นก็ต้องเปลี่ยน .jpg เป็นค่าอื่น)
Next r 'ไปยังเซลล์ถัดไป
End Sub
ควรแนบไฟล์ตัวอย่างพร้อม Code ที่ลองเขียนเองมาแล้วครับจะได้ทดสอบได้และระบุตำแหน่งได้ตรงกับความต้องการมากกว่าหากผมจะแก้ไขจุดแสดงภาพเป็นช่วงของ cell ที่ผสานไว้ เช่นให้แสดงที่ K10:O16 1. ผมต้องเขียนCode .Range("K10:O16"),.Range("K10") ใช่หรือไม่ครับ? 2. แล้วต่อด้วย ("F65536") หรือไม่ครับ? 3. และหากผมต้องการแสดงภาพ 2 ภาพ หรือมากกว่าแต่ไม่เกิน 10 ภาพ จะต้องแก้ไขสูตรอย่างไร ตรงไหนครับ?
การเขียน Code VBA นั้นจะกำหนดให้มีปุ่มให้กดหรือไม่ก็ย่อมทำได้ จากที่ถามมา หากทำด้วย VBA สามารถทำได้ทั้งนั้นครับ การเขียน VBA จำเป็นต้องเขียนมาก่อนเสมอ เขียนมาแล้วติดตรงไหนสามารถถามได้ หากไม่เข้าใจพื้นฐานและเขียนเองไม่ได้เลย ไม่ควรใช้ VBA ครับ ถ้าหากจำเป็นต้องใช้ ควรให้ผู้ที่เขียนได้เขียนมาก่อน แล้วถามมาเฉพาะที่เป็นปัญหาโดยต้องมี Code แนบมาด้วยเสมอ ระบุให้ชัดเจนว่า Procedure ใด Module ใด เพื่อจะได้เข้าถึงข้อมูลโดยไวครับผมไม่เห็น Code Macroของ Commnd Box ที่ใช้เป็นปุ่มกดให้แสดงภาพเมื่อใส่รหัสภาพ ไม่ทราบว่าทำอย่างไรครับและหากไม่ต้องการใช้ปุ่มนี้ แต่ให้เมื่อเรา ใส่รหัสภาพใน Cell แล้ว เคอเซอร์เลื่อนออกนอก Cell ที่รับรหัส ก็ให้ภาพแสดงทันที่ได้ไหมครับและหากผมใส่ Cell ที่รับรหัสภาพ โดยการ Link รหัสภาพมาจากที่อื่น เมื่อรหัสถูกLink มาก็ให้ปรากฎภาพเลย หรือใช้ปุ่มกดให้แสดงได้ไหมครับ
set ra = .range("g4").resize(1,4)
เป็นการขยาย g4 ไปด้านขวา 4 เซลล์ เช่นนี้เป็นต้น