คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 3
เช็กเซลล์ที่เลือกให้ถูก จขกท.ไปดูเองเพราะไม่มีใครรู้ด้วย
ข้อผิดพลาดเกิดจากบรรทัด ActiveCell.Offset(1, 0).Range("A1").Select เพราะว่า .Range("A1") หลังจาก .Offset ไม่จำเป็นและอาจทำให้เกิดข้อผิดพลาดได้ คุณสามารถแก้ไขโดยลบ .Range("A1") ออก แล้วใช้เพียง:
แทน
ตัวอย่างโค้ดที่แก้ไขแล้ว:
Offset ใน VBA คือคำสั่งที่ใช้เพื่อเลื่อนตำแหน่งของเซลล์หรือช่วงเซลล์ไปยังตำแหน่งใหม่ โดยอิงจากตำแหน่งปัจจุบัน (เช่น ActiveCell หรือ Range ที่กำหนดไว้)
ตัวอย่าง:
หมายถึง เลื่อนจากเซลล์ที่ใช้อยู่ปัจจุบัน ไปลงด้านล่าง 2 แถว และไปทางขวา 3 คอลัมน์
พารามิเตอร์:
- ตัวแรก (จำนวนแถว): ถ้าเป็นบวก จะเลื่อนลง, ถ้าเป็นลบ จะเลื่อนไปด้านบน
- ตัวที่สอง (จำนวนคอลัมน์): ถ้าเป็นบวก จะเลื่อนไปทางขวา, ถ้าเป็นลบ จะเลื่อนไปทางซ้าย
ตัวอย่างการใช้งาน:
จะเป็นการเลือกเซลล์ที่อยู่ 1 แถวด้านล่างและ 2 คอลัมน์ทางขวาจากเซลล์ A1 ซึ่งก็คือเซลล์ C2
วิธีการตั้ง Breakpoint เพื่อดีบัก VBA
[Spoil] คลิกเพื่อดูข้อความที่ซ่อนไว้
ข้อผิดพลาดเกิดจากบรรทัด 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
' คัดลอกข้อมูลจากแถว 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] คลิกเพื่อดูข้อความที่ซ่อนไว้
แสดงความคิดเห็น
รันแมโครแล้ว Error
พอกดบันทึกข้อมูลแล้วเกิด Error ไม่ทราบว่ามันเกิดจากอะไรคะ เพราะทำขั้นตอนทุกอย่าง
ช่วยแก้ไขทีค่ะ