Hur kan du identifiera och hantera alla möjliga fel i Excel 2016? Ofta kan man inte. Lyckligtvis erbjuder VBA ett annat sätt att hantera dessa irriterande fel.
Återbesök EnterSquareRoot-proceduren
Granska följande kod. Rutinen använder en all-purpose On Error-sats för att fånga alla fel och kontrollerar sedan om InputBoxen avbröts.
Sub EnterSquareRoot5()
Dim Num Som Variant
Dim Msg As String
' Ställ in felhantering
Vid fel GoTo BadEntry
' Fråga efter ett värde
Num = InputBox(”Ange ett värde”)
' Avsluta om du avbryter
Om Num = ““ Avsluta Sub
' Infoga kvadratroten
ActiveCell.Value = Sqr(Num)
Avsluta Sub
BadEntry:
Msg = "Ett fel uppstod." & vbNewLine & vbNewLine
Msg = Msg & "Se till att ett intervall är valt, "
Msg = Msg & "arket är inte skyddat",
Msg = Msg & "och du anger ett icke-negativt värde."
MsgBox Msg, vbCritical
Avsluta Sub
Denna rutin fångar alla typer av körtidsfel. Efter att ha fällt ett körtidsfel visar den reviderade EnterSquareRoot-proceduren den här meddelanderutan. Den här meddelanderutan beskriver de mest troliga orsakerna till felet.
Ett körtidsfel i proceduren genererar detta halvhjälpsamma felmeddelande.
På Fel fungerar inte?
Om ett On Error-meddelande inte fungerar som annonserat måste du ändra en av dina inställningar:
Aktivera VBE.
Välj kommandot Verktyg → Alternativ.
Klicka på fliken Allmänt i dialogrutan Alternativ.
Se till att inställningen Break on All Errors är avmarkerad.
Om den här inställningen är vald, ignorerar Excel i princip alla On Error-satser. Du vill vanligtvis behålla alternativen för felfällning inställda på Bryt vid obehandlade fel.
Om meddelandet On Error
Genom att använda en On Error-sats i din VBA-kod kan du kringgå Excels inbyggda felhantering och använda din egen felhanteringskod. I det föregående exemplet får ett körtidsfel att makrokörning hoppar till satsen märkt BadEntry. Som ett resultat slipper du Excels ovänliga felmeddelanden, och du kan visa ditt eget meddelande för användaren.
Lägg märke till att exemplet använder en Exit Sub-sats precis före BadEntry-etiketten. Denna sats är nödvändig eftersom du inte vill köra felhanteringskoden om ett fel inte uppstår.