สารบัญ
ใน Microsoft Excel VBA การจัดการข้อผิดพลาดเป็นหนึ่งในงานที่สำคัญ หากคุณเป็นผู้เขียนโค้ด คุณจะทราบดีถึงความสำคัญของการจัดการข้อผิดพลาดเพื่อสร้างแอปพลิเคชันที่สมบูรณ์แบบ ข้อผิดพลาดใด ๆ ในคำสั่งสามารถขัดขวางรหัส VBA ของคุณได้หลายวิธี ดังนั้น คุณต้องระมัดระวังในการจัดการกับข้อผิดพลาดเหล่านั้นในขณะที่รันโค้ด VBA มีข้อผิดพลาดรันไทม์จำนวนมากที่คุณอาจพบขณะใช้โค้ด VBA ใน Excel เพื่อแก้ปัญหาหนึ่งในนั้น เราใช้คำสั่ง เมื่อเกิดข้อผิดพลาดดำเนินการต่อถัดไป
ในบทช่วยสอนนี้ คุณจะได้เรียนรู้การใช้คำสั่ง เมื่อเกิดข้อผิดพลาดดำเนินการต่อถัดไป ใน Excel ว.บ. บทช่วยสอนนี้จะตรงประเด็นด้วยตัวอย่างที่เหมาะสมและภาพประกอบที่เหมาะสม ดังนั้น อยู่กับเรา
ดาวน์โหลด Practice Workbook
VBA On Error Resume Next.xlsm
Error Handling in Excel VBA
ในขณะที่ทำงานกับ Microsoft Excel VBA คุณจะพบข้อผิดพลาดมากมายในขั้นตอนย่อยของคุณ เมื่อ VBA ไม่สามารถดำเนินการตามคำสั่งได้ ก็จะส่งข้อผิดพลาดรันไทม์
Excel จะจัดการกับข้อผิดพลาดเหล่านี้โดยอัตโนมัติ ดังนั้นเมื่อเกิดข้อผิดพลาดรันไทม์ จะแสดงข้อความแสดงข้อผิดพลาดเริ่มต้นดังต่อไปนี้:
ตอนนี้ คุณสามารถจัดการกับสิ่งเหล่านี้ได้หลากหลายด้วยคำสั่ง VBA ฉันจะพูดถึงพวกเขาในส่วนต่อไป
อ่านเพิ่มเติม: วิธีแก้ไข #REF! ข้อผิดพลาดใน Excel (6 วิธีแก้ไข)
ในคำสั่งข้อผิดพลาดใน VBA
ในการจัดการข้อผิดพลาดรันไทม์ เราสั่ง Excel ด้วยคำสั่งข้อผิดพลาด มันตัดสินใจของ NAME Error ใน Excel (10 ตัวอย่าง)
💬 สิ่งที่ควรจำ
✎ เมื่อเกิดข้อผิดพลาด Resume Next จะไม่แก้ไขข้อผิดพลาด โดยทั่วไปจะละเว้นข้อผิดพลาดและดำเนินการคำสั่งถัดไป
✎ Excel จะดักจับและจัดเก็บข้อผิดพลาดขณะทำงานไว้ในวัตถุ Err เมื่อเราใช้คำสั่ง On Error Resume Next จะล้างคุณสมบัติของวัตถุ Err
✎ คุณสามารถปิด On Error Resume Next ในโค้ด VBA ของคุณใน Excel โดยเพิ่มคำสั่ง เมื่อเกิดข้อผิดพลาด GoTo 0
สรุป
โดยสรุป ฉันหวังว่าบทช่วยสอนนี้จะให้ประโยชน์แก่คุณ ความรู้ในการใช้ เมื่อเกิดข้อผิดพลาดดำเนินการต่อ ใน Excel VBA ฉันขอแนะนำให้คุณเรียนรู้และนำคำแนะนำเหล่านี้ไปใช้กับชุดข้อมูลของคุณ ดาวน์โหลดแบบฝึกหัดและลองทำด้วยตนเอง นอกจากนี้ อย่าลังเลที่จะแสดงความคิดเห็นในส่วนความคิดเห็น ความคิดเห็นอันมีค่าของคุณทำให้เรามีแรงจูงใจในการสร้างบทช่วยสอนเช่นนี้
อย่าลืมตรวจสอบเว็บไซต์ของเรา Exceldemy.com เพื่อดูปัญหาและแนวทางแก้ไขต่างๆ ที่เกี่ยวข้องกับ Excel
เรียนรู้วิธีการใหม่และเติบโตต่อไป!
การดำเนินการประเภทใดที่เราต้องการดำเนินการต่อไปทันที โดยพื้นฐานแล้ว เราจะปิดใช้งานข้อผิดพลาดเหล่านี้ด้วยการจัดการข้อผิดพลาดประเภทนี้เราใช้คำสั่ง On Error (ไวยากรณ์) สามประเภทใน Excel VBA
- เมื่อเกิดข้อผิดพลาด GoTo บรรทัด
- เมื่อเกิดข้อผิดพลาด ให้ดำเนินการต่อ
- เมื่อเกิดข้อผิดพลาด GoTo 0
เมื่อคุณพบข้อผิดพลาด ให้ใช้คำสั่ง On Error เนื่องจากหากคุณไม่ใช้การประกาศ เมื่อเกิดข้อผิดพลาด ข้อผิดพลาดรันไทม์เหล่านั้นจะส่งผลร้ายแรง จะแสดงข้อความแจ้งข้อผิดพลาดและหยุดการดำเนินการ
เมื่อเราใช้คำสั่ง เมื่อเกิดข้อผิดพลาด เราจะเปิดตัวจัดการข้อผิดพลาด "เปิดใช้งาน" ตัวจัดการข้อผิดพลาด "ใช้งานอยู่" คือตัวจัดการที่เปิดใช้งานซึ่งเริ่มการดำเนินการจัดการข้อผิดพลาด หากข้อผิดพลาดเกิดขึ้นในขณะที่มีตัวจัดการข้อผิดพลาด ตัวจัดการข้อผิดพลาดของวิธีการปัจจุบันไม่สามารถทนต่อข้อผิดพลาดได้ หลังจากนั้น ตัวควบคุมจะกลับไปที่ขั้นตอนการเรียก
หากกระบวนการเรียกมีตัวจัดการข้อผิดพลาดที่เปิดใช้งาน กระบวนการนั้นจะถูกทริกเกอร์เพื่อจัดการข้อผิดพลาด หากตัวจัดการข้อผิดพลาดของระบบการโทรทำงานสอดคล้องกัน การควบคุมจะส่งกลับผ่านขั้นตอนการเรียกก่อนหน้านี้จนกว่าจะพบตัวจัดการข้อผิดพลาดที่เปิดใช้งานแต่ไม่ได้ใช้งาน หากไม่พบตัวจัดการข้อผิดพลาดที่เปิดใช้งานไม่ได้ใช้งาน แสดงว่าข้อผิดพลาดนั้นร้ายแรงที่จุดที่เกิดขึ้น
ทุกครั้งที่ตัวจัดการข้อผิดพลาดให้สิทธิ์กลับไปยังโพรซีเดอร์การเรียก โพรซีเดอร์นั้นจะพัฒนาโพรซีเดอร์ที่มีอยู่ การดำเนินการเริ่มต้นใหม่ในขั้นตอนปัจจุบันในขณะที่เลือกโดยคำสั่ง ดำเนินการต่อ เมื่อตัวจัดการข้อผิดพลาดจัดการข้อผิดพลาดในขั้นตอนใด ๆ
'เมื่อดำเนินการต่อข้อผิดพลาดถัดไป' ใน VBA
ตอนนี้ คำสั่ง On Error Resume Next บอกให้ VBA เพิกเฉยต่อบรรทัดของโค้ดที่มีข้อผิดพลาด และดำเนินการต่อไปยังบรรทัดของโค้ดต่อไปนี้ทันที หลังจากนั้น โค้ด Excel VBA จะข้ามบรรทัดหรือบรรทัดที่มีข้อผิดพลาดในโค้ดเหล่านั้น และไปยังลำดับของโค้ดต่อไปนี้
คำสั่ง เมื่อเกิดข้อผิดพลาด Resume Next บังคับให้ดำเนินการ ดำเนินการต่อด้วยคำสั่งทันทีตามบรรทัดของรหัสที่ทำให้เกิดข้อผิดพลาดรันไทม์ คำสั่งนี้อนุญาตให้การดำเนินการข้ามไปแม้ว่าจะมีข้อผิดพลาดรันไทม์ก็ตาม หากคุณคิดว่าโค้ดบรรทัดใดบรรทัดหนึ่งสามารถสร้างข้อผิดพลาดได้ ให้วางรูทีนการจัดการข้อผิดพลาดไว้ตรงนั้น แทนที่จะวางไว้ในตำแหน่งอื่นภายในโพรซีเดอร์ คำสั่ง On Error Resume Next จะกลายเป็นไม่ได้ใช้งานเมื่อโค้ดของคุณเรียกโพรซีเดอร์อื่น ดังนั้น เมื่อคุณต้องการการจัดการข้อผิดพลาดที่ตรงกันในรูทีนนั้น คุณต้องเรียกใช้คำสั่ง เมื่อเกิดข้อผิดพลาดดำเนินการต่อ ในแต่ละรูปแบบที่มีชื่อ
เป็นเรื่องที่สมเหตุสมผลเมื่อบรรทัดของโค้ดที่คุณ สามารถข้ามไม่จำเป็นสำหรับการทำงานของแมโครเฟื่องฟู แต่โปรดจำไว้ว่า อาจส่งผลเสียได้หากคุณใช้ไม่ถูกต้อง เนื่องจากอาจให้ผลลัพธ์ที่ไม่ได้ตั้งใจ
ข้อควรจำ:
เปิด ข้อผิดพลาดดำเนินการต่อคำสั่งถัดไปไม่ได้แก้ไขข้อผิดพลาดรันไทม์ โดยทั่วไปจะละเว้นข้อผิดพลาดที่การดำเนินการ VB ของคุณจะกลับมาทำงานต่อจากคำสั่งที่สร้างข้อผิดพลาดรันไทม์
ลองดูรหัสต่อไปนี้:
8323
เราพยายามแบ่ง 5 ด้วย 0 และ 1 มารันโค้ดกัน มันจะแสดงผลลัพธ์ต่อไปนี้:
มันสร้างข้อผิดพลาดรันไทม์ เราไม่สามารถหารตัวเลขด้วย 0 ได้ เมื่อคุณดีบักโค้ด คุณจะเห็นสิ่งต่อไปนี้:
เมื่อโปรแกรม VB พบข้อผิดพลาด โปรแกรมจะหยุดขั้นตอนทันที ไม่ทำงานตามบรรทัดต่อไปนี้
ตอนนี้ ให้ใช้คำสั่ง เมื่อเกิดข้อผิดพลาดดำเนินการต่อ ก่อนคำสั่งแสดงข้อผิดพลาด:
3675
หลังจากเรียกใช้รหัส คุณจะ ดูสิ่งต่อไปนี้:
อย่างที่คุณเห็น VBA จะละเว้นบรรทัดที่สร้างข้อผิดพลาดและดำเนินการต่อไปยังบรรทัดโค้ดต่อไปนี้ทันที ด้วยวิธีนี้ คุณสามารถใช้คำสั่ง On Error Resume Next เพื่อจัดการกับข้อผิดพลาดใน Excel VBA
ตัวอย่างของ 'On Error Resume Next' ใน VBA
ใน ส่วนต่อไปนี้ ฉันจะให้ตัวอย่างสองตัวอย่างของคำสั่ง เมื่อเกิดข้อผิดพลาดดำเนินการต่อถัดไป ที่คุณสามารถนำไปใช้ในเวิร์กชีต Excel ของคุณโดยใช้ VBA ฉันขอแนะนำให้คุณเรียนรู้และนำสิ่งเหล่านี้ไปใช้ในสมุดงานของคุณ มันจะเพิ่มพูนความรู้ Excel ของคุณอย่างแน่นอน
1. คำสั่ง 'On Error Resume Next' เพื่อซ่อนเวิร์กชีต
ในตอนนี้ ในตัวอย่างนี้ ผมจะแสดงโค้ด VBA ที่จะซ่อนแผ่นงานทั้งหมดของสมุดงานที่ใช้งานของคุณ
ดูภาพหน้าจอต่อไปนี้:
ที่นี่ เรามีแผ่นงานสี่แผ่น เราจะซ่อนทั้งหมดโดยใช้โค้ด VBA ต่อไปนี้:
3424
เมื่อคุณเรียกใช้โค้ดต่อไปนี้ คุณจะเห็นข้อผิดพลาดรันไทม์ต่อไปนี้:
Excel แสดงข้อผิดพลาดนี้เนื่องจากคุณไม่สามารถซ่อนแผ่นงานทั้งหมดในสมุดงาน ดังนั้นคุณต้องละเว้นข้อผิดพลาด ในการทำเช่นนี้ คุณต้องใช้คำสั่ง On Error Resume Next ในบรรทัดโค้ดของคุณ
9410
หลังจากดำเนินการโค้ด VBA เสร็จแล้ว คุณจะเห็นผลลัพธ์ต่อไปนี้:
ท้ายที่สุด คุณจะไม่พบข้อผิดพลาดใดๆ หลังจากดำเนินการ ดังนั้น คำสั่ง On Error Resume Next ของเราจึงทำงานได้ดีมากในโค้ด VBA
อ่านเพิ่มเติม: ข้อผิดพลาดใน Excel และความหมาย (15 ข้อผิดพลาดที่แตกต่างกัน)
2. ฟังก์ชัน VLOOKUP ที่มี 'On Error Resume Next' ใน VBA
ในตัวอย่างนี้ ฉันจะแสดงตัวอย่าง ฟังก์ชัน VLOOKUP ใน VBA ตอนนี้ โค้ด VBA นี้ยังรวมคำสั่ง เมื่อเกิดข้อผิดพลาดกลับมาทำงานต่อ ด้วย
ดูที่ภาพหน้าจอต่อไปนี้:
ที่นี่ คุณสามารถดูชื่อและอายุของบุคคลบางคนได้ ในตารางที่อยู่ติดกัน เราจะใช้ VLOOKUP เพื่อค้นหาชื่อและอายุของบุคคลนั้น
พิมพ์รหัสต่อไปนี้เพื่อทำสิ่งนี้:
4136
ตอนนี้ เรียกใช้มาโคร . คุณจะเห็นข้อผิดพลาดต่อไปนี้:
ตอนนี้ นี่คือรันไทม์ข้อผิดพลาด. ทำไมมันถึงเกิดขึ้น? ลองดูที่ชุดข้อมูลอีกครั้ง:
อย่างที่คุณเห็น ไม่มีข้อมูลสำหรับ “Aaron” และ “Emma” นั่นเป็นสาเหตุที่ดำเนินการ VLOOKUP สำหรับรายการแรกเท่านั้น หลังจากนั้นจะหยุดการดำเนินการ ตอนนี้ ถ้าคุณต้องการเพิกเฉยต่อข้อผิดพลาดและดำเนินการค้นหาอายุที่เหลือ ให้ใช้คำสั่ง เมื่อดำเนินการต่อข้อผิดพลาดถัดไป
9704
หลังจากเรียกใช้รหัส VBA คุณจะเห็น เอาต์พุตต่อไปนี้:
อย่างที่คุณเห็น ด้วยการใช้คำสั่ง เมื่อเกิดข้อผิดพลาดดำเนินการต่อถัดไป เราจะละเว้นข้อผิดพลาดและพบส่วนที่เหลือของบุคคล อายุ รหัส VBA ของเราไม่พบข้อมูลใดๆ ของ Aaron และ Emma นั่นเป็นสาเหตุว่าทำไมจึงละเว้นค่าเหล่านั้นและส่งกลับค่าที่เหลือในเวิร์กชีต Excel
อ่านเพิ่มเติม: [แก้ไขแล้ว] Excel พบปัญหากับการอ้างอิงสูตรอย่างน้อยหนึ่งรายการในเวิร์กชีตนี้
ปิด 'เปิดข้อผิดพลาดดำเนินการต่อ' ด้วย Excel VBA
ตอนนี้ คุณอาจอยู่ในสถานการณ์ที่คุณต้องการละเว้นข้อผิดพลาดสำหรับส่วนใดส่วนหนึ่งของโค้ด VBA โปรดจำไว้ว่า ถ้าคุณใช้คำสั่ง On Error Resume Next ในโค้ด VBA จะข้ามข้อผิดพลาดทั้งหมดหลังจากนั้น ในตอนนี้ ถ้าคุณต้องการปิดและเปิดใช้งานการจัดการข้อผิดพลาดสำหรับส่วนอื่น ให้ใช้ เมื่อเกิดข้อผิดพลาด GoTo 0 มันจะเปิดใช้งานการจัดการข้อผิดพลาดอีกครั้ง
การใช้งานทั่วไป:
Sub error_handling()
หากต้องการละเว้นข้อผิดพลาด
เมื่อเกิดข้อผิดพลาด ดำเนินการต่อ ถัดไป
// บรรทัดของรหัส
ถึงเปิดการจัดการข้อผิดพลาด
เมื่อเกิดข้อผิดพลาด GoTo 0
//บรรทัดของรหัส
สิ้นสุดการย่อย
ลองดูที่ โค้ด VBA ต่อไปนี้:
7032
เราใช้โค้ดก่อนหน้านี้สำหรับฟังก์ชัน VLOOKUP ที่นี่ได้เพิ่มรหัสเพิ่มเติมเพื่อแสดงให้คุณเห็น รหัสของเราจะไม่สนใจข้อผิดพลาดขณะดำเนินการ VLOOKUP แต่จะเปิดใช้งานการจัดการข้อผิดพลาดหลังจากคำสั่ง On Error GoTo 0
อ่านเพิ่มเติม: Excel VBA: ปิด “เมื่อเกิดข้อผิดพลาดกลับมาทำงานต่อ”
VBA 'เมื่อเกิดข้อผิดพลาด GoTo'
ก่อนหน้านี้ฉันได้กล่าวถึง จัดการข้อผิดพลาดโดยใช้วิธี On Error บทความทั้งหมดของเราเกี่ยวกับ เมื่อเกิดข้อผิดพลาด ดำเนินการต่อถัดไป ตอนนี้ ยังมีการจัดการข้อผิดพลาดอีกสองประเภทที่ฉันจะกล่าวถึงในส่วนต่อไปนี้
1. VBA On Error GoTo 0
The On Error Goto 0 คำสั่งคือการตั้งค่าในตัวของ Excel หากรหัสของคุณไม่มีตัวจัดการข้อผิดพลาดในนั้น โดยพื้นฐานแล้วหมายความว่าเมื่อ VBA พบข้อผิดพลาดที่มี On Error GoTo 0 มันจะหยุดการรันโค้ดและแสดงกล่องข้อความแสดงข้อผิดพลาดแบบเดิม
On Error GoTo 0 คำสั่งโดยทั่วไปจะปิดการจัดการข้อผิดพลาดในขั้นตอนปัจจุบัน มันไม่ได้กำหนดบรรทัด 0 เป็นจุดเริ่มต้นของรหัสการจัดการข้อผิดพลาด แม้ว่าวิธีการจะรวมบรรทัดหมายเลข 0 ก็ตาม
ลองดูรหัสต่อไปนี้:
4782
เรามี แสดงรหัสนี้ให้คุณแล้ว รหัสนี้โดยทั่วไปจะซ่อนแผ่นงานทั้งหมดในสมุดงานปัจจุบันของคุณ ตอนนี้ฉันมีโค้ดเพิ่มเติมด้วย On Error GoTo 0 เพื่อแสดงข้อผิดพลาด หากคุณเรียกใช้รหัส คุณจะเห็นสิ่งต่อไปนี้:
มันแสดงข้อผิดพลาดนี้เนื่องจากเราไม่สามารถมีแผ่นงานที่มีชื่อเดียวกันในสมุดงานที่ใช้งานอยู่
2. VBA เมื่อพบข้อผิดพลาดในบรรทัด GoTo
ตอนนี้ คุณยังสามารถสั่งให้ Excel เรียกใช้ส่วนอื่นของโค้ดได้หากพบข้อผิดพลาดใดๆ โดยใช้ เมื่อเกิดข้อผิดพลาดในบรรทัด GoTo โดยจะบอกให้ Excel ดำเนินการบางอย่างหลังจากพบข้อผิดพลาด
อาร์กิวเมนต์บรรทัดคือแท็กบรรทัดหรือหมายเลขบรรทัดใดๆ หากรหัสของเราทำให้เกิดข้อผิดพลาดรันไทม์ มันจะย้ายไปที่บรรทัด ทำให้ตัวจัดการข้อผิดพลาดทำงานอยู่ในการดำเนินการ โปรดจำไว้ว่า บรรทัดที่คุณกำหนดต้องอยู่ในขั้นตอนที่ถูกต้องตามคำสั่ง On Error; มิฉะนั้นจะทำให้เกิดข้อผิดพลาดในการคอมไพล์
ลองดูโค้ดต่อไปนี้:
4743
คุณเห็นโค้ดในตัวอย่างก่อนหน้านี้ เมื่อเราใช้ On Error GoTo 0 มันทำให้เกิดข้อผิดพลาด แต่ที่นี่เราได้แทนที่ด้วยคำสั่ง On Error GoTo line
ตอนนี้ รันโค้ดและคุณจะเห็นสิ่งต่อไปนี้:
อย่างที่คุณเห็น มันไม่แสดงกล่องโต้ตอบข้อผิดพลาดมาตรฐานให้เราเห็น แต่จะแสดงกล่องข้อความแบบกำหนดเองที่เราสร้างขึ้นในส่วน error_handler เมื่อ Excel พบข้อผิดพลาด ระบบจะข้ามไปที่ส่วน error_handler และแสดงกล่องข้อความให้เราเห็น
เรายังใช้ Exit Sub ในกระบวนการหากไม่มีชีตชื่อ “ VLOOKUP “ โค้ด VBA ของเราจะเปลี่ยนชื่อชีตที่ใช้งานอยู่ จากนั้น เราต้องดำเนินการให้เสร็จสิ้นที่นี่ เนื่องจากเราไม่จำเป็นต้องดำเนินการต่อไปยังตัวจัดการข้อผิดพลาดและแสดงกล่องข้อความ
VBA 'เมื่อเกิดข้อผิดพลาด' ไม่ทำงานใน Excel
บางครั้ง ไม่ว่าคุณจะพยายามมากแค่ไหน วิธี On Error จะไม่ทำงาน ก่อนหน้านี้ เราได้ใช้เมธอด เมื่อเกิดข้อผิดพลาด เพื่อจัดการกับข้อผิดพลาด แต่บางครั้งจะแสดงข้อผิดพลาดแม้ว่าคุณจะใช้ เมื่อเกิดข้อผิดพลาดดำเนินการต่อ หรือ เมื่อเกิดข้อผิดพลาด GoTo 0 อาจมีสาเหตุหลายประการในรหัสของคุณที่คุณต้องแก้ไข ฉันจะไม่แสดงให้คุณเห็น
เหตุผลพื้นฐานสำหรับ VBA ' เมื่อเกิดข้อผิดพลาด' ไม่ทำงานใน Excel คือการเปิดใช้งานตัวเลือก "หยุดข้อผิดพลาดทั้งหมด" ใน Excel
ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา:
📌 ขั้นตอน
- ขั้นแรก กด Alt+F11 บนแป้นพิมพ์เพื่อ เปิดตัวแก้ไข VBA
- ตอนนี้ คลิกที่ เครื่องมือ > ตัวเลือก
- หลังจากนั้น คลิกแท็บ ทั่วไป ในกล่องโต้ตอบ ตัวเลือก กล่อง
- ที่นี่ คุณจะเห็นว่า “ Break on All Errors ” ถูกเลือกไว้แล้ว โดยทั่วไปจะป้องกันคุณจากการจัดการข้อผิดพลาด
- หากต้องการเปลี่ยนแปลง ให้เลือกตัวเลือก “ Break on Unhandled Errors ” และคลิกที่ ตกลง
ฉันหวังว่ามันจะแก้ไขปัญหา VBA “On Error” ไม่ทำงานใน Excel ได้
อ่านเพิ่มเติม: เหตุผล และการแก้ไข