Page 1 of 1

Code ดึงรูป

Posted: Thu Apr 26, 2012 10:25 pm
by sup
เรียน อาจารย์ครับ

เรื่องการเขียน Code ดึงรูปที่อาจารย์เคยเผยแพร่ในฟอรั่มนี้ผมลองใช้ดูก็สามารถดึงได้ครับ แต่ยังไม่เข้าใจความหมายของ Code จึงอยากรบกวนช่วยอธิบายให้หน่อยครับเพื่อความกระจ่าง ผมได้แนบไฟล์และคำถามมาครับ ต้องรบกวนหน่อยครับ

Re: Code ดึงรูป

Posted: Sat Apr 28, 2012 7:41 am
by snasui
:D จาก Code ในไฟล์แนบ ผมแปล 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
หากผมจะแก้ไขจุดแสดงภาพเป็นช่วงของ cell ที่ผสานไว้ เช่นให้แสดงที่ K10:O16 1. ผมต้องเขียนCode .Range("K10:O16"),.Range("K10") ใช่หรือไม่ครับ? 2. แล้วต่อด้วย ("F65536") หรือไม่ครับ? 3. และหากผมต้องการแสดงภาพ 2 ภาพ หรือมากกว่าแต่ไม่เกิน 10 ภาพ จะต้องแก้ไขสูตรอย่างไร ตรงไหนครับ?
ควรแนบไฟล์ตัวอย่างพร้อม Code ที่ลองเขียนเองมาแล้วครับจะได้ทดสอบได้และระบุตำแหน่งได้ตรงกับความต้องการมากกว่า
ผมไม่เห็น Code Macroของ Commnd Box ที่ใช้เป็นปุ่มกดให้แสดงภาพเมื่อใส่รหัสภาพ ไม่ทราบว่าทำอย่างไรครับและหากไม่ต้องการใช้ปุ่มนี้ แต่ให้เมื่อเรา ใส่รหัสภาพใน Cell แล้ว เคอเซอร์เลื่อนออกนอก Cell ที่รับรหัส ก็ให้ภาพแสดงทันที่ได้ไหมครับและหากผมใส่ Cell ที่รับรหัสภาพ โดยการ Link รหัสภาพมาจากที่อื่น เมื่อรหัสถูกLink มาก็ให้ปรากฎภาพเลย หรือใช้ปุ่มกดให้แสดงได้ไหมครับ
การเขียน Code VBA นั้นจะกำหนดให้มีปุ่มให้กดหรือไม่ก็ย่อมทำได้ จากที่ถามมา หากทำด้วย VBA สามารถทำได้ทั้งนั้นครับ การเขียน VBA จำเป็นต้องเขียนมาก่อนเสมอ เขียนมาแล้วติดตรงไหนสามารถถามได้ หากไม่เข้าใจพื้นฐานและเขียนเองไม่ได้เลย ไม่ควรใช้ VBA ครับ ถ้าหากจำเป็นต้องใช้ ควรให้ผู้ที่เขียนได้เขียนมาก่อน แล้วถามมาเฉพาะที่เป็นปัญหาโดยต้องมี Code แนบมาด้วยเสมอ ระบุให้ชัดเจนว่า Procedure ใด Module ใด เพื่อจะได้เข้าถึงข้อมูลโดยไวครับ

Re: Code ดึงรูป

Posted: Sat Apr 28, 2012 9:16 am
by sup
ขอบพระคุณมากครับอาจารย์ ตอนนี้กำลังศึกษาจากตำราที่หาซื้อมาครับ(หลายเล่มเลย) ต้องค่อยทำความเข้าใจไปเรื่อยๆครับ จะพยายามทำให้ได้ครับ นี่คือความมุ่งมั่นของผมครับ แต่สิ่งสำคัญ คือแรงบันด่ลใจที่ได้รับจากอาจารย์ครับ ขอเก่งสัก 1ใน 100 ขออาจารย์ก็พอครับ และคลต้องรบกวนมาเป็นระยะๆครับ
ขอบคุณมากๆครับ

Re: Code ดึงรูป

Posted: Sat Apr 28, 2012 10:07 am
by bank9597
:D :D

สู้ๆน่ะครับ อย่าหมดกำลังใจง่ายๆ เหมือนกับผม เรียนมาหลายเดือนแล้วครับ ยังไม่ก้าวหน้าเลย 1 ใน 100 ของอาจารย์ ผมยังได้ไม่ถึง เศษ 1 ส่วน 4 เลยครับ :lol:

สู้ๆครับ เป็นกำลังใจให้อีกคน :mrgreen:

Re: Code ดึงรูป

Posted: Sun Feb 18, 2018 5:33 pm
by Jenny_Jennista
สวัสดีค่ะ รบกวนสอบถามว่า หากต้องการดึงรูปให้อยู่แนวนอน ชื่อรูปตำแหน่ง C2 ,C3,C4 จากนั้นรูปภาพแสดงใต้ชื่อ ในตำแหน่ง D2,D3,D4 (จากโค้ดที่อาจารย์ให้มาจะวางรูปในแนวตั้ง) และต้องการทำซ้ำใน แถวถัดไป รบกวนอาจารย์ด้วยค่ะ

Re: Code ดึงรูป

Posted: Sun Feb 18, 2018 5:39 pm
by snasui
:D กำหนดตัวแปร ra ให้มีขอบเขตไปทางขวาเท่ากับที่ต้องการครับ

ตัวอย่าง set ra = .range("g4").resize(1,4) เป็นการขยาย g4 ไปด้านขวา 4 เซลล์ เช่นนี้เป็นต้น

การใช้ VBA จำเป็นต้องปรับปรุง Code มาเองก่อนเสมอ ติดแล้วค่อยถามกันครับ