Visual Basic for Applications:
Hantera fel

Hur:

I VBA implementeras felhantering vanligtvis med hjälp av uttalandet On Error som instruerar VBA hur man ska fortsätta när ett fel uppstår. De vanligaste strategierna för felhantering involverar On Error GoTo etikett, On Error Resume Next och On Error GoTo 0.

Exempel 1: Användning av On Error GoTo

Detta tillvägagångssätt låter dig dirigera programmet till en specifik kodsektion, märkt direkt efter att ett fel har uppstått.

Sub ErrorHandlerExample()
    On Error GoTo ErrHandler
    Dim intDivision As Integer

    intDivision = 5 / 0 ' Detta kommer att orsaka ett nolldivisionsfel

    Exit Sub
ErrHandler:
    MsgBox "Ett fel inträffade: " & Err.Description, vbCritical, "Fel!"
    Resume Next
End Sub

I det här exemplet kommer alla körtidsfel att utlösa hoppet till ErrHandler, visa ett felmeddelande och sedan fortsätta med nästa rad efter felet.

Exempel 2: Användning av On Error Resume Next

Denna strategi instruerar VBA att fortsätta utföra nästa rad kod även om ett fel uppstår, vilket kan vara användbart för fel som förväntas vara ofarliga eller när du planerar att hantera felet senare i utförandet.

Sub ResumeNextExample()
    On Error Resume Next
    Dim intDivision As Integer
    intDivision = 5 / 0 ' Detta kommer inte att få programmet att stoppa; felet ignoreras
    
    ' Kontrollera om ett fel inträffade
    If Err.Number <> 0 Then
        MsgBox "Ett fel inträffade: " & Err.Description, vbExclamation, "Hanterat fel"
        ' Återställ fel
        Err.Clear
    End If
End Sub

I det här fallet bryts inte programmet vid fel; det kontrollerar om ett fel har inträffat, hanterar det om det har gjort det, och nollställer sedan felet.

Fördjupning

Historiskt sett har felhantering i programmeringsspråk utvecklats från enkla goto-uttalanden till mer sofistikerade mekanismer som undantag (exceptions) i språk såsom Java och C#. VBA:s felhantering, även om den inte är lika kraftfull eller flexibel som modern undantagshantering, uppfyller sitt syfte inom kontexten av språkets användningsområden för att automatisera uppgifter i Microsoft Office-miljöer.

Den främsta begränsningen med VBA:s felhantering ligger i dess något omständliga och manuella tillvägagångssätt, vilket kräver noggrann placering av felhanteringskod och klar förståelse för utförandets flöde. Moderna programmeringsspråk erbjuder vanligtvis mer eleganta lösningar, såsom try-catch-block, som automatiskt hanterar flödet till felhanteringskoden utan behov av manuella kontroller eller hopp i körningen.

Trots dessa begränsningar är VBA:s felhanteringsmekanismer lämpliga för de flesta automatiseringsuppgifter och när de används korrekt kan de avsevärt minska sannolikheten för att ohanterade fel orsakar problem för användarna. Dessutom kan förståelse för VBA:s felhantering ge insikter i äldre programmeringsparadigm och utvecklingen av strategier för felhantering i programvaruutveckling.