Visual Basic for Applications:
การจัดการกับข้อผิดพลาด

วิธีการ:

ใน VBA, การจัดการข้อผิดพลาดนั้นมักจะใช้งานผ่านคำสั่ง On Error ซึ่งสั่งการให้ VBA ดำเนินการอย่างไรเมื่อเกิดข้อผิดพลาดขึ้น กลวิธีการจัดการข้อผิดพลาดที่พบบ่อยที่สุดประกอบไปด้วย On Error GoTo ป้ายกำกับ, On Error Resume Next, และ On Error GoTo 0.

ตัวอย่างที่ 1: การใช้งาน On Error GoTo

วิธีนี้ช่วยให้คุณสามารถกำหนดให้โปรแกรมไปยังส่วนของโค้ดที่ระบุอย่างชัดเจนหลังจากพบกับข้อผิดพลาดได้

Sub ErrorHandlerExample()
    On Error GoTo ErrHandler
    Dim intDivision As Integer

    intDivision = 5 / 0 ' จะเกิดข้อผิดพลาดการหารด้วยศูนย์

    Exit Sub
ErrHandler:
    MsgBox "เกิดข้อผิดพลาด: " & Err.Description, vbCritical, "ข้อผิดพลาด!"
    Resume Next
End Sub

ในตัวอย่างนี้, ข้อผิดพลาดใดก็ตามที่เกิดขึ้นจะทำให้กระโดดไปยัง ErrHandler, แสดงข้อความแจ้งเตือนข้อผิดพลาด และดำเนินการกับบรรทัดถัดไปหลังจากเกิดข้อผิดพลาด

ตัวอย่างที่ 2: การใช้งาน On Error Resume Next

กลยุทธ์นี้สั่งให้ VBA ดำเนินการกับบรรทัดถัดไปแม้ว่าจะเกิดข้อผิดพลาด ซึ่งอาจจะมีประโยชน์สำหรับข้อผิดพลาดที่คาดว่าจะไม่เป็นอันตรายหรือเมื่อคุณวางแผนที่จะจัดการกับข้อผิดพลาดในภายหลัง

Sub ResumeNextExample()
    On Error Resume Next
    Dim intDivision As Integer
    intDivision = 5 / 0 ' จะไม่ทำให้โปรแกรมหยุด; ข้อผิดพลาดถูกละเลย
    
    ' ตรวจสอบว่าเกิดข้อผิดพลาดหรือไม่
    If Err.Number <> 0 Then
        MsgBox "เกิดข้อผิดพลาด: " & Err.Description, vbExclamation, "จัดการข้อผิดพลาด"
        ' รีเซ็ตข้อผิดพลาด
        Err.Clear
    End If
End Sub

ในกรณีนี้, โปรแกรมไม่หยุดทำงานเมื่อเกิดข้อผิดพลาด; มันตรวจสอบว่ามีข้อผิดพลาดเกิดขึ้นหรือไม่, จัดการหากมี, และจากนั้นล้างข้อผิดพลาด

ศึกษาเพิ่มเติม

ตามประวัติศาสตร์, การจัดการข้อผิดพลาดในภาษาโปรแกรมมิ่งได้พัฒนาจากคำสั่ง goto ที่ง่ายไปสู่กลไกที่ซับซ้อนกว่าเช่นการใช้งาน Exceptions ในภาษาอย่าง Java และ C#. การจัดการข้อผิดพลาดใน VBA ถึงแม้จะไม่มีความแข็งแกร่งหรือความยืดหยุ่นเท่ากับการจัดการ Exception สมัยใหม่ แต่ก็ยังสามารถใช้งานได้สมควรตามบริบทของการประยุกต์ใช้ภาษาในการอัตโนมัติงานในสภาพแวดล้อม Microsoft Office

ข้อจำกัดหลักของการจัดการข้อผิดพลาดใน VBA คือการต้องใช้วิธีการที่ค่อนข้างซ้ำซ้อนและต้องการการวางรหัสการจัดการข้อผิดพลาดและความเข้าใจอย่างชัดเจนเกี่ยวกับการไหลของการดำเนินการ ภาษาการเขียนโปรแกรมสมัยใหม่มักจะนำเสนอโซลูชันที่ง่ายต่อการใช้งานเพิ่มเติม เช่นบล็อก try-catch ที่จัดการการไหลของโค้ดไปยังโค้ดการจัดการข้อผิดพลาดโดยอัตโนมัติโดยไม่ต้องใช้การตรวจสอบหรือกระโดดในการดำเนินการโค้ด

แม้ว่าจะมีข้อจำกัดเหล่านี้, กลไกการจัดการข้อผิดพลาดของ VBA นั้นเหมาะสมสำหรับงานอัตโนมัติส่วนใหญ่และเมื่อใช้งานอย่างเหมาะสม สามารถช่วยลดความเป็นไปได้ของข้อผิดพลาดที่ไม่ได้รับการจัดการลงได้อย่างมาก นอกจากนี้ การเข้าใจถึงกลไกการจัดการข้อผิดพลาดของ VBA ยังสามารถให้มุมมองเกี่ยวกับแบบแผนการเขียนโปรแกรมสมัยก่อนและการพัฒนากลยุทธ์การจัดการข้อผิดพลาดในการพัฒนาซอฟต์แวร์