VBA บนข้อความแสดงข้อผิดพลาด | 3 วิธีจัดการข้อผิดพลาดยอดนิยม

Excel VBA ในคำชี้แจงข้อผิดพลาด

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

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

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

ข้อผิดพลาดคืออะไร?

ข้อผิดพลาดคืออะไร แต่ไม่สามารถดำเนินการบรรทัดของรหัสได้เนื่องจากฟังก์ชันการทำงานหรือรหัสผิด ดังนั้นพยายามคาดการณ์ข้อผิดพลาดและจัดการกับมัน

ตัวอย่างเช่นหากคุณพยายามลบแผ่นงานที่ไม่มีอยู่แล้วเห็นได้ชัดว่าเราไม่สามารถเรียกใช้โค้ดบรรทัดนั้นได้

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

แต่เรามีคำสั่งใน VBA เพื่อจัดการข้อผิดพลาดประเภทนี้ทั้งหมดเช่นคำสั่ง“ On Error”

ประเภทของข้อความแสดงข้อผิดพลาด

ประเด็นสำคัญของการจัดการข้อผิดพลาดใน VBA คือคำสั่ง“ On Error” ตัวอย่างเช่นข้อผิดพลาด“ ดำเนินการต่อในบรรทัดถัดไป”“ ไปที่หรือข้ามไปยังบรรทัดอื่น” ฯลฯ ...

ในคำสั่งข้อผิดพลาดมีสามประเภทของข้อความดังกล่าว

  1. GoTo 0 หมายถึงเมื่อใดก็ตามที่เกิดข้อผิดพลาดขณะทำงาน excel หรือ VBA ควรแสดงกล่องข้อความแสดงข้อผิดพลาดโดยระบุประเภทของข้อผิดพลาดที่พบ ทันทีที่ VBA รันโค้ดมันจะปิดใช้งานตัวจัดการข้อผิดพลาดทั้งหมดในบล็อกนั้นบนโค้ด
  2. Resume Nextหมายถึงเมื่อใดก็ตามที่เกิดข้อผิดพลาดคำสั่งนี้จะสั่งให้ excel ละเว้นข้อผิดพลาดนั้นและไปยัง (ดำเนินการต่อ) บรรทัดถัดไปของโค้ดโดยไม่แสดงข้อความแสดงข้อผิดพลาดใด ๆ ไม่ได้หมายความว่าจะแก้ไขข้อผิดพลาด แต่เพียงแค่เพิกเฉยต่อข้อผิดพลาด
  3. GoTo [label]หมายถึงเมื่อใดก็ตามที่ VBA พบข้อผิดพลาดให้ไปที่ป้ายกำกับที่กำหนด สิ่งนี้ทำให้โค้ดข้ามไปยังบรรทัดเฉพาะที่ coder ให้มา

3 วิธียอดนิยมในการจัดการข้อผิดพลาดใน VBA

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

# 1 - ในข้อผิดพลาดดำเนินต่อไป

สมมติว่าคุณหารค่าของ 20 ด้วย 0 และคุณได้ประกาศตัวแปรเพื่อกำหนดผลลัพธ์ของการหารให้กับตัวแปรนั้น

รหัส:

 Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub 

หากคุณเรียกใช้รหัสนี้จะทำให้เกิดข้อผิดพลาดด้านล่าง

คุณจึงไม่สามารถหารจำนวนใด ๆ ด้วยค่าศูนย์ได้ หมายเลขข้อผิดพลาดรันไทม์คือ 11 เช่นหารด้วยศูนย์

ตอนนี้ฉันจะเพิ่มอีกหนึ่งบรรทัดในรหัส

รหัส:

 Sub OnError_Example1 () Dim i As Integer, j As Integer i = 20/0 j = 20/2 End Sub 

ตอนนี้ฉันจะเพิ่มคำสั่ง On error resume ถัดไปที่ด้านบน

รหัส:

 Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub 

ตอนนี้ถ้าฉันรันโค้ดนี้มันจะไม่ให้ข้อความแสดงข้อผิดพลาดใด ๆ แต่มันจะรันโค้ดบรรทัดถัดไปคือ j = 20/2

# 2 - ข้อผิดพลาด GoTo Label

ฉันได้ประกาศตัวแปรสามตัว

รหัส:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer 

สำหรับตัวแปรทั้งสามนี้ฉันจะกำหนดการคำนวณหาร

รหัส:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5

ผลลัพธ์ของการคำนวณทั้งสามนี้จะแสดงในกล่องข้อความ

รหัส:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "ค่าของ i คือ" & i & vbNewLine & "ค่าของ j คือ "& j & _ vbNewLine &" ค่า k คือ "& k & vbNewLine End Sub 

ตอนนี้ฉันจะพยายามรันโค้ดนี้เนื่องจากการคำนวณ“ I” ไม่เหมาะสมเราจะได้รับข้อผิดพลาดรันไทม์ 11

ตอนนี้ฉันจะเพิ่มคำสั่ง“ On Error Resume Next”

รหัส:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error Resume Next i = 20/0 j = 20/2 k = 10/5 MsgBox "ค่าของ i คือ" & i & vbNewLine & "The ค่าของ j คือ "& j & _ vbNewLine &" ค่าของ k คือ "& k & vbNewLine End Sub 

หากฉันดำเนินการสิ่งนี้จะข้ามการคำนวณ "I" และดำเนินการคำนวณที่เหลืออีกสองรายการและผลลัพธ์จะเป็นดังนี้

ตอนนี้แทนที่จะเป็น“ On Error Resume Next” ฉันจะเพิ่ม“ On Error GoTo KCalculation”

รหัส:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer On Error GoTo KCalculation: i = 20/0 j = 20/2 KCalculation: k = 10/5 MsgBox "ค่าของ i คือ" & i & vbNewLine & "ค่าของ j คือ" & j & _ vbNewLine & "ค่าของ k คือ" & k & vbNewLine End Sub 

Note: Here “KCalculation” is the label name I had given, you can give your own label name without any space.

Now if I execute this line of code it will not jump to the next line rather it will jump to the label name I have entered i.e. “KCalcualtion”. Here it will ignore the error given by “I” and also it will not execute “j” calculation but straight away it jumps to “KCalcualtion”.

#3 – Print Error Number in VBA

At the end of the code, we can also print the error number in a separate message box. The following line of code will do this job.

Code:

Err.Number

Now I will run this code first message box will show the calculation results.

Click on OK, it will show one more message box to show the error number.

We go 11 as the result i.e. Division by Zero.

We can also get the error description instead of the number. We just need to change the code, below is the code.

Code:

Err.Description

It will show a description like this.

Things to Remember

  • After entering “On Error Resume Next” at the end of code don’t forget to add the statement “On Error GoTo 0”
  • The label name should be the same in both places.
  • Label names need not be defined well in advance.
  • In the end, always see what was the error occurred through the separate message box.