VBA par kļūdu paziņojumiem Top 3 veidi, kā rīkoties ar kļūdām

Excel VBA par kļūdu paziņojumu

VBA On Error paziņojums ir kļūdu apstrādes mehānisma veids, kas tiek izmantots, lai vadītu kodu rīkoties, ja tas sastopas ar jebkura veida kļūdām, parasti, kad kods saskaras ar kļūdu, izpilde apstājas, bet ar šo paziņojumu kodā tiek izpildīta kods turpina darboties, kā tas ir norādījis, kā rīkoties, kad rodas kļūda.

Paredzot kļūdu kodā, jūs esat profesionālis VBA kodēšanā. Jūs nevarat padarīt kodu par 100% efektīvu, pat ja esat pārliecināts par savu kodu vienā vai otrā veidā, tas var izraisīt kļūdu.

Gandrīz neiespējams uzdevums ir identificēt un apstrādāt jebkura veida kļūdas, taču mums ir dažādi veidi, kā rīkoties ar kļūdām VBA. Rakstot kodu, jūs, iespējams, neparedzat, kāda veida kļūdas kods var rasties, taču, ja rodas kāda kļūda, jūs pavadīsit vairāk laika atkļūdošanā nekā paša koda rakstīšana.

Kas ir kļūda?

Kļūda ir nekas cits, taču koda rindu nevar izpildīt funkcionalitātes vai nepareiza koda dēļ. Tāpēc mēģiniet paredzēt kļūdu un rīkoties ar to.

Piemēram, ja mēģināt izdzēst lapu, kuras tur nav, tad acīmredzot mēs nevaram izpildīt šo koda rindu.

Kļūda ir trīs veidu, viena ir apkopota kļūda nedeklarētu mainīgo dēļ. Otrais ir datu ievades kļūda nepareizu kodētāja ierakstu dēļ, un trešā ir darbības laika kļūda VBA dēļ, kas nevar atpazīt koda rindiņu. Lai mēģinātu piekļūt darblapai vai darbgrāmatai vai strādāt ar to, kuras tur nav.

Bet mums ir paziņojums VBA, lai apstrādātu visu šāda veida kļūdas, ti, “On Error” paziņojums.

Kļūdu paziņojumu veidi

Galvenais kļūdu apstrādes punkts VBA ir paziņojums “On Error”. Piemēram, kļūdas gadījumā “atsākt nākamo rindu”, “pāriet vai pāriet uz citu rindu” utt.

Paziņojumā On Error ir trīs veidu paziņojumi.

  1. GoTo 0  nozīmē, ka vienmēr, kad rodas izpildes laika kļūda, Excel vai VBA vajadzētu parādīt kļūdas ziņojumu lodziņu, kurā teikts, kāda veida kļūda tā ir radusies. Tiklīdz VBA izpilda kodu, tā atspējo visus kļūdu apstrādātājus konkrētajā koda blokā.
  2. Resume Next nozīmē, ka ikreiz, kad rodas kļūda, šis paziņojums liek Excel ignorēt šo kļūdu un pāriet uz (atsākt nākamo) nākamo koda rindu, nerādot nekādus kļūdu ziņojumus. Tas nenozīmē, ka tas novērsīs kļūdu, drīzāk vienkārši ignorē kļūdu.
  3. GoTo [label] nozīmē ikreiz, kad VBA rodas kļūda, dodieties uz piešķirto etiķeti. Tas liek kodam pāriet uz konkrēto līniju, ko nodrošina kodētājs.

Top 3 veidi, kā rīkoties ar kļūdām VBA

Šo VBA On Error Template varat lejupielādēt šeit - VBA On Error Template

# 1 - ieslēdzot kļūdu, atsākt nākamo

Pieņemsim, ka jūs dalāt vērtību 20 ar 0 un esat deklarējis mainīgo, lai tam piešķirtu dalīšanas rezultātu.

Kods:

 Sub OnError_Example1 () Dim i kā vesels skaitlis i = 20/0 End Sub 

Ja palaidīsit šo kodu, tiks parādīta zemāk redzamā kļūda.

Tātad nevienu skaitli nevar dalīt ar nulles vērtību. Izpildes laika kļūdas numurs ir 11, ti, dalījums ar nulli.

Tagad kodam pievienošu vēl vienu rindiņu.

Kods:

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

Tagad es augšpusē pievienošu paziņojumu Par kļūdu atsākšanu.

Kods:

 Sub OnError_Example1 () Dim i kā vesels skaitlis, j kā Integer ieslēgts kļūda Atsākt Nākamais i = 20/0 j = 20/2 End Sub 

Tagad, ja es izpildu šo kodu, tas nedos man kļūdas ziņojumus, bet tas izpildīs nākamo koda rindiņu, ti, j = 20/2.

# 2 - ieslēgta kļūda GoTo Label

Esmu deklarējis trīs mainīgos.

Kods:

 Sub OnError_Example1 () Dim i kā vesels skaitlis, j kā vesels skaitlis, k kā vesels skaitlis 

Visiem šiem trim mainīgajiem es piešķiršu sadalījuma aprēķinu.

Kods:

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

Visu šo trīs aprēķinu rezultāts tiks parādīts ziņojumu lodziņā.

Kods:

 Sub OnError_Example1 () Dim i kā vesels skaitlis, j kā vesels skaitlis, k As skaitlis i = 20/0 j = 20/2 k = 10/5 MsgBox "i vērtība ir" & i & vbNewLine & "j vērtība ir "& j & _ vbNewLine &" k vērtība ir "& k & vbNewLine End Sub 

Tagad es mēģināšu izpildīt šo kodu, jo “I” aprēķins nav pareizs, mēs saņemsim izpildes laika kļūdu 11.

Tagad es pievienošu paziņojumu “On Error Resume Next”.

Kods:

 Sub OnError_Example1 () Dim i kā vesels skaitlis, j kā vesels skaitlis, k kā vesels skaitlis On kļūda Atsākt Nākamais i = 20/0 j = 20/2 k = 10/5 MsgBox "i vērtība ir" & i & vbNewLine & "The j vērtība ir "& j & _ vbNewLine &" k vērtība ir "& k & vbNewLine End Sub 

Ja es to izpildīšu, tas izlaidīs “I” aprēķinu un izpildīs atlikušos divus aprēķinus, un rezultāts būs šāds.

Tagad vietā “On Error Resume Next” pievienošu “On Error GoTo KCalculation”

Kods:

 Sub OnError_Example1 () Dim i kā vesels skaitlis, j kā vesels skaitlis, k kā vesels skaitlis On kļūda GoTo K Aprēķins: i = 20/0 j = 20/2 K Aprēķins: k = 10/5 MsgBox "i vērtība ir" & i & vbNewLine & "J vērtība ir" & j & _ vbNewLine & "k vērtība ir" & k & vbNewLine End Sub 

Piezīme: Šeit “KCalculation” ir manis piešķirtais etiķetes nosaukums. Jūs varat dot savu etiķetes nosaukumu bez atstarpes.

Tagad, ja izpildīšu šo koda rindiņu, tā netiks pāriet uz nākamo rindiņu, bet drīzāk pāriet uz manis ievadīto etiķetes nosaukumu, ti, “KCalcualtion”. Šeit tas neņem vērā “I” kļūdu un neveiks “j” aprēķinu, bet uzreiz pāriet uz “KCalcualtion”.

# 3 - drukas kļūdas numurs VBA

Koda beigās mēs varam arī izdrukāt kļūdas numuru atsevišķā ziņojumu lodziņā. Šādu darbu veiks šī koda rinda.

Kods:

Kļūda. Numurs

Tagad es palaidīšu šo kodu pirmais ziņojuma lodziņš parādīs aprēķinu rezultātus.

Noklikšķiniet uz Labi, tas parādīs vēl vienu ziņojumu lodziņu, lai parādītu kļūdas numuru.

Rezultātā mēs ejam 11, ti, dalījums ar nulli.

Numura vietā mēs varam arī iegūt kļūdas aprakstu. Mums vienkārši jāmaina kods, zemāk ir kods.

Kods:

Kļūda. Apraksts

Tajā tiks parādīts šāds apraksts.

Atceramās lietas

  • Pēc koda beigās ievadītā “On Error Resume Next” neaizmirstiet pievienot paziņojumu “On Error GoTo 0”
  • Marķējuma nosaukumam abās vietās jābūt vienādiem.
  • Etiķešu nosaukumi nav jādefinē laikus.
  • Galu galā vienmēr skatiet, kāda ir kļūda, izmantojot atsevišķu ziņojumu lodziņu.

$config[zx-auto] not found$config[zx-overlay] not found