VBA vid fel Återuppta nästa eller gå till 0

Denna handledning kommer att förklara VBA om felåterupptagning nästa och Goto -uttalande.

Även om din kod är perfekt konstruerad kanske användaren inte gör som du förväntar dig. Av denna anledning måste du infoga felhanterare i din kod när det kan finnas en anledning till att ett fel kan uppstå.

Vid fel Återuppta nästa

Meddelandet On Error Resume Next säger till VBA att hoppa över alla kodrader som innehåller fel och gå vidare till nästa rad. VBA kommer att ignorera raden eller raderna med ett fel i den och gå vidare till nästa kodrad.

Detta är användbart när kodraden som kan ignoreras inte är avgörande för att makrot ska lyckas, men kan vara ganska farligt om det används fel eftersom det kan ge oavsiktliga resultat.

Till exempel i proceduren nedan:

123456 Sub HideAllSheets ()Dim ws Som arbetsbladFör varje ws i ActiveWorkbook.Sheetsws.Visible = FalsktNästa wsAvsluta Sub

Om vi ​​kör den här koden får vi ett felmeddelande eftersom vi inte kan dölja alla kalkylblad i en arbetsbok - minst en arbetsbok måste vara synlig.

Men om vi ändrar proceduren enligt nedan, fortsätter koden förbi felet och lämnar det sista bladet i arbetsboken synlig.

1234567 Sub HideAllSheets ()Vid fel Återuppta nästaDim ws Som arbetsbladFör varje ws i ActiveWorkbook.Sheetsws.Visible = FalsktNästa wsAvsluta Sub

Vid fel GoTo 0

Om vi ​​inte har en felhanterare i vår kod, Vid fel Gå till 0 är Excel standardinställning. Detta betyder i princip att när ett fel uppstår med Vid fel GoTo 0, Kommer VBA att sluta köra koden och visa sin standardfelmeddelanderuta, till exempel:

Om vi ​​har satt en felfälla som Vid fel Återuppta nästa i vår kod, men då vi vill återställa felet till standard kan vi infoga ett Vid fel Gå till 0 rad i vår kod.

12345678910 Sub ErrorGoTo0 ()Vid fel Återuppta nästaDim ws Som arbetsbladFör varje ws i ActiveWorkbook.Sheetsws.Visible = FalsktNästa wsVid fel GoTo 0'Kör mer kod här till exempel:ActiveSheet.Name = "Sheet1"Avsluta Sub

Om det skulle vara något fel i vår kod efter Vid fel Gå till 0 linje, skulle standardfelmeddelandet för Excel uppstå. I det här exemplet har vi redan ett blad som heter Sheet1 i ActiveWorkbook som koden ovanför Vid fel Gå till 0 döljer arket, men tar inte bort det. Standardfelmeddelandet i Excel som indikerar att bladnamnet redan har tagits visas sedan.

Vid fel Gå till Linje

Vi kan också tvinga vår kod att flytta till en annan kodrad genom att använda Vid fel Gå till Linje som säger åt VBA att gå till en specifik kodrad om ett fel uppstår.

123456789101112 Sub ErrorGoToLine ()Vid fel Återuppta nästaDim ws Som arbetsbladFör varje ws i ActiveWorkbook.Sheetsws.Visible = FalsktNästa wsVid fel GoTo errhandlerActiveSheet.Name = "Sheet1"Avsluta Subfelhandlare:MsgBox ("Det finns redan ett blad som heter sheet1!", VbCritical)Avsluta Sub

I exemplet ovan, när koden hittar arket “Sheet1”, flyttas den till kodraden under felhanteringsetiketten - i det här fallet anropar den en anpassad meddelanderuta som informerar användarna om att arket redan lämnar. Felhanteringsetiketten måste ha ett kolon efter den för att visa VBA att det är en etikett.

1 felhandlare:

Koden hoppar sedan ner till raden under etiketten och returnerar den anpassade meddelanderutan.

Detta är användbart när du inte vill att din användare ska kunna klicka på Debug för att gå in i din kod eftersom standard Excel -meddelande alltid ger ett alternativ för att felsöka koden.

Vi behöver också en Avsluta Sub i proceduren. Om det är INTE ett blad som heter Sheet1, då skulle den raden med kod köra och byta namn på det aktiva arket till Sheet1. Vi vill då att koden ska avslutas - vi vill inte att den ska fortsätta till felhanteraren och visa meddelanderutan. Exit Sub -raden avslutar sedan proceduren och stoppar koden.

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave