:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

ช่วยปรับโค๊ดด้านล่างให้สามารถอัพโหลดรูปภาพได้ให้พอดีกับขนาด เซลล์ที่กำหนด

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
SuminO
Member
Member
Posts: 91
Joined: Thu Jul 25, 2019 4:57 pm
Excel Ver: 365 2021

ช่วยปรับโค๊ดด้านล่างให้สามารถอัพโหลดรูปภาพได้ให้พอดีกับขนาด เซลล์ที่กำหนด

#1

Post by SuminO »

รบกวนอาจารย์
ช่วยปรับโค๊ดด้านล่างให้สามารถอัพโหลดรูปภาพ
แล้วมาลงตารางรูปตามที่กำหนดไว้ ปรับให้กึ่งกลางมีขนาด พอดี
และเว้น ช่องไว้ใส่ข้อความ

ผมลองปรับโค๊ดแล้ว มันมีขนาดไมเท่ากันครับ

Code: Select all

Sub InsertPictures()
    Dim ws As Worksheet
    Dim Pic As Picture
    Dim PicPath As String
    Dim cell As Range
    Dim r As Long
    Dim c As Long
    Dim PicWidth As Double
    Dim PicHeight As Double
    Dim TargetRange As Range
    Dim RowHeight As Double
    Dim ColumnWidth As Double

    Set ws = ThisWorkbook.Sheets("Sheet1")
    
  
    Set TargetRange = ws.Range("A2:B2,A4:B4,A6:B6,A8:B8,A10:B10") '
    
    For Each cell In TargetRange.Cells

        With Application.FileDialog(msoFileDialogFilePicker)
            .Title = "Select Picture"
            .Filters.Clear
            .Filters.Add "Images", "*.jpg; *.jpeg; *.png; *.bmp; *.gif"
            If .Show = -1 Then
                PicPath = .SelectedItems(1)
            Else
                Exit Sub
            End If
        End With

        Set Pic = ws.Pictures.Insert(PicPath)

        RowHeight = cell.Height
        ColumnWidth = cell.Width

        PicWidth = Pic.Width
        PicHeight = Pic.Height
        
        If PicWidth / ColumnWidth > PicHeight / RowHeight Then
            Pic.Width = ColumnWidth - 10
            Pic.Height = Pic.Height * ((ColumnWidth - 10) / PicWidth)
        Else
            Pic.Height = RowHeight - 20
            Pic.Width = Pic.Width * ((RowHeight - 20) / PicHeight)
        End If
        
  
        Pic.Top = cell.Top + 5
        Pic.Left = cell.Left + 5
        

        With ws.Shapes.AddTextbox(msoTextOrientationHorizontal, Pic.Left, Pic.Top + Pic.Height + 5, Pic.Width, 15)
            .TextFrame.Characters.Text = "Your Text Here"
            .TextFrame.HorizontalAlignment = xlHAlignCenter
            .Line.Visible = msoFalse
        End With
    Next cell
End Sub

You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ช่วยปรับโค๊ดด้านล่างให้สามารถอัพโหลดรูปภาพได้ให้พอดีกับขนาด เซลล์ที่กำหนด

#2

Post by snasui »

:D ตัวอย่าง Code ครับ

Code: Select all

Sub InsertPictures()
    Dim p As Object
    Dim picPath As String
    Dim ws As Worksheet
    Dim TargetRange As Range
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set TargetRange = ws.Range("A2:B2,A4:B4,A6:B6,A8:B8,A10:B10")
    
    For Each cell In TargetRange.Cells
        With Application.FileDialog(msoFileDialogFilePicker)
            .Title = "Select Picture"
            .Filters.Clear
            .Filters.Add "Images", "*.jpg; *.jpeg; *.png; *.bmp; *.gif"
            If .Show = -1 Then
                picPath = .SelectedItems(1)
            Else
                Exit Sub
            End If
            With cell
                .Activate
                Set p = .Parent.Shapes.AddPicture( _
                    Filename:=picPath, _
                    linktofile:=False, _
                    savewithdocument:=True, _
                    Left:=.Left, _
                    Top:=.Top, _
                    Width:=.Width, _
                    Height:=.Height)
            End With
        End With
    Next cell
End Sub
SuminO
Member
Member
Posts: 91
Joined: Thu Jul 25, 2019 4:57 pm
Excel Ver: 365 2021

Re: ช่วยปรับโค๊ดด้านล่างให้สามารถอัพโหลดรูปภาพได้ให้พอดีกับขนาด เซลล์ที่กำหนด

#3

Post by SuminO »

ขอบคุณมากครับ

แล้วถ้าหากเลือกทีละเยอะ ๆ ละครับ
ต้องเพิ่มส่วนไหน ผมเพิ่ม เข้าไปเป็น
AllowMultiSelect = True

มันเตือน Bug

Code: Select all

Sub InsertPictures()
    Dim p As Object
    Dim picPaths As Variant
    Dim ws As Worksheet
    Dim TargetRange As Range
    Dim cell As Range
    Dim i As Integer
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set TargetRange = ws.Range("A2:B2,A4:B4,A6:B6,A8:B8,A10:B10")
    
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Select Pictures"
        .Filters.Clear
        .Filters.Add "Images", "*.jpg; *.jpeg; *.png; *.bmp; *.gif"
        .AllowMultiSelect = True ' Allow multiple file selection
        If .Show = -1 Then
            picPaths = .SelectedItems
        Else
            Exit Sub
        End If
    End With
    
    i = 1 ' Initialize index for target range
    For Each cell In TargetRange.Cells
        If i > UBound(picPaths) Then Exit For ' Exit if there are no more pictures to insert
        With cell
            .Activate
            Set p = .Parent.Shapes.AddPicture( _
                Filename:=picPaths(i), _
                linktofile:=False, _
                savewithdocument:=True, _
                Left:=.Left, _
                Top:=.Top, _
                Width:=.Width, _
                Height:=.Height)
        End With
        i = i + 1 ' Move to the next picture
    Next cell
End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ช่วยปรับโค๊ดด้านล่างให้สามารถอัพโหลดรูปภาพได้ให้พอดีกับขนาด เซลล์ที่กำหนด

#4

Post by snasui »

:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Sub InsertPictures()
    Dim p As Object
    Dim picPaths As FileDialogSelectedItems
    Dim ws As Worksheet
    Dim TargetRange As Range
    Dim cell As Range
    Dim i As Integer
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set TargetRange = ws.Range("A2:B2,A4:B4,A6:B6,A8:B8,A10:B10")
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Select Pictures"
        .Filters.Clear
        .Filters.Add "Images", "*.jpg; *.jpeg; *.png; *.bmp; *.gif"
        .AllowMultiSelect = True ' Allow multiple file selection
        If .Show = -1 Then
            Set picPaths = .SelectedItems
        Else
            Exit Sub
        End If
    End With
    
    i = 1 ' Initialize index for target range
    For Each cell In TargetRange.Cells
        With cell
            .Activate
            Set p = .Parent.Shapes.AddPicture( _
                Filename:=picPaths(i), _
                linktofile:=False, _
                savewithdocument:=True, _
                Left:=.Left, _
                Top:=.Top, _
                Width:=.Width, _
                Height:=.Height)
        End With
        i = i + 1 ' Move to the next picture
        If i > picPaths.Count Then Exit Sub
    Next cell
End Sub
SuminO
Member
Member
Posts: 91
Joined: Thu Jul 25, 2019 4:57 pm
Excel Ver: 365 2021

Re: ช่วยปรับโค๊ดด้านล่างให้สามารถอัพโหลดรูปภาพได้ให้พอดีกับขนาด เซลล์ที่กำหนด

#5

Post by SuminO »

ขอบคุณมากๆครับ

แต่ยังเออเร่อครับอาจารย์ผมเพิ่มช่วงเข้าไปแล้ว
มันError ช่วงนี้ครับ
Set TargetRange = ws.Range("A4, D4, A6, D6, A8, D8, " & _
"A13, D13, A15, D15, A17, D17, " & _
"A22, D22, A24, D24, A26, D26, " & _
"A31, D31, A33, D33, A35, D35, " & _
"A40, D40, A42, D42, A44, D44, " & _
"A49, D49, A51, D51, A53, D53, " & _
"A58, D58, A60, D60, A62, D62, " & _
"A67, D67, A69, D69, A71, D71, " & _
"A76, D76, A78, D78, A80, D80, " & _
"A85, D85, A87, D87, A89, D89")

Code: Select all

Sub InsertPictures()
    Dim p As Object
    Dim picPaths As FileDialogSelectedItems
    Dim ws As Worksheet
    Dim TargetRange As Range
    Dim cell As Range
    Dim i As Integer
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
      Set TargetRange = ws.Range("A4, D4, A6, D6, A8, D8, " & _
                               "A13, D13, A15, D15, A17, D17, " & _
                               "A22, D22, A24, D24, A26, D26, " & _
                               "A31, D31, A33, D33, A35, D35, " & _
                               "A40, D40, A42, D42, A44, D44, " & _
                               "A49, D49, A51, D51, A53, D53, " & _
                               "A58, D58, A60, D60, A62, D62, " & _
                               "A67, D67, A69, D69, A71, D71, " & _
                               "A76, D76, A78, D78, A80, D80, " & _
                               "A85, D85, A87, D87, A89, D89")
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Select Pictures"
        .Filters.Clear
        .Filters.Add "Images", "*.jpg; *.jpeg; *.png; *.bmp; *.gif"
        .AllowMultiSelect = True ' Allow multiple file selection
        If .Show = -1 Then
            Set picPaths = .SelectedItems
        Else
            Exit Sub
        End If
    End With
    
    i = 1 ' Initialize index for target range
    For Each cell In TargetRange.Cells
        With cell
            .Activate
            Set p = .Parent.Shapes.AddPicture( _
                Filename:=picPaths(i), _
                linktofile:=False, _
                savewithdocument:=True, _
                Left:=.Left, _
                Top:=.Top, _
                Width:=.Width, _
                Height:=.Height)
        End With
        i = i + 1 ' Move to the next picture
        If i > picPaths.Count Then Exit Sub
    Next cell
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ช่วยปรับโค๊ดด้านล่างให้สามารถอัพโหลดรูปภาพได้ให้พอดีกับขนาด เซลล์ที่กำหนด

#6

Post by snasui »

:D เข้าใจว่าเกิดอักขระแปลกปลอมอยู่ใน String นั้น ลองปรับเป็นด้านล่างครับ

Code: Select all

'Other code
    Set TargetRange = ws.Range("A4,D4,A6,D6,A8,D8," & _
                                "A13,D13,A15,D15,A17,D17," & _
                                "A22,D22,A24,D24,A26,D26," & _
                                "A31,D31,A33,D33,A35,D35," & _
                                "A40,D40,A42,D42,A44,D44," & _
                                "A49,D49,A51,D51,A53,D53," & _
                                "A58,D58,A60,D60,A62,D62," & _
                                "A67,D67,A69,D69,A71,D71," & _
                                "A76,D76,A78,D78,A80,D80," & _
                                "A85,D85,A87,D87,A89,D89")
'Other code
Post Reply