VBA par kļūdu - kļūdu apstrādes paraugprakse

VBA kļūdu apkrāptu lapa

Kļūdas

AprakstsVBA kodsIeslēgta kļūda - apturēt kodu un parādīt kļūduKļūda Goto 0On Error - izlaidiet kļūdu un turpiniet darbuPar kļūdu Atsākt nākamoKļūdas gadījumā - pārejiet uz koda rindiņu [iezīme]Kļūda Goto [iezīme]Notīra (atiestata) kļūduKļūda GoTo -1Rādīt kļūdas numuruMsgBox kļūdas numursRādīt kļūdas aprakstuMsgBox kļūda. AprakstsFunkcija, lai radītu savu kļūduKļūda. Paceliet

Skatiet vairāk VBA “Mīklas lapas” un bezmaksas PDF lejupielādes

VBA kļūdu apstrāde

VBA kļūdu apstrāde attiecas uz VBA izpildlaika kļūdu paredzēšanas, noteikšanas un novēršanas procesu. VBA kļūdu apstrādes process notiek, rakstot kodu, pirms rodas kļūdas.

VBA izpildlaika kļūdas ir kļūdas, kas rodas koda izpildes laikā. Izpildlaika kļūdu piemēri:

  • Atsauce uz neesošu darbgrāmatu, darblapu vai citu objektu
  • Nederīgi dati, piem. atsauce uz Excel šūnu, kurā ir kļūda
  • Mēģinājums dalīties ar nulli

VBA paziņojums par kļūdu

Lielākā daļa VBA kļūdu apstrādes tiek veiktas ar Par paziņojumu par kļūdu. Paziņojums par kļūdu norāda VBA, kas jādara, ja rodas kļūda. Ir trīs Par paziņojumiem par kļūdām:

  • Kļūda GoTo 0
  • Par kļūdu Atsākt nākamo
  • Par kļūdu GoTo Līnija

Kļūda GoTo 0

Kļūda GoTo 0 ir VBA noklusējuma iestatījums. Šo noklusējuma iestatījumu var atjaunot, pievienojot šādu koda rindu:

1 Kļūda GoTo 0

Kad rodas kļūda ar Kļūda GoTo 0, VBA pārtrauks koda izpildi un parādīs standarta kļūdas ziņojumu lodziņu.

Bieži vien jūs pievienosit Kļūda GoTo 0 pēc pievienošanas Par kļūdu Atsākt nākamo kļūdu apstrāde (nākamā sadaļa):

123456789 Apakš kļūdaGoTo0 ()Par kļūdu Atsākt nākamoActiveSheet.Shapes ("Start_Button"). DzēstKļūda GoTo 0'Palaist vairāk kodaBeigu apakš

Par kļūdu Atsākt nākamo

Par kļūdu Atsākt nākamo liek VBA izlaist visas koda rindas, kurās ir kļūdas, un pāriet uz nākamo rindu.

1 Par kļūdu Atsākt nākamo

Piezīme: Par kļūdu Atsākt nākamo kļūdu neizlabo vai citādi neatrisina. Tas vienkārši liek VBA rīkoties tā, it kā koda rindiņa, kurā ir kļūda, neeksistētu. Nepareiza lietošana Par kļūdu Atsākt nākamo var izraisīt neparedzētas sekas.

Lielisks laiks lietošanai Par kļūdu Atsākt nākamo ir, strādājot ar objektiem, kas var būt vai nebūt. Piemēram, jūs vēlaties uzrakstīt kādu kodu, kas izdzēsīs formu, bet, ja jūs izpildīsit kodu, kad forma jau ir izdzēsta, VBA radīs kļūdu. Tā vietā jūs varat izmantot Par kļūdu Atsākt nākamo pateikt VBA izdzēst formu, ja tā pastāv.

123 Par kļūdu Atsākt nākamoActiveSheet.Shapes ("Start_Button"). DzēstKļūda GoTo 0

Paziņojums, ko mēs pievienojām Kļūda GoTo 0 aiz koda rindas, kurā ir iespējamā kļūda. Tas atiestata kļūdu apstrādi.

Nākamajā sadaļā mēs parādīsim, kā pārbaudīt, vai, lietojot, radās kļūda Kļūdas numurs, sniedzot jums uzlabotas kļūdu apstrādes iespējas …

Err.Number, Err.Clear un nozvejas kļūdas

Tā vietā, lai vienkārši izlaistu līniju, kurā ir kļūda, mēs varam atklāt kļūdu, izmantojot Par kļūdu Atsākt nākamo un Kļūdas numurs.

Kļūdas numurs atgriež kļūdas numuru, kas atbilst konstatētās kļūdas veidam. Ja nav kļūdas, Kļūdas numurs = 0.

Piemēram, šī procedūra atgriezīs “11”, jo rodas kļūda Izpildlaika kļūda “11”.

1234567 Apakš kļūdaNumber_ex ()Par kļūdu Atsākt nākamoActiveCell.Value = 2 /0MsgBox kļūdas numursBeigu apakš

Kļūda, apstrādājot ar Err.Number

Patiesais spēks Kļūdas numurs slēpjas spējā noteikt, vai radusies kļūda (Kļūdas numurs 0). Tālāk redzamajā piemērā mēs esam izveidojuši funkciju, kas pārbaudīs, vai lapa pastāv, izmantojot Err.Number.

12345678910111213141516171819 ApakštestsWS ()MsgBox Vai WSExist ("tests")Beigu apakšFunkcija Vai WSExist (wsName As String) kā BūlaDim ws kā darblapaPar kļūdu Atsākt nākamoIestatīt ws = Sheets (wsName)'Ja kļūda WS nepastāvJa Err.Number 0 TadVaiWSExist = FalseCitādiVaiWSExist = TrueBeigas JaKļūda GoTo -1Beigu funkcija

Piezīme: mēs esam pievienojuši a Kļūda GoTo -1 līdz beigām, kas atiestata Err.Number uz 0 (skatiet divas sadaļas uz leju).

Ar Par kļūdu Atsākt nākamo un Kļūdas numurs, jūs varat atkārtot “Izmēģināt” un “noķert” citu programmēšanas valodu funkcionalitāte.

Par kļūdu GoTo Līnija

Par kļūdu GoTo Līnija liek VBA “doties uz” iezīmētu koda rindu, ja rodas kļūda. Jūs deklarējat paziņojumu Pāriet uz šo (kur errHandler ir līnijas etiķete, uz kuru doties):

1 Par kļūdu GoTo errHandler

un izveidojiet šādu līnijas etiķeti:

1 errHandler:

Piezīme. Šī ir tā pati etiķete, kuru izmantotu ar parasto VBA GoTo pārskatu.

Zemāk mēs parādīsim, kā to izmantot Par kļūdu GoTo Līnija iziet no procedūras.

Kļūda Iziet apakš

Varat izmantot On Error GoTo Line, lai izietu no apakšsadaļas, ja rodas kļūda.

To var izdarīt, procedūras beigās ievietojot kļūdu apstrādātāja līnijas etiķeti:

12345678 Sub ErrGoToEnd ()Kļūda GoTo endProc'Kāds kodsendProc:Beigu apakš

vai izmantojot komandu Exit Sub:

123456789101112131415 Sub ErrGoToEnd ()Kļūda GoTo endProc'Kāds kodsGoTo izlaistIzietendProc:Iziet no apakšnodaļasizlaistIziet:'Vēl daži kodiBeigu apakš

Err. Clear, On Error GoTo -1 un Reset Err.Number

Kad kļūda ir apstrādāta, tā parasti jānovērš, lai novērstu turpmākus kļūdu apstrādes jautājumus.

Pēc tam, kad rodas kļūda, gan Kļūda. Skaidrs un Kļūda GoTo -1 var izmantot atiestatīšanai Kļūdas numurs līdz 0. Bet ir viena ļoti būtiska atšķirība: Kļūda. Skaidrs neatjauno pašu faktisko kļūdu, tā tikai atiestata Kļūdas numurs.

Ko tas nozīmē? IzmantojotKļūda. Skaidrs, nevarēsit mainīt kļūdu apstrādes iestatījumu. Lai redzētu atšķirību, izmēģiniet šo kodu un nomainiet to Kļūda GoTo -1 ar Kļūda. Skaidrs:

123456789101112131415161718192021 Sub ErrPiemēri ()Par kļūdu GoTo errHandler:Kļūda "lietojumprogrammas definēts"Kļūda (13)Iziet no apakšnodaļaserrHandler:'Notīrīt kļūduKļūda GoTo -1Par kļūdu GoTo errHandler2:Kļūda "Tipa neatbilstība"Kļūda (1034)Iziet no apakšnodaļaserrHandler2:Atkļūdot. Drukas kļūda. AprakstsBeigu apakš

Parasti es vienmēr iesaku lietot Kļūda GoTo -1, ja vien jums nav pamatota iemesla to izmantot Kļūda. Skaidrs tā vietā.

VBA par kļūdu MsgBox

Iespējams, vēlēsities parādīt ziņojumu lodziņu kļūdas gadījumā. Šajā piemērā tiks parādīti dažādi ziņojumu lodziņi atkarībā no kļūdas vietas:

12345678910111213141516171819202122232425262728 Apakš kļūdaMessageEx ()Dim errMsg kā virknePar kļūdu GoTo errHandler'1. posmserrMsg = "Kopēšanas un ielīmēšanas posmā radās kļūda.""Kļūda Raise (11)'2. posmserrMsg = "Datu validācijas posmā radās kļūda.""Kļūda Raise (11)'3. posmserrMsg = "P & L-Building un Copy-Over posmā radās kļūda."Kļūda Paaugstināšana (11)"4. posmserrMsg = "Mēģinot reģistrēt importēšanu iestatīšanas lapā, radās kļūda""Kļūda Raise (11)GoTo endProcerrHandler:MsgBox kļūdaMsgendProc:Beigu apakš

Šeit jūs aizstātu Err.Raise (11) ar savu faktisko kodu.

VBA IsError

Vēl viens veids, kā rīkoties ar kļūdām, ir to pārbaude, izmantojot funkciju VBA IsError. Funkcija IsError pārbauda izteiksmi, vai tajā nav kļūdu, atgriežot TRUE vai FALSE, ja rodas kļūda.

123 Sub IsErrorEx ()MsgBox IsError (diapazons ("a7"). Vērtība)Beigu apakš

Ja rodas kļūda VBA

Jūs varat arī apstrādāt kļūdas VBA, izmantojot Excel IfError funkciju. Funkcijai IfError ir jāpiekļūst, izmantojot Funkciju klase:

1234567 Sub IfErrorEx ()Dim n tik ilgin = WorksheetFunction.IfError (diapazons ("a10"). Vērtība, 0)MsgBox nBeigu apakš

Tādējādi tiks parādīta diapazona A10 vērtība, ja tā ir kļūda, tā vietā tiks parādīta vērtība 0.

VBA kļūdu veidi

Izpildlaika kļūdas

Kā minēts iepriekš:

VBA izpildlaika kļūdas ir kļūdas, kas rodas koda izpildes laikā. Izpildlaika kļūdu piemēri:

  • Atsauce uz neesošu darbgrāmatu, darblapu vai citu objektu
  • Nederīgi dati, piem. atsauce uz Excel šūnu, kurā ir kļūda
  • Mēģinājums dalīties ar nulli

Izpildlaika kļūdas var “apstrādāt”, izmantojot iepriekš aprakstītās metodes.

Sintakses kļūdas

VBA sintakses kļūdas ir kļūdas, rakstot kodu. Sintakses kļūdu piemēri ir šādi:

  • Pareizrakstība
  • Pietrūkst vai ir nepareizas pieturzīmes

VBA redaktors identificē daudzas sintakses kļūdas ar sarkanu izcelšanu:

VBA redaktoram ir arī opcija “Automātiskā sintakses pārbaude”:

Kad tas ir atzīmēts, VBA redaktors ģenerēs ziņojumu lodziņu, kas brīdinās par sintakses kļūdām pēc koda rindas ievadīšanas:

Man personīgi tas šķiet ārkārtīgi kaitinoši un atspējoju šo funkciju.

Apkopot kļūdas

Pirms mēģināt palaist procedūru, VBA “apkopos” procedūru. Apkopošana pārvērš programmu no avota koda (ko jūs varat redzēt) izpildāmā formā (jūs to neredzat).

VBA kompilācijas kļūdas ir kļūdas, kas neļauj kodam apkopot.

Labs kompilēšanas kļūdas piemērs ir trūkstošā mainīgā deklarācija:

Citi piemēri:

  • Priekš bez Nākamais
  • Izvēlieties bez Beigas Atlasīt
  • Ja bez Beigas Ja
  • Zvanot a procedūru kas neeksistē

Sintakses kļūdas (iepriekšējā sadaļa) ir apkopošanas kļūdu apakškopa.

Atkļūdošana> Kompilēt

Mēģinot palaist procedūru, parādīsies kompilācijas kļūdas. Bet ideālā gadījumā jūs identificētu apkopošanas kļūdas, pirms mēģināt palaist procedūru.

To var izdarīt, iepriekš apkopojot projektu. Lai to izdarītu, dodieties uz Atkļūdot> Apkopot VBA projektu.

Kompilators “pāries” uz pirmo kļūdu. Kad esat novērsis šo kļūdu, apkopojiet projektu vēlreiz. Atkārtojiet, līdz visas kļūdas ir novērstas.

Jūs varat teikt, ka visas kļūdas ir novērstas, jo Apkopojiet VBA projektu būs pelēks:

Pārplūdes kļūda

The VBA pārplūdes kļūda rodas, mēģinot ievietot vērtību mainīgajā, kas ir pārāk liels. Piemēram, Vesela skaitļa mainīgie var saturēt tikai vērtības no -32 768 līdz 32 768. Ja ievadāt lielāku vērtību, tiks parādīta pārpildes kļūda:

Tā vietā jums vajadzētu izmantot Garš mainīgais lai saglabātu lielāku skaitu.

Citi VBA kļūdu noteikumi

VBA nozvejas kļūda

Atšķirībā no citām programmēšanas valodām, VBA nav Paziņojums par nozveju. Tomēr jūs varat atkārtot nozvejas pārskatu, izmantojot Par kļūdu Atsākt nākamo un Ja Err.Number 0 Tad. Tas ir aprakstīts iepriekš sadaļā Kļūdu apstrāde ar Err.Number.

VBA ignorēt kļūdu

Lai ignorētu kļūdas VBA, vienkārši izmantojiet Par kļūdu Atsākt nākamo paziņojums, apgalvojums:

1 Par kļūdu Atsākt nākamo

Tomēr, kā minēts iepriekš, jums vajadzētu būt uzmanīgiem, izmantojot šo paziņojumu, jo tas neizlabo kļūdu, tas vienkārši ignorē koda rindu, kurā ir kļūda.

VBA mest kļūda / kļūda

Lai novērstu kļūdu VBA, izmantojiet Kļūda. Paceliet metodi.

Šī koda rindiņa palielinās izpildlaika kļūdu “13”: tipa neatbilstība:

1 Kļūda Paaugstināšana (13)

VBA kļūdu slazdošana

VBA kļūdu slazdošana ir tikai vēl viens VBA kļūdu apstrādes termins.

VBA kļūdas ziņojums

A VBA kļūdas ziņojums izskatās šādi:

Noklikšķinot uz “Atkļūdot”, jūs redzēsit koda rindu, kas rada kļūdu:

VBA kļūdu apstrāde cilpā

Labākais veids, kā novērst kļūdu cilpā, ir, izmantojot Par kļūdu Atsākt nākamo kopā ar Kļūdas numurs lai noteiktu, vai ir radusies kļūda (atcerieties lietot Kļūda. Skaidrs lai novērstu kļūdu pēc katras parādīšanās).

Tālāk sniegtajā piemērā tiks sadalīti divi skaitļi (A sleja ar B kolonnu) un rezultāts tiks izvadīts C slejā. Ja rodas kļūda, rezultāts būs 0.

12345678910111213141516 Apakštests ()Dim šūna kā diapazonsPar kļūdu Atsākt nākamoKatrai diapazona šūnai ("a1: a10")'Iestatiet šūnas vērtībušūna. Nobīde (0, 2). Vērtība = šūna. Vērtība / šūna. Nobīde (0, 1). Vērtība'Ja Cell.Value ir kļūda, tad noklusējuma vērtība ir 0Ja Err.Number 0 Tadšūna. Nobīde (0, 2). Vērtība = 0Kļūda. SkaidrsBeigas JaNākamaisBeigu apakš

VBA kļūdu apstrāde Access

Visi iepriekš minētie piemēri Access VBA darbojas tieši tāpat kā programmā Excel VBA.

123456789101112131415161718 Funkcija DelRecord (no formas)'šo funkciju izmanto, lai no veidlapas izdzēstu ierakstu tabulāKļūda GoTo beidzasAr frmJa .Jauns Ieraksts Tad.AtsauktIziet funkcijaBeigas JaBeigt arAr frm.RecordsetClone.Grāmatzīme = frm.Grāmatzīme.Dzēstfrm. JautājumsBeigt arIziet funkcijabeigas:BeigasBeigu funkcija

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave