Inhoudsopgave:
Video: JBL Charge - How to Pair with an iPhone and iPad | H2TechVideos 2024
Wanneer u met fouten in Excel VBA moet omgaan, kunt u de instructie OnError gebruiken. Er zijn echter een paar dingen die u eerst moet weten. U kunt de instructie On Error op drie manieren gebruiken.
Syntaxis | What It Does |
---|---|
On Error GoTo label | Na het uitvoeren van deze instructie wordt VBA doorgevoerd op de
-instructie die volgt op het opgegeven label. U moet een dubbele punt achter het label opnemen, zodat VBA het als een label herkent. |
On Error GoTo 0 | Na het uitvoeren van deze instructie hervat VBA zijn normale
foutcontrolegedrag. Gebruik deze verklaring na het gebruik van een van de andere On Error-instructies of als u foutafhandeling in uw procedure wilt verwijderen. |
On Error Resume Next | Na het uitvoeren van deze instructie negeert VBA eenvoudig alle fouten
en wordt de uitvoering met de volgende instructie hervat. |
Hervatten na een fout
In sommige gevallen wilt u gewoon dat de routine netjes eindigt als er een fout optreedt. U kunt bijvoorbeeld een bericht weergeven waarin de fout wordt beschreven en vervolgens de procedure afsluiten. (Het eerder getoonde voorbeeld van EnterSquareRoot5 gebruikt deze techniek.) In andere gevallen wilt u indien mogelijk herstellen van de fout.
Om van een fout te herstellen, moet u een Resume-instructie gebruiken. Hiermee wordt de foutconditie gewist en kunt u de uitvoering op een bepaalde locatie voortzetten. U kunt de Resume-instructie op drie manieren gebruiken.
Syntaxis | What It Does |
---|---|
Resume | Uitvoering wordt hervat met de instructie die de fout veroorzaakte. Gebruik
dit als uw foutafhandelingscode het probleem corrigeert en het OK is om door te gaan. |
Hervatten Volgende | Uitvoering wordt hervat met de instructie onmiddellijk volgend op de
-instructie die de fout veroorzaakte. Dit negeert in wezen de fout. |
Hervat label | De uitvoering wordt hervat op het label dat u opgeeft. |
Het volgende voorbeeld gebruikt een Resume-instructie nadat er een fout is opgetreden:
Sub EnterSquareRoot6 () Dim-aantal als Variant Dim Msg als String Dim Ans Als geheel-getal TryAgain: 'Foutafhandeling instellen op fout GoTo BadEntry 'Prompt voor een waarde Num = InputBox ("Voer een waarde in") If Num = "" Then Exit Sub "Voeg de vierkantswortel ActiveCell in. Waarde = Sqr (Num) Exit Sub BadEntry: Msg = Err. Nummer & ":" & Fout (Err. Nummer) Msg = Msg & vbNewLine & vbNewLine Msg = Msg & "Zorg dat een bereik is geselecteerd," Msg = Msg & "het blad is niet beveiligd", Msg = Msg & "en u voert een niet-negatieve waarde in. "Msg = Msg & vbNewLine & vbNewLine &" Probeer het nog een keer? "Ans = MsgBox (Msg, vbYesNo + vbCritical) Als Ans = vb Ja dan Resume TryAgain End Sub
Deze procedure heeft nog een label: TryAgain.Als er een fout optreedt, wordt de uitvoering voortgezet op het BadEntry-label en geeft de code het onderstaande bericht weer. Als de gebruiker antwoordt door op Ja te klikken, wordt de instructie Hervatten geactiveerd en springt de uitvoering terug naar het TryAgain-label. Als de gebruiker op Nee klikt, wordt de procedure beëindigd.
Als er een fout optreedt, kan de gebruiker beslissen of hij het opnieuw probeert.Merk op dat het foutbericht ook het foutnummer bevat, samen met de "officiële" foutbeschrijving.
De opdracht Resume wist de fout voordat u verdergaat. Om dit te bekijken, vervangt u de volgende verklaring voor de voorlaatste instructie in het vorige voorbeeld:
Als Ans = vb Ja dan Ga naar TryAgain
De code werkt niet correct als u GoTo gebruikt in plaats van Resume. Voer een negatief getal in om te demonstreren. U krijgt de foutmelding. Klik op Ja om het opnieuw te proberen en voer vervolgens een ander negatief getal in. Deze tweede fout is niet opgesloten omdat de oorspronkelijke foutvoorwaarde niet is gewist.
Foutafhandeling in een notendop
Om u te helpen deze foutafhandelingsactiviteiten recht te houden, vindt u hier een snel en vuile samenvatting. Een blok met foutafhandelingscode heeft de volgende kenmerken:
-
Het begint onmiddellijk na het label dat is opgegeven in de foutmelding bij fout.
-
Het moet alleen door uw macro worden bereikt als er een fout optreedt. Dit betekent dat u onmiddellijk vóór het label een verklaring zoals Exit Sub of Exit-functie moet gebruiken.
-
Hiervoor is mogelijk een hervattingsverklaring vereist. Als u ervoor kiest om de procedure niet af te breken wanneer er een fout optreedt, moet u een hervattingsinstructie uitvoeren voordat u terugkeert naar de hoofdcode.
Weten wanneer fouten moeten worden genegeerd
In sommige gevallen is het perfect ok om fouten te negeren. Dat is het moment dat de instructie On Error Resume Next in het spel komt.
Het volgende voorbeeld lus door elke cel in het geselecteerde bereik en converteert de waarde naar de vierkantswortel. Deze procedure genereert een foutmelding als een cel in de selectie een negatief getal of een tekst bevat:
Subselectie Sqrt () Dimensiecel Als bereik Als TypeNaam (Selectie) <> "bereik" Dan Sub voor elke cel verlaten In cel Selectie. Waarde = Sqr (celwaarde) Volgende cel Einde sub
In dit geval wilt u wellicht een cel overslaan die een waarde bevat die u niet naar een vierkantswortel kunt converteren. U kunt allerlei soorten foutcontrolemogelijkheden maken met If-Then-structuren, maar u kunt een betere (en eenvoudiger) oplossing bedenken door eenvoudig de fouten te negeren die optreden.
De volgende routine volbrengt dit met behulp van de instructie On Error Resume Next:
Sub SelectionSqrt () Dim cell As Range If TypeName (Selection) <> "range" Then Exit Sub On Error Resume Next Voor elke cel In selectie cel. Waarde = Sqr (celwaarde) Volgende cel Einde sub
Over het algemeen kunt u een instructie On Error Resume Next gebruiken als u de fouten als onschadelijk of inconsequent voor uw taak beschouwt.