snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
mr.zatan
Bronze
Posts: 305 Joined: Sun Sep 05, 2010 8:31 am
Excel Ver: 2016
Contact:
#1
Post
by mr.zatan » Wed Feb 17, 2016 11:22 am
ความต้องการ :
ดึงรูปมาแสดงอัตโนมัติ ตามชื่อที่ต้องการ
ปัญหา :
ใส่รูปได้ปรกติ แต่เวลาจะแก้ไขหรือลบ จะเกิด error ทันที
ชื่ออยู่ที่
I31
รูปต้องการให้แสดงที่
B31
ที่ Sheet Print ทดสอบเลือกข้อมูลที่ I4 จะเกิด error ทันที
Code: Select all
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Columns("I")) Is Nothing Then Exit Sub
Dim myPict As Picture
With Cells(Target.Row, "B")
Set myPict = Cells(Target.Row, "B").Parent.Pictures.insert("D:\imagee\" & Target.Value & ".jpg")
myPict.Top = .Top
myPict.Width = .Width
myPict.Height = .Height
myPict.Left = .Left
myPict.Placement = xlMoveAndSize
End With
End Sub
Attachments
Order.xlsm
Order (225.42 KiB) Downloaded 14 times
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#2
Post
by snasui » Wed Feb 17, 2016 4:57 pm
ตามที่อธิบายมา
Set myPict ควรเป็นด้านล่างครับ
Set myPict = Cells(31, "B").Parent.Pictures.insert("D:\imagee\" & range("i31") & ".jpg")
mr.zatan
Bronze
Posts: 305 Joined: Sun Sep 05, 2010 8:31 am
Excel Ver: 2016
Contact:
#3
Post
by mr.zatan » Wed Feb 17, 2016 5:12 pm
ขอบคุณครับ..
ผมขอเปลี่ยนโจทย์นิดนึงครับ
จาก Code เดิม
Code: Select all
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Columns("P")) Is Nothing Then Exit Sub
Dim myPict As Picture
With Cells(Target.Row, "O")
Set myPict = Cells(Target.Row, "O").Parent.Pictures.insert("D:\imagee\" & Target.Value & ".jpg")
myPict.Top = .Top
myPict.Width = .Width
myPict.Height = .Height
myPict.Left = .Left
myPict.Placement = xlMoveAndSize
End With
End Sub
ชื่ออยู่
คอลัมน์ P
แสดงรูปที่
คอลัมน์ O
ปัญหาตอนนี้คือ
ที่ คอลัมน์ P กดลบหรือแก้ไขชื่อ จะเกิด error ทันที
Last edited by
mr.zatan on Wed Feb 17, 2016 5:14 pm, edited 1 time in total.
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#4
Post
by snasui » Wed Feb 17, 2016 5:14 pm
แนบไฟล์พร้อมรูปที่จะให้แสดงมาด้วยจะได้ช่วยทดสอบได้ครับ
mr.zatan
Bronze
Posts: 305 Joined: Sun Sep 05, 2010 8:31 am
Excel Ver: 2016
Contact:
#5
Post
by mr.zatan » Wed Feb 17, 2016 5:23 pm
ตามไฟล์รูปและไฟล์แนบครับ
Attachments
Order2.xlsm
(55.41 KiB) Downloaded 11 times
logic
Gold
Posts: 1511 Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365
#6
Post
by logic » Wed Feb 17, 2016 5:30 pm
ที่บอกว่าชื่ออยู่ในคอลัมน์ P ผมไม่เห็นว่ามีนะครับ ลองตรวจสอบไฟล์แนบอีกทีครับ
ผมอ่านแล้วเข้าใจว่าอาจารย์ให้แนบตัวอย่างรูปที่จะให้แสดงในไฟล์ จะได้เอาไปทดสอบได้
mr.zatan
Bronze
Posts: 305 Joined: Sun Sep 05, 2010 8:31 am
Excel Ver: 2016
Contact:
#7
Post
by mr.zatan » Wed Feb 17, 2016 5:45 pm
ไฟล์พร้อมรูปครับ
Attachments
Order2.xlsm
Excel (56.54 KiB) Downloaded 11 times
imagee.zip
ไฟล์รูป (67.7 KiB) Downloaded 8 times
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#8
Post
by snasui » Wed Feb 17, 2016 7:12 pm
วิธีการที่ใช้นั้นเป็นการดึงภาพจาก Web มาแสดง กรณีที่ต้องการดึงภาพที่เก็บไว้ในเครื่องมาแสดง ดูตัวอย่างได้ที่นี่่ครับ
wordpress/picture-from-folder/
mr.zatan
Bronze
Posts: 305 Joined: Sun Sep 05, 2010 8:31 am
Excel Ver: 2016
Contact:
#9
Post
by mr.zatan » Wed Feb 17, 2016 7:46 pm
snasui wrote: วิธีการที่ใช้นั้นเป็นการดึงภาพจาก Web มาแสดง กรณีที่ต้องการดึงภาพที่เก็บไว้ในเครื่องมาแสดง ดูตัวอย่างได้ที่นี่่ครับ
wordpress/picture-from-folder/
แต่ติดตรงที่ต้องกดปุ่ม รูปถึงจะโชวนี่สิ ครับ
คือผมอยากให้ใส่ชื่อเสร็จ enter รูปขึ้นมาเลยน่ะครับ.
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#10
Post
by snasui » Wed Feb 17, 2016 7:51 pm
อันนั้นไม่ใช่ปัญหา Code เดิมเป็นการเรียกใช้ Event
Code ที่ผมให้ไปก็เรียกใช้ Event ได้เช่นเดียวกัน และปกติแล้วไม่ว่า Code ไหน ๆ ก็เรียกใช้ผ่าน Event ได้ทั้งนั้น ขึ้นอยู่กับความต้องการ ลองปรับใช้ดูครับ
mr.zatan
Bronze
Posts: 305 Joined: Sun Sep 05, 2010 8:31 am
Excel Ver: 2016
Contact:
#11
Post
by mr.zatan » Thu Feb 18, 2016 11:02 am
ซึ่งตอนนี้ รูปยืดตามความกว้างของช่องครับ
จาก Code แก้ให้ Width เป็น Auto ได้มัยครับ
Code: Select all
For Each r In ra
Set imgIcon = ActiveSheet.Shapes.AddPicture( _
Filename:="D:\imagee\" & r.Offset(0, -1).Value & ".jpg", LinkToFile:=False, _
SaveWithDocument:=True, Left:=r.Left, Top:=r.Top, _
Width:=r.Width, Height:=r.Height)
Next r
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#12
Post
by snasui » Thu Feb 18, 2016 6:09 pm
เอา
Width:=r.Width, Height:=r.Height ออกหากไม่ต้องการปรับให้ความกว้างและความสูงภาพมีขนาดเท่าความกว้างและความสูงเซลล์ครับ
mr.zatan
Bronze
Posts: 305 Joined: Sun Sep 05, 2010 8:31 am
Excel Ver: 2016
Contact:
#13
Post
by mr.zatan » Thu Feb 18, 2016 6:17 pm
ลบออกแล้ว error ครับ
Code: Select all
Sub STAMP_P4()
Dim sFile As Variant, r As Range
Dim imgIcon As Object
Set r = Range("P4").MergeArea
sFile = Application.GetOpenFilename(FileFilter:="Pic Files (*.jpg;*.bmp), *.jpg;*.bmp", _
Title:="Browse to select a picture")
If sFile = False Then Exit Sub
Set imgIcon = ActiveSheet.Shapes.AddPicture( _
Filename:=sFile, _
LinkToFile:=False, _
SaveWithDocument:=msoCTrue, _
Left:=r.Left, _
Top:=r.Top)
End Sub
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#14
Post
by snasui » Thu Feb 18, 2016 9:32 pm
ขออภัยครับ
.AddPicture จำเป็นต้องกำหนดตำแหน่งและความสูงความกว้าง ไม่สามารถละไว้ได้ครับ
ตัวอย่างการกำหนดแบบอื่น ๆ
Top:= 100, Left:= 100, Width:= 70,Heigth:= 70 สามารถเปลี่ยนค่าตัวเลขได้ตามต้องการ
mr.zatan
Bronze
Posts: 305 Joined: Sun Sep 05, 2010 8:31 am
Excel Ver: 2016
Contact:
#15
Post
by mr.zatan » Thu Feb 18, 2016 10:50 pm
สรุปคือ Width ไม่สามารถปรับเป็น Auto ได้ใช่มัยครับ
ผมแปลกใจทำมัย Code นี้รูปไม่ยืดด aspect ratio ถูกต้อง รูปไม่ยืด...
Code: Select all
With Cells(Target.Row, "B")
Set myPict = Cells(Target.Row, "B").Parent.Pictures.insert("D:\imagee\" & Target.Value & ".jpg")
myPict.Top = .Top
myPict.Width = .Width
myPict.Height = .Height
myPict.Left = .Left
myPict.Placement = xlMoveAndSize
End With
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#16
Post
by snasui » Thu Feb 18, 2016 11:33 pm
mr.zatan wrote: สรุปคือ Width ไม่สามารถปรับเป็น Auto ได้ใช่มัยครับ
คำว่า "มัย" ที่ถูกต้องคือ "ไหม" หรือเขียนเป็น "หรือไม่" ครับ ส่วนคำตอบนั้นผมตอบไว้แล้วตามโพสต์ด้านบน
ที่รูปไม่ยืดตามความยาวเซลล์ผมทดสอบแล้วพบว่าเนื่องจากใช้กำหนดความสูงให้เท่าความสูงของเซลล์ หากไม่กำหนดความสูง จะทำให้รูปยืดเท่าความยาวเซลล์
เดิมผมทดสอบ Code นี้จากเครื่องคอมพิวเตอร์อีกเครื่อง พบว่าติด Error ดังที่แจ้งมา แต่สามารถแทรกภาพจาก Web ได้ เมื่อมาลองกับเครื่องปัจจุบันสามารถที่จะแทรกภาพที่มีอยู่ในเครื่องได้ปกติ
ทั้ง ๆ ที่ Code นี้สามารถได้มาด้วยการบันทึก Macro