הצהרות שגיאה על VBA 3 הדרכים המובילות לטיפול בשגיאות

הצהרת שגיאות ב- Excel VBA

הצהרת VBA On Error היא סוג של מנגנון טיפול בשגיאות המשמש להנחיית הקוד לעשות מה אם הוא נתקל בשגיאה כלשהי, בדרך כלל כאשר קוד נתקל בשגיאה הביצוע נעצר אך עם הצהרה זו בקוד ביצוע הביצוע קוד ממשיך כפי שהוא קבע הוראות לעשות כאשר הוא נתקל בשגיאה.

צפייה בשגיאה בקוד הופכת אותך למקצוען בקידוד VBA. אינך יכול להפוך את הקוד ליעיל ב 100%, גם אם אתה בטוח בקוד שלך בצורה זו או אחרת, הדבר עשוי להעלות שגיאה.

זו כמעט משימה בלתי אפשרית לזהות ולטפל בכל סוג של שגיאה, אך יש לנו דרכים שונות לטפל בשגיאה ב- VBA. בזמן כתיבת הקוד ייתכן שלא תצפה שסוג קוד השגיאה יכול לזרוק, אך אם תופיע שגיאה כלשהי, תקדיש זמן רב יותר לניפוי באגים מאשר כתיבת הקוד עצמו.

מהי שגיאה?

שגיאה אינה אלא שורת קוד לא ניתן לבצע בגלל הפונקציונליות או הקוד הלא נכון. אז נסו לחזות את השגיאה ולטפל בה.

לדוגמא, אם אתה מנסה למחוק את הגיליון שאינו שם, ברור שלא נוכל לבצע שורת קוד זו.

שגיאה היא משלושה סוגים שגיאה אחת מורכבת עקב משתנים שלא הוכרזו. השנייה היא שגיאת הזנת נתונים עקב הזנות שגויות על ידי הקודן, והשלישית היא שגיאת זמן ריצה בגלל ש- VBA לא יכול לזהות את שורת הקוד. לניסיון לגשת או לעבוד על גליון עבודה או חוברת עבודה שאינם שם.

אבל יש לנו הצהרה ב- VBA לטיפול בכל שגיאות מסוג זה, כלומר הצהרת "On Error".

סוגי הצהרות שגיאה

נקודת המפתח לטיפול בשגיאות ב- VBA היא הצהרת "On Error". לדוגמא בשגיאה "המשך השורה הבאה", "עבור לשורה אחרת או קפוץ לה" וכו '...

בהצהרת שגיאה יש שלושה סוגים של הצהרות.

  1. GoTo 0  פירושו בכל פעם ששגיאת זמן הריצה מתרחשת מצטיינת או ש- VBA צריך להציג את תיבת הודעת השגיאה האומרת את סוג השגיאה שהיא נתקלה בה. ברגע ש- VBA מבצע את הקוד הוא מבטל את כל מטפלי השגיאות באותו בלוק מסוים בקוד.
  2. המשך המשך פירושו בכל פעם שהשגיאה מתרחשת הצהרה זו מורה להצטיין להתעלם מאותה שגיאה ולעבור (המשך הבא) לשורת הקוד הבאה מבלי להציג הודעות שגיאה. זה לא אומר שהוא יתקן את השגיאה אלא הוא פשוט מתעלם מהשגיאה.
  3. GoTo [label] פירושו בכל פעם ש- VBA נתקל בשגיאה עבור אל התווית שהוקצתה. זה גורם לקוד לקפוץ לשורה הספציפית שמספק הקודן.

3 הדרכים המובילות לטיפול בשגיאות ב- VBA

אתה יכול להוריד VBA על תבנית שגיאה כאן - VBA על תבנית שגיאה

מספר 1 - בשגיאה המשך הבא

נניח שאתה מחלק את הערך 20 ב- 0 והצהרת על המשתנה כדי להקצות לו את תוצאת החלוקה.

קוד:

 תת OnError_Example1 () עמעום אני כשלם i = 20/0 סוף משנה 

אם אתה מריץ קוד זה הוא ישליך את השגיאה הבאה.

אז אתה לא יכול לחלק אף מספר בערך אפס. מספר שגיאת זמן הריצה הוא 11 כלומר חלוקה לפי אפס.

עכשיו אוסיף עוד שורה אחת לקוד.

קוד:

 משנה OnError_Example1 () עמעום כשלם שלם, j כשלם שלם i = 20/0 j = 20/2 סוף משנה 

עכשיו אוסיף את ההצהרה על המשך השגיאה הבאה למעלה.

קוד:

 משנה OnError_Example1 () התעמעם כשלם שלם, j כשלם שלם בשגיאה המשך הבא i = 20/0 j = 20/2 סוף משנה 

עכשיו אם אני מבצע את הקוד הזה זה לא ייתן לי שום הודעות שגיאה אלא הוא יבצע את שורת הקוד הבאה כלומר j = 20/2.

# 2 - על שגיאת GoTo

הכרזתי על שלושה משתנים.

קוד:

 תת OnError_Example1 () עמום כשלם, j כשלם, k כשלם 

על כל שלושת המשתנים הללו אקצה חישוב חלוקה.

קוד:

 תת OnError_Example1 () התעמעם אני כשלם, j כשלם, k כשלם i = 20/0 j = 20/2 k = 10/5

התוצאה של כל שלושת החישובים הללו תוצג בתיבת ההודעות.

קוד:

 תת OnError_Example1 () התעמעם כשלם שלם, j כשלם שלם, k כשלם שלם i = 20/0 j = 20/2 k = 10/5 MsgBox "הערך של i הוא" & i & vbNewLine & "הערך של j הוא "& j & _ vbNewLine &" הערך של k הוא "& k & vbNewLine Sub Sub 

כעת אנסה לבצע קוד זה מכיוון שהחישוב של "אני" אינו תקין נקבל שגיאת זמן ריצה 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 "The value of i is " & i & vbNewLine & "The value of j is " & j & _ vbNewLine & "The value of k is " & k & vbNewLine End Sub 

If I execute this it will skip “I” calculation and execute the remaining two calculations and the result is as follows.

Now instead of “On Error Resume Next” I will add “On Error GoTo KCalculation”

Code:

 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 "The value of i is " & i & vbNewLine & "The value of j is " & j & _ vbNewLine & "The value of k is " & 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.