: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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Vespaclassic
Member
Member
Posts: 21
Joined: Mon Aug 17, 2020 4:34 pm
Excel Ver: 365

เก็บโค๊ดไว้ในตัวแปรได้มั้ยครับ หรือทำเป็นฟังชั่น เพราะโค๊ดยาว

#1

Post by Vespaclassic »

หลักการทำงานของโปรแกรมของผมคือ

รับค่ามาจาก cell "C1" sheet "SHAPE"
กดคลิกที่ button จะทำการ copy รูปภาพ จาก SHEET "SHAPE" ไปยัง SHEET"pic1 และ SHEET "pic2" ตาม cell ที่กำหนดไว้
ค่าที่รับมาจาก cell "C1" sheet "SHAPE" จะเป็นการระบุจำนวนรูปภาพที่ copy
โค๊ดชุดนี้นทำงานได้ปกติ

แต่บางครั้งผมมีการรับค่ามา จำนวน 100 ซึ่งโค๊ดจะยาวมาก จะไม่สามารถรันได้ เกินขอบเขตของ vba

คำถามคือ ชุดโค๊ดนี้สามารถใส่ไว้ในตัวแปรได้หรือไม่ครับ หรือทำเป็นฟังชั่นได้มั้ย
โค๊ดนี้คือ copy รูปภาพ 1 รูป

Code: Select all

 
  '1
    Sheets("SHAPE").Select
    Range("B2").Select
    Selection.Copy
    Sheets("pic1").Select
    Range("B2").Select
    ActiveSheet.Pictures.Paste.Select
    
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 36.5
    Selection.ShapeRange.Width = 101

    Sheets("pic2").Select
    Range("B2").Select
    ActiveSheet.Pictures.Paste.Select
ส่วนอันนี้คือโค๊ด copy รูป 3 รูป ซึ่งเวลารับค่าตัวเลขจำนวนมาก โค๊ดจะซ้ำๆกัน ทำให้เปลืองเนื้อที่

Code: Select all

Sub Button1()

Select Case Range("C3")

Case "1"
On Error Resume Next
  '1
    Sheets("SHAPE").Select
    Range("B2").Select
    Selection.Copy
    Sheets("pic1").Select
    Range("B2").Select
    ActiveSheet.Pictures.Paste.Select
    
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 36.5
    Selection.ShapeRange.Width = 101

    Sheets("pic2").Select
    Range("B2").Select
    ActiveSheet.Pictures.Paste.Select
Case "2"
On Error Resume Next
  '1
    Sheets("SHAPE").Select
    Range("B2").Select
    Selection.Copy
    Sheets("pic1").Select
    Range("B2").Select
    ActiveSheet.Pictures.Paste.Select
    
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 36.5
    Selection.ShapeRange.Width = 101

    Sheets("pic2").Select
    Range("B2").Select
    ActiveSheet.Pictures.Paste.Select
 '2
    Sheets("SHAPE").Select
    Range("B3").Select
    Selection.Copy
    Sheets("pic1").Select
    Range("B3").Select
    ActiveSheet.Pictures.Paste.Select
    
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 36.5
    Selection.ShapeRange.Width = 101

    Sheets("pic2").Select
    Range("B3").Select
    ActiveSheet.Pictures.Paste.Select
Case "3"
  On Error Resume Next
  '1
    Sheets("SHAPE").Select
    Range("B2").Select
    Selection.Copy
    Sheets("pic1").Select
    Range("B2").Select
    ActiveSheet.Pictures.Paste.Select
    
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 36.5
    Selection.ShapeRange.Width = 101

    Sheets("pic2").Select
    Range("B2").Select
    ActiveSheet.Pictures.Paste.Select
'2
    Sheets("SHAPE").Select
    Range("B3").Select
    Selection.Copy
    Sheets("pic1").Select
    Range("B3").Select
    ActiveSheet.Pictures.Paste.Select
    
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 36.5
    Selection.ShapeRange.Width = 101

    Sheets("pic2").Select
    Range("B3").Select
    ActiveSheet.Pictures.Paste.Select
'3
    Sheets("SHAPE").Select
    Range("B4").Select
    Selection.Copy
    Sheets("pic1").Select
    Range("B4").Select
    ActiveSheet.Pictures.Paste.Select
    
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 36.5
    Selection.ShapeRange.Width = 101

    Sheets("pic2").Select
    Range("B4").Select
    ActiveSheet.Pictures.Paste.Select
    End Select
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: 30944
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: เก็บโค๊ดไว้ในตัวแปรได้มั้ยครับ หรือทำเป็นฟังชั่น เพราะโค๊ดยาว

#2

Post by snasui »

:D กรุณาแนบไฟล์ที่มี Code มาพร้อมแล้วจะได้ดูต่อไปจากนั้น

สำหรับการเขียน Code เพื่อจัดการรูปจำนวนมากเราจะไม่เขียน Code ซ้ำแต่จะใช้การ Loop เข้ามาช่วยครับ

ดูตัวอย่างการ Loop ได้ที่นี่แล้วปรับใช้ดูครับ wordpress/?s=loop, search.php?keywords=loop&terms=all&auth ... mit=Search
Vespaclassic
Member
Member
Posts: 21
Joined: Mon Aug 17, 2020 4:34 pm
Excel Ver: 365

Re: เก็บโค๊ดไว้ในตัวแปรได้มั้ยครับ หรือทำเป็นฟังชั่น เพราะโค๊ดยาว

#3

Post by Vespaclassic »

ลองไปศึกษาดูครับ

ผมได้แนบไฟล์ใหม่ไปแล้วครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30944
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 Button1()
    Dim l As Long, tg As Range
    Dim i As Integer, k As Integer
    i = 1
    Sheets("pic1").DrawingObjects.Delete
    For l = 1 To Sheets("SHAPE").Range("c3").Value
        Sheets("SHAPE").Range("b1").Offset(i, 0).Copy
        With Sheets("pic1")
            .Activate
            Set tg = .Range("b1").Offset(i, k)
            tg.Select
            With .Pictures.Paste.ShapeRange
                .LockAspectRatio = msoFalse
                .Height = tg.Height '36.5
                .Width = tg.Width '101
            End With
        End With
        Application.CutCopyMode = False
        If i = 12 Then
            i = 1
            k = k + 1
        Else
            i = i + 1
        End If
    Next l
End Sub
Vespaclassic
Member
Member
Posts: 21
Joined: Mon Aug 17, 2020 4:34 pm
Excel Ver: 365

Re: เก็บโค๊ดไว้ในตัวแปรได้มั้ยครับ หรือทำเป็นฟังชั่น เพราะโค๊ดยาว

#5

Post by Vespaclassic »

ขอบคุณมากครับ ตัวอย่างโค๊ดที่ให้มา สั้นและดีมากเลยครับ

แต่ผมติดปัญหาเพิ่มครับ


โดยปกติ sheet pic1 ผมจะ วางรูป ลงมาแค่ 20 รูป (อันนี้ทำได้) แล้วข้ามลงไปอีกไปมาณ 10 cell ถึงจะวางรูปอีกที่ ตามไฟล์ตัวอย่างที่แนบมา

และ sheet pic2 วางรูปแนวคอลัม

ผมลองแก้โค้ดที่ให้ตัวอย่างมา
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30944
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: เก็บโค๊ดไว้ในตัวแปรได้มั้ยครับ หรือทำเป็นฟังชั่น เพราะโค๊ดยาว

#6

Post by snasui »

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

Code: Select all

Sub Button1()
    Dim l As Long, tg As Range
    Dim i As Integer, k As Integer
    Dim j As Integer, m As Integer, n As Integer
    i = 0
    j = 0
    Sheets("pic1").DrawingObjects.Delete
    Sheets("pic2").DrawingObjects.Delete
    For l = 1 To Sheets("SHAPE").Range("c3").Value
        Sheets("SHAPE").Range("b1").Offset(l, 0).Copy
    
        With Sheets("pic1")
            .Activate
            Set tg = .Range("b2").Offset(i, 0).MergeArea
            tg.Select
            With .Pictures.Paste.ShapeRange
                .LockAspectRatio = msoFalse
                .Height = tg.Height
                .Width = tg.Width
            End With
            k = k + 1
        End With
       If k Mod 10 = 0 Then
          i = i + 8
       Else
          i = i + 2
       End If
       
       With Sheets("pic2")
            .Activate
            Set tg = .Range("b2").Offset(j, n).MergeArea
            tg.Select
            With .Pictures.Paste.ShapeRange
                .LockAspectRatio = msoFalse
                .Height = tg.Height
                .Width = tg.Width
            End With
            m = m + 1
        End With
       If m Mod 5 = 0 Then
          n = n + 4
          j = 0
       Else
          j = j + 5
       End If
       Application.CutCopyMode = False
    Next l
End Sub
Vespaclassic
Member
Member
Posts: 21
Joined: Mon Aug 17, 2020 4:34 pm
Excel Ver: 365

Re: เก็บโค๊ดไว้ในตัวแปรได้มั้ยครับ หรือทำเป็นฟังชั่น เพราะโค๊ดยาว

#7

Post by Vespaclassic »

โห สุดยอดมากเลยครับ ขอบคุณมากเลยครับ


ผมขอถามอีกนิดครับ

ตรง sheet pic2 จะเขียนโค็ดยังไงให้วางรูปไปทางขวาก่อนครับ ตามไฟล ที่แนบไปครั้งก่อนครับ จะเรียงจากซ้ายมาขวา พอครบ 3 แล้วเริ่มใหม่
User avatar
snasui
Site Admin
Site Admin
Posts: 30944
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: เก็บโค๊ดไว้ในตัวแปรได้มั้ยครับ หรือทำเป็นฟังชั่น เพราะโค๊ดยาว

#8

Post by snasui »

:D สำหรับการการปรับ Code ที่ได้รับคำตอบไปแล้วจะต้องปรับกันมาเอง ติดปัญหาแล้วค่อยถามกันต่อ ไม่สามารถถามต่อเนื่องโดยไม่ผ่านการปรับด้วยตนเองมาก่อนได้ครับ
Vespaclassic
Member
Member
Posts: 21
Joined: Mon Aug 17, 2020 4:34 pm
Excel Ver: 365

Re: เก็บโค๊ดไว้ในตัวแปรได้มั้ยครับ หรือทำเป็นฟังชั่น เพราะโค๊ดยาว

#9

Post by Vespaclassic »

ขอบคุณมากครับ ขอไปปรับก่อนครับ แล้วจะมาแจ้งให้ทราบครับ
Vespaclassic
Member
Member
Posts: 21
Joined: Mon Aug 17, 2020 4:34 pm
Excel Ver: 365

Re: เก็บโค๊ดไว้ในตัวแปรได้มั้ยครับ หรือทำเป็นฟังชั่น เพราะโค๊ดยาว

#10

Post by Vespaclassic »

ทำได้แล้วนะครับ ขอบคุณมากเลยครับ ทำความเข้าใจกับโค๊ด แล้วปรับแค่นิดเดียวจริงๆ
You do not have the required permissions to view the files attached to this post.
Post Reply