VBA บนข้อผิดพลาดไปที่ 0 | วิธีใช้เมื่อเกิดข้อผิดพลาด GoTo 0 ใน Excel VBA

Excel VBA บนข้อผิดพลาดไปที่ 0

VBA On Error GoTo 0เป็นคำสั่งตัวจัดการข้อผิดพลาดที่ใช้เพื่อปิดใช้งานตัวจัดการข้อผิดพลาดที่เปิดใช้งานในโพรซีเดอร์ เรียกว่า "ตัวจัดการข้อผิดพลาด Disabler"

การจัดการข้อผิดพลาดในภาษาโปรแกรมใด ๆ ถือเป็นมาสเตอร์คลาสที่ผู้เขียนโค้ดทั้งหมดต้องเข้าใจ ภาษาโปรแกรม VBA ด้วยและเรายังมีเทคนิคการจัดการข้อผิดพลาดในภาษาโปรแกรมนี้ด้วย“ On Error Resume Next” เปิดใช้งานตัวจัดการข้อผิดพลาดและ“ On Error GoTo 0” จะปิดใช้งานตัวจัดการข้อผิดพลาดที่เปิดใช้งาน

ทั้ง“ On Error Resume Next” และ“ On Error GoTo 0” เป็นคู่ที่ต้องใช้ควบคู่กันเพื่อประสิทธิภาพของรหัส ในการจัดการข้อผิดพลาดเราต้องเริ่มต้นด้วยคำสั่ง“ On Error Resume Next” และเพื่อสิ้นสุดตัวจัดการข้อผิดพลาดนี้เราจำเป็นต้องใช้คำสั่ง“ On Error GoTo 0”

รหัสบรรทัดใด ๆ ที่เขียนระหว่างข้อความเหล่านี้จะละเว้นข้อผิดพลาดใด ๆ ที่เกิดขึ้นในการดำเนินการ

วิธีใช้ On Error GoTo 0 Statement?

คุณสามารถดาวน์โหลด VBA บน Error Goto 0 Excel Template ได้ที่นี่ - VBA On Error Goto 0 Excel Template

สำหรับตัวอย่างดูโค้ดด้านล่าง

รหัส:

 Sub On_ErrorExample1 () Worksheets ("Sheet1") เลือก Range ("A1") Value = 100 Worksheets ("Sheet2") เลือก Range ("A1") Value = 100 End Sub 

สิ่งที่โค้ดด้านบนทำคือขั้นแรกให้เลือกเวิร์กชีตชื่อ“ Sheet1” และในเซลล์ A1 จะแทรกค่า 100

รหัส:

แผ่นงาน ("Sheet1") เลือกช่วง ("A1") ค่า = 100

จากนั้นจะเลือกแผ่นงานชื่อ“ Sheet2” และแทรกค่าเดียวกัน

รหัส:

แผ่นงาน ("Sheet2") เลือกช่วง ("A1") ค่า = 100

ตอนนี้ฉันมีแผ่นงานด้านล่างในสมุดงานของฉัน

ไม่มีแผ่นงานที่เรียกว่า "Sheet1" และ "Sheet2" เมื่อเราเรียกใช้โค้ดจะพบข้อผิดพลาดดังต่อไปนี้

เนื่องจากไม่มีแผ่นงานที่ชื่อว่า "Sheet1" จึงพบข้อผิดพลาด "ตัวสมัครอยู่นอกช่วง" เพื่อจัดการกับข้อผิดพลาดนี้ฉันจะเพิ่มคำสั่งตัวจัดการข้อผิดพลาด“ On Error Resume Next” ที่ด้านบนของมาโคร

รหัส:

 Sub On_ErrorExample1 () On Error Resume Next Worksheets ("Sheet1") เลือก Range ("A1") Value = 100 Worksheets ("Sheet2") เลือก Range ("A1") Value = 100 End Sub 

ตอนนี้เรียกใช้รหัสและดูว่าเกิดอะไรขึ้น

จะไม่ให้ข้อความแสดงข้อผิดพลาดใด ๆ เนื่องจากคำสั่งตัวจัดการข้อผิดพลาดOn Error Resume Nextถูกเปิดใช้งาน

ลองนึกภาพสถานการณ์ที่เราต้องเพิกเฉยต่อข้อผิดพลาดในกรณีที่แผ่นงาน“ Sheet1” ไม่พร้อมใช้งาน แต่เราจำเป็นต้องแจ้งให้ทราบหากไม่มีแผ่นงานที่เรียกว่า“ Sheet2”

เนื่องจากเราได้เพิ่มOn Error Resume Nextที่ด้านบนจึงเริ่มจัดการกับข้อผิดพลาด แต่ในขณะเดียวกันเราต้องระบุจำนวนบรรทัดที่เราต้องละเว้นข้อผิดพลาดนี้

ในตัวอย่างนี้เราต้องละเว้นข้อผิดพลาดสำหรับแผ่นงานแรก แต่สำหรับแผ่นงานที่สองเป็นต้นไปเราจำเป็นต้องให้ข้อผิดพลาดเกิดขึ้นหากไม่มีแผ่นงาน“ Sheet2” ดังนั้นหลังจากรหัสแผ่นงานแรกเพิ่มข้อผิดพลาดปิดการใช้งานบรรทัดข้อผิดพลาด GoTo 0

รหัส:

 Sub On_ErrorExample1 () On Error Resume Next Worksheets ("Sheet1"). Select Range ("A1"). Value = 100 On Error GoTo 0 Worksheets ("Sheet2"). Select Range ("A1"). Value = 100 End Sub 

ตอนนี้รันโค้ดทีละบรรทัดเพื่อดูผลกระทบโดยกดปุ่ม F8

ตอนนี้ถ้าคุณกดปุ่ม F8 หนึ่งครั้งการเรียกใช้โค้ดจะข้ามไปที่บรรทัดถัดไปและงานบรรทัดที่ใช้งานจะถูกดำเนินการ ตอนนี้บรรทัดที่ใช้งานอยู่ (เส้นสีเหลือง) คือตัวจัดการข้อผิดพลาด“ On Error Resume Next” และตัวจัดการข้อผิดพลาดจะเปิดใช้งาน

ตอนนี้ข้อผิดพลาดใด ๆ เกิดขึ้นจะถูกละเว้นจนกว่าจะดำเนินการตัวจัดการข้อผิดพลาดปิดใช้งานรหัส " On Error GoTo 0 " คำสั่ง

ในความพยายามครั้งก่อนเราพบข้อผิดพลาด แต่กดปุ่ม F8 อีกครั้งและดูมายากล

โดยไม่ให้เกิดข้อผิดพลาดใด ๆ มันได้กลับมาเรียกใช้โค้ดต่อแม้ว่าจะไม่มีแผ่นงาน“ Sheet2” ให้เลือกก็ตาม ตอนนี้กด F8 อีกครั้ง

เนื่องจากไม่มี Sheet1 จึงไม่สามารถแทรกค่าในเซลล์ A1 เป็น 500 ได้ แต่จะแทรกค่าของ 500 ไปยังเซลล์ A1 ตามที่เวิร์กชีตใดทำงานอยู่ แผ่นงานที่ใช้งานของฉันเมื่อฉันเรียกใช้รหัสคือ "Sheet3" ดังนั้นค่า 100 จะถูกแทรกลงในเซลล์ A1

ตอนนี้บรรทัดของโค้ดที่ใช้งานอยู่คือ“ On Error GoTo 0 ” โดยการกดปุ่ม F8 งานบรรทัดนี้จะถูกดำเนินการ

Since “On Error GoTo 0” is executed it has stopped the process of error handling and again starts to show errors if any occurs. Press the F8 key and see the error.

In the previous case without On Error GoTo 0, it has ignored this error as well, but since we have added error handler disabler it has started to show the error again.

Things to Remember here

  • Both On Error Resume Next and On Error GoTo 0 needs to be used as “Error Handler Enabler” and “Error Handler Disabler”.
  • Any line of codes between these two statements encounters an error it will be ignored.
  • If there is On Error GoTo 0 statement then after the exit of the subprocedure error handler will be disabled.