Kļūdu apstrādātāji ļauj norādīt, kas notiek, ja Excel makro koda darbības laikā tiek konstatēta kļūda. Kļūdu apstrādātāji ir rindas, kas līdzīgas tālāk norādītajām.
Par kļūdu GoTo MyError
Bez kļūdu apstrādātājiem jebkura kļūda, kas rodas jūsu kodā, liks programmai Excel aktivizēt mazāk noderīgu kļūdas ziņojumu, kas parasti skaidri nenorāda notikušo. Tomēr, izmantojot kļūdu apstrādātājus, varat izvēlēties ignorēt kļūdu vai graciozi iziet no koda, nosūtot savu ziņojumu lietotājam.
Ir trīs veidu paziņojumi par kļūdu:
-
Kļūdas gadījumā GoTo SomeLabel: kods pāriet uz norādīto etiķeti.
-
Kļūdas gadījumā atsākt nākamo: kļūda tiek ignorēta, un kods tiek atsākts.
-
Par kļūdu GoTo 0: VBA atiestata normālu kļūdu pārbaudes darbību.
Par kļūdu GoTo SomeLabel
Dažreiz kļūda jūsu kodā nozīmē, ka jums ir rūpīgi jāiziet no procedūras un jāsniedz lietotājiem skaidrs ziņojums. Šādās situācijās varat izmantot paziņojumu On Error GoTo, lai norādītu programmai Excel pāriet uz noteiktu koda rindiņu.
Piemēram, nākamajā nelielajā koda daļā jūs sakāt programmai Excel dalīt vērtību šūnā A1 ar vērtību šūnā A2 un pēc tam ievietot atbildi šūnā A3. Viegli. Kas varētu noiet greizi?
Apakšmakro1()
Diapazons("A3").Vērtība = diapazons("A1").Vērtība/diapazons("A2").Vērtība
Beigt apakš
Kā izrādās, divas galvenās lietas var noiet greizi. Ja šūnā A2 ir 0, tiek parādīta kļūda dalīt ar 0. Ja šūnā A2 ir vērtība, kas nav skaitliska, tiek parādīta tipa neatbilstības kļūda.
Lai izvairītos no nepatīkama kļūdas ziņojuma, varat norādīt programmai Excel, ka kļūdas gadījumā vēlaties, lai koda izpilde pārietu uz etiķeti ar nosaukumu MyExit.
Nākamajā kodā MyExit etiķetei seko ziņojums lietotājam, kas sniedz draudzīgu padomu, nevis nepatīkamu kļūdas ziņojumu. Ņemiet vērā arī Exit Sub rindiņu pirms MyExit etiķetes, kas nodrošina, ka kods vienkārši iziet, ja netiks konstatēta kļūda:
Apakšmakro1()
Kļūdas gadījumā GoTo MyExit
Diapazons("A3").Vērtība = diapazons("A1").Vērtība/diapazons("A2").Vērtība
Iziet Sub
MyExit:
MsgBox "Lūdzu, izmantojiet derīgus skaitļus, kas nav nulles"
Beigt apakš
Kļūdas gadījumā atsākt nākamo
Dažreiz jūs vēlaties, lai programma Excel ignorētu kļūdu un vienkārši atsāktu koda izpildi. Šādās situācijās varat izmantot paziņojumu par kļūdu, atsākt nākamo.
Piemēram, šī koda daļa ir paredzēta, lai izdzēstu failu ar nosaukumu GhostFile.exe no direktorijas C: Temp. Kad fails ir izdzēsts, jauks ziņojuma lodziņš informē lietotāju, ka fails ir pazudis:
Apakšmakro1()
Nogalināt "C: TempGhostFile.exe"
MsgBox "Fails ir izdzēsts."
Beigt apakš
Kods darbojas lieliski, ja patiešām ir fails, kas jādzēš. Bet, ja kāda iemesla dēļ fails ar nosaukumu GhostFile.exe neeksistē C:Temp diskdzinī, tiek parādīta kļūda.
Šajā gadījumā jums ir vienalga, vai fails tur nav, jo jūs tik un tā grasāties to dzēst. Tātad jūs varat vienkārši ignorēt kļūdu un turpināt izmantot kodu.
Izmantojot paziņojumu On Error Resume Next, kods tiek izpildīts neatkarīgi no tā, vai mērķa fails pastāv vai ne:
Apakšmakro1()
Kļūdas gadījumā atsākt nākamo
Nogalināt "C: TempGhostFile.exe"
MsgBox "Fails ir izdzēsts."
Beigt apakš
Par kļūdu GoTo 0
Izmantojot noteiktus kļūdu paziņojumus, var būt nepieciešams atiestatīt VBA kļūdu pārbaudes darbību. Lai saprastu, ko tas nozīmē, apskatiet nākamo piemēru.
Šeit vispirms vēlaties izdzēst failu ar nosaukumu GhostFile.exe no C: Temp direktorijas. Lai izvairītos no kļūdām, kas var rasties tādēļ, ka mērķa fails neeksistē, izmantojiet priekšrakstu On Error Resume Next. Pēc tam jūs mēģināt veikt kādu aizdomīgu matemātiku, dalot 100/Maiku:
Apakšmakro1()
Kļūdas gadījumā atsākt nākamo
Nogalināt "C: TempGhostFile.exe"
Diapazons ("A3"). Vērtība = 100 / "Mike"
Beigt apakš
Palaižot šo koda daļu, vajadzētu radīt kļūdu neskaidras matemātikas dēļ, taču tā nenotiek. Kāpēc? Tā kā pēdējā instrukcija, ko sniedzāt kodam, bija On Error Resume Next. Visas kļūdas, kas radušās pēc šīs rindas, faktiski tiek ignorētas.
Lai novērstu šo problēmu, varat izmantot paziņojumu On Error GoTo 0, lai atsāktu normālu kļūdu pārbaudes darbību:
Apakšmakro1()
Kļūdas gadījumā atsākt nākamo
Nogalināt "C: TempGhostFile.exe"
Par kļūdu GoTo 0
Diapazons ("A3"). Vērtība = 100 / "Mike"
Beigt apakš
Šis kods ignorēs kļūdas līdz paziņojumam On Error GoTo 0. Pēc šī paziņojuma kods atgriežas pie parastās kļūdu pārbaudes un aktivizē paredzamo kļūdu, kas izriet no neskaidras matemātikas.