รันแมโครแล้ว Error




พอกดบันทึกข้อมูลแล้วเกิด Error ไม่ทราบว่ามันเกิดจากอะไรคะ เพราะทำขั้นตอนทุกอย่าง
ช่วยแก้ไขทีค่ะ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 3
เช็กเซลล์ที่เลือกให้ถูก จขกท.ไปดูเองเพราะไม่มีใครรู้ด้วย



ข้อผิดพลาดเกิดจากบรรทัด ActiveCell.Offset(1, 0).Range("A1").Select เพราะว่า .Range("A1") หลังจาก .Offset ไม่จำเป็นและอาจทำให้เกิดข้อผิดพลาดได้ คุณสามารถแก้ไขโดยลบ .Range("A1") ออก แล้วใช้เพียง:

ActiveCell.Offset(1, 0).Select

แทน

ตัวอย่างโค้ดที่แก้ไขแล้ว:

Sub A()
    ' คัดลอกข้อมูลจากแถว 13 ไปจนสุดคอลัมน์ที่ใช้
    Range("A13").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    
    ' ไปเลือกเซลล์ว่างในคอลัมน์ A ของ Sheet8
    Sheets("Sheet8").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select  ' แก้ไขแล้ว
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    
    ' เลื่อนขึ้น 2 แถวในคอลัมน์ A
    ActiveCell.Offset(-2, 0).Select
    Sheets("Input").Select
    
    ' เลือกช่วงเซลล์ที่ต้องการเคลียร์ข้อมูล
    Range("C4, F4, I4, L4, C6, F6, I6, L6, C8, F8, C10").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("C4").Select
End Sub


Offset ใน VBA คือคำสั่งที่ใช้เพื่อเลื่อนตำแหน่งของเซลล์หรือช่วงเซลล์ไปยังตำแหน่งใหม่ โดยอิงจากตำแหน่งปัจจุบัน (เช่น ActiveCell หรือ Range ที่กำหนดไว้)

ตัวอย่าง:

ActiveCell.Offset(2, 3)

หมายถึง เลื่อนจากเซลล์ที่ใช้อยู่ปัจจุบัน ไปลงด้านล่าง 2 แถว และไปทางขวา 3 คอลัมน์

พารามิเตอร์:

- ตัวแรก (จำนวนแถว): ถ้าเป็นบวก จะเลื่อนลง, ถ้าเป็นลบ จะเลื่อนไปด้านบน
- ตัวที่สอง (จำนวนคอลัมน์): ถ้าเป็นบวก จะเลื่อนไปทางขวา, ถ้าเป็นลบ จะเลื่อนไปทางซ้าย

ตัวอย่างการใช้งาน:

Range("A1").Offset(1, 2).Select

จะเป็นการเลือกเซลล์ที่อยู่ 1 แถวด้านล่างและ 2 คอลัมน์ทางขวาจากเซลล์ A1 ซึ่งก็คือเซลล์ C2




วิธีการตั้ง Breakpoint เพื่อดีบัก VBA
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่