Du kanske vill köra ditt makro-/VBA -kodavsnitt när en specifik arbetsbok väljs, Ett ark i arbetsboken väljs, cellen ändrar dess värde, när ett dubbelklick händer, när ett ark läggs till etc. I alla dessa fall använder vi Workbook Event Handler. Eventhanteraren hjälper oss att köra VBA -kod när en viss händelse inträffar.
I den här artikeln kommer vi att lära oss kort om varje Workbook Event Handler.
Vad är en Workbook Event Handler?
En arbetsbokshändelsehanterare är en delprogram som är lokal för en arbetsbok. Dessa koder fungerar bara på komponenterna i en arbetsbok. Det är själva arbetsboken, det är blad och intervall.
Var ska man skriva Workbook Event Handler Code?
Arbetsbokshändelserna skrivs endast i arbetsbokobjektet. Om du skriver en arbetsbokshändelse i någon normal modul kommer det inte att finnas något fel men de kommer bara inte att fungera.
För att skriva i arbetsbokobjektet. Dubbelklicka på den eller högerklicka och klicka på visningskoden. Kodskrivningsområdet visas.
Hur skriver man kod för en specifik händelse i arbetsboken?
Nu när du är i redigeringsläget, i rullgardinsmenyn i det övre vänstra hörnet, kommer du att se allmänt. Klicka på rullgardinsmenyn och välj arbetsboken. I rullgardinsmenyn längst upp till höger visas alla händelser. Välj det du behöver och en skelettkod för den händelsen kommer att skrivas åt dig.
Varje händelse har ett fast förfarandenamn. Det här är de reserverade underrutinnamnen som börjar med arbetsbok_. Du kan inte använda dem för andra underprogram
(du kan, men de kommer att vara normala underrutiner).
Viktig: Varje delprogram från listan körs på den angivna händelsen.
En typ av arbetsbokshändelseprocedur kan bara skrivas en gång i en arbetsbok. Om du skriver två samma händelsehanteringsprocedurer i en arbetsbok kommer det att resultera i ett fel och ingen av dem kommer att köras. Naturligtvis kommer felet att vara tvetydiga underrutiner.
Låt oss lära oss kort om var och en av händelserna.
1. De Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) Händelse
Denna händelse utlöses när vi gör ändringar i innehållande kalkylblad (formatering utesluts). Om du vill göra något om någon ändring görs i något blad kommer koden att vara:
Private Sub Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) 'gör något Msgbox "gjort något" Avsluta Sub
"Sh" är alltid det aktiva arket. "Målet" är alltid den aktiva cellen.
Ett annat exempel: Du kanske vill ange datum och tid i Cel, prl B1 om A1 ändras. I så fall använder vi händelsen workbook_sheetchange. Koden skulle se ut så här:
Private Sub Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$ A $ 1" Then Range ("B1"). Value2 = Format (Now (), "hh: mm: ss") End If Avsluta Sub
Detta riktar sig endast till cellen A1 på varje ark eftersom vi inte har specificerat "sh" -objektet.
2. De Workbook_Activate () Händelse
Denna händelse utlöses när händelsekoden som innehåller arbetsboken aktiveras. Skelettkoden för denna händelse är:
Private Sub Workbook_Activate () End Sub
Ett enkelt exempel visar arbetsbokens namn när det väljs.
Private Sub Workbook_Activate () MsgBox "You are on workbook" & Activeworkbook.Name Avsluta Sub
Så snart du kommer till arbetsboken som innehåller den här koden kommer händelsen att köras och ett meddelande kommer att visas "Du är på arbetsbokens namn" (blad 2 finns i mitt fall).
3. De Workbook_Open () Händelse
Detta är en av de mest ställda frågan om hur man kör ett makro så snart arbetsboken öppnas. Detta är svaret. Denna arbetsbokshändelse körs så snart arbetsboken öppnas. Till skillnad från Workbook_Activate () körs denna kod bara en gång, inte när den aktiveras varje gång.
Private Sub Workbook_Open () 'din kod' Avsluta Sub
Nedanstående exempel Workbook_Open -händelse kommer helt enkelt upp ett välkomstmeddelande när du öppnar koden som innehåller arbetsboken.
Private Sub Workbook_Open () MsgBox "Welcome to the Master File" End Sub
4. De Workbook_Deactivate () Händelse
Denna händelse utlöses när koden innehåller arbetsboken lämnas. Med andra ord, om du vill göra något, som att gömma blad eller något när du byter arbetsbok, använd den här VBA -händelsen. Syntaxen är:
Private Sub Workbook_Deactivate () 'din kod' Avsluta Sub
Nedanstående exempel Workbook_Deativate -händelse kommer helt enkelt att visa ett meddelande om att du har lämnat huvudarket när du lämnar det här bladet.
Private Sub Workbook_Deactivate () MsgBox "Du lämnade huvudarket" Avsluta sub
5. De Workbook_BeforeClose () Händelse
Den här händelsen utlöses när du bekräftar borttagningen av VBA -händelsearket. Syntaxen är enkel:
Private Sub Workbook_BeforeClose (Cancel as Boolean) Avsluta Sub
Avbryt kan ställas in på sant om du vill hålla arbetsboken öppen.
Koden nedan frågar dig om du vill spara innehållet i arbetsboken om att stänga.
Private Sub Workbook_BeforeClose (Cancel as Boolean) ans = MsgBox ("Vill du spara innehållet i denna arbetsbok?", VbYesNo) If ans = True Then thisworkbook.save End If End Sub
6. De Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) Händelse
Denna händelse utlöses när arbetsboken sparas. Syntaxen är enkel:
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) Avsluta Sub
SaveAsUI är satt True om det finns en ändring i arbetsboken (inte i VBA).
Avbryt kan ställas in på sant om du vill hålla arbetsboken osparad.
Koden nedan frågar dig om du vill spara innehållet i arbetsboken som ska sparas.
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel as Boolean) ans = MsgBox ("Vill du verkligen spara innehållet i denna arbetsbok?", VbYesNo) If ans = False Then Cancel = True End If End Sub
7. De Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) Händelse
Denna händelse utlöses när arbetsboken sparas. Syntaxen är enkel:
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) Avsluta Sub
SaveAsUI är satt True om det finns en ändring i arbetsboken (inte i VBA).
Avbryt kan ställas in på sant om du vill hålla arbetsboken osparad.
Koden nedan frågar dig om du vill spara innehållet i arbetsboken som ska sparas.
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel as Boolean) ans = MsgBox ("Vill du verkligen spara innehållet i denna arbetsbok?", VbYesNo) If ans = False Then Cancel = True End If End Sub
8. De Workbook_NewSheet (ByVal Sh As Object) Händelse
Den här händelsen aktiveras när du lägger till ett nytt blad i arbetsboken. Syntaxen är enkel:
Private Sub Workbook_NewSheet (ByVal Sh As Object) End Sub
Sh är arkobjektet. Typen är faktiskt ett kärnobjekt så att om vi lägger till ett diagramark, ett makroark eller ett dialogblad fungerar händelsen fortfarande.
Koden nedan lägger till och visar namnet på det ark som har lagts till nyligen.
Private Sub Workbook_NewSheet (ByVal Sh As Object) MsgBox "Du har lagt till ett nytt blad." & Sh.Name Avsluta sub
Det är många fler händelser i arbetsbokobjektet. Vi kan inte diskutera dem alla här. Om du vill veta om en specifik händelse, fråga i kommentarfältet nedan. Jag hoppas att jag kunde förklara grunderna i arbetsbokhändelserna i den här artikeln. Låt mig veta om det hjälpte dig i kommentarfältet nedan.
Relaterade artiklar:
Använda ändringshändelse för kalkylblad för att köra makro när någon ändring görs | Så för att köra ditt makro när arket uppdateras använder vi Arbetsbladshändelser i VBA.
Kör makro om någon ändring görs på blad i specificerat intervall | Använd den här VBA -koden för att köra din makrokod när värdet i ett visst område ändras. Den upptäcker alla ändringar som gjorts i det angivna intervallet och avfyrar händelsen.
Enklaste VBA -kod för att markera aktuell rad och kolumn med | Använd det här lilla VBA -utdraget för att markera den aktuella raden och kolumnen i arket.
Populära artiklar:
50 Excel -genvägar för att öka din produktivitet | Bli snabbare på din uppgift. Dessa 50 genvägar gör ditt arbete ännu snabbare i Excel.
VLOOKUP -funktionen i Excel | Detta är en av de mest använda och populära Excel -funktionerna som används för att leta upp värde från olika intervall och ark.
COUNTIF i Excel 2016 | Räkna värden med förhållanden med denna fantastiska funktion. Du behöver inte filtrera dina data för att räkna specifikt värde. Countif -funktionen är avgörande för att förbereda din instrumentpanel.
Hur man använder SUMIF -funktionen i Excel | Detta är en annan viktig instrumentpanel. Detta hjälper dig att summera värden på specifika förhållanden.