I allmänhet är händelserna ingenting annat än händer något. Det är samma sak i excel. Men ibland vill vi att något ska hända automatiskt när en viss händelse inträffar. För att göra något när en specifik händelse händer i Excel använder vi Excel VBA -händelse.
Excel VBA -händelsehanterare: Typer
Det finns huvudsakligen 7 typer av händelsehanterare i Excel VBA.
- Applikationshändelser
- Arbetsboksevenemang
- Arbetsbladshändelser
- Diagramhändelser
- Användarformulärshändelser
- Tangentkombination Händelser (genvägstangenter)
- Händelser i tid
Låt oss utforska dem en efter en.
Programhändelser i Excel
Händelser på applikationsnivå utlöses när applikationen (Excel) stängs, öppnas, aktiveras, skyddas, oskyddad, etc.
Det finns mer än 50 typer av händelser på applikationsnivå. Så vi kan inte diskutera dem alla här.
Applikationshändelsens omfattning:
Dessa händelser fungerar på alla arbetsböcker i excel, så länge koden som innehåller arbetsboken är öppen. Om du till exempel har skapat en händelse på applikationsnivå för att berätta för det aktiva bladets bladnamn, kommer det att aktiveras vid varje arkaktivering av en arbetsbok.
Hur skapar jag en programhändelsehanterare i VBA?
Det är lite knepigt att skapa programhändelser. Jag har förklarat det här i detalj med exempel.
Arbetsbokhändelser i Excel
Arbetshändelsens omfattning
Arbetsbokshändelserna fungerar på hela arbetsboken som innehåller koden. Händelsen kan arbetsbok öppna, stänga, aktivera, inaktivera, ändra ark, etc.
Var ska man skriva arbetsbokshändelser?
Arbetsbokshändelserna skrivs på arbetsbokobjektet.
Hur skriver man en arbetsbokshändelse?
Följ dessa steg:
1. I projektutforskaren dubbelklickar du på arbetsbokobjektet. Kodskrivningsområdet visas. Alla arbetsbokens omfattande händelser skrivs här.
2. Överst till vänster i kodskrivningsområdet ser du en rullgardinsmeny. Klicka på rullgardinsmenyn och välj arbetsboken. Som standard är det generellt.
3. När du väl valt arbetsboken från den vänstra rullgardinsmenyn kommer den som standard att infoga en arbetsrutin_öppnad händelserubrutin. Men om du vill använda en annan händelsubrutin, välj den från rullgardinsmenyn högst upp till höger. Det kommer att lista alla tillgängliga arbetsbokshändelser.
4. Välj den händelse du behöver. För exemplets skull väljer jag händelsen SheetActivate. Denna händelse aktiveras på varje val av arket i koden som innehåller arbetsboken.
Exempel på arbetsbokshändelse:Detta är ett enkelt exempel. Jag vill bara visa namnet på det kalkylblad som är aktiverat. För det använder jag helt enkelt SheetActivate -händelsen i arbetsboksobjektet.
Privat del Workbook_SheetActivate (ByVal Sh As Object) MsgBox Sh.Name & "Activated" End Sub
Nu, när ett nytt blad i den här arbetsboken kommer att aktiveras, kommer den här händelsen att avfyras. Du kommer att bli ombedd med massagen, bladnamnet aktiverat.
Jag vet att den här koden inte är så användbar, men du kan lägga in en uppsättning instruktioner mellan dessa rader. Du kan anropa funktionerna och delrutinerna från själva modulerna.
Arbetsbladshändelser i Excel
Alla intervall och cellinriktade händelser skrivs i kalkylbladshändelserna. Du kan läsa om arbetsbladshändelserna här.
Omfattningen av kalkylbladshändelsen
Arbetsbladshändelserna är inriktade på områden och celler i ett specifikt kalkylblad. En kalkylhändelse aktiveras händelser som händer på det specifika kalkylbladet (kalkylbladet som innehåller koden).
Var skrivs arbetsbladshändelserna?
Arbetsbladshändelserna skrivs på kalkylbladobjektet.
Hur skriver jag en hanteringskod för kalkylblad?
Det är samma sak som arbetsbokshändelserna.
1. I projektutforskaren dubbelklickar du på kalkylbladets objekt. Kodskrivningsområdet visas för kalkylbladet. Alla händelser som omfattas av kalkylbladet är skrivna i dessa kalkylblad.
2. Överst till vänster i kodskrivningsområdet ser du en rullgardinsmeny. Klicka på rullgardinsmenyn och välj kalkylbladet. Som standard är det generellt.
3. När du väl har valt kalkylbladet från den vänstra rullgardinsmenyn kommer det som standard att infoga en arbetsrutan_selectionChange-händelserutrutan. Men om du vill använda en annan händelsubrutin, välj den från rullgardinsmenyn högst upp till höger. Det kommer att lista alla tillgängliga kalkylbladshändelser.
4. Välj den händelse du behöver. För exemplets skull väljer jag händelsen Worksheet_SelectionChange (ByVal Target As Range). Denna händelse aktiveras vid varje ändring av valet av ett område på arket.
Exempel på arbetsbladshändelse
Private Sub Worksheet_SelectionChange (ByVal Target As Range) MsgBox "You are in" & Target.Address End Sub
Händelsen ovan är skriven i blad 1 i en arbetsbok. Denna händelse visar intervalladressen, som du har valt på koden som innehåller blad, när du ändrar områdesvalet. Nedan finns några fler exempel på kalkylbladshändelser.
Arbetsbladshändelserna används mestadels i dynamiska instrumentpaneler. Du kan använda celler som kryssrutor eller aktiva markeringar för att göra dina instrumentpaneler dynamiska.
Nedan finns några fler exempel på kalkylbladshändelser.
Använda ändringshändelse för kalkylblad för att köra makro när någon ändring görs
Kör makro om någon ändring görs på blad i specificerat intervall
Enklaste VBA -kod för att markera aktuell rad och kolumn med
Diagramhändelserna
Det finns två typer av diagramhändelser i Excel. En är de normalt inbäddade diagrammen som vi har diskuterat här i detalj. Det är ungefär som händelser på applikationsnivå.
En annan är diagramarket. Det här är specialblad som endast innehåller diagram som är anslutna till data på vissa andra blad.
När det gäller händelser är de ungefär som vanliga blad.
Var ska man skriva diagramhändelser?
Diagramhändelserna skrivs i diagramobjektet. Dubbelklicka bara på diagramarket för att öppna kodområdet.
Hur skriver man diagramhändelser?
Följ dessa steg:
1. I projektutforskaren dubbelklickar du på diagramarkobjektet för att öppna kodområdet. Alla specifika diagrambladrelaterade händelser skrivs här.
2. I det övre högra hörnet av kodområdet ser du den vanliga listrutan. Välj diagrammet från den rullgardinsmenyn.
3. Välj den händelse du vill ha i det högra hörnet.
Till exempel, om jag vill göra något så snart användaren väljer diagrammet, kommer jag att använda Chart_Activate -händelsen.
Exempel: diagramarkhändelse
Private Sub Chart_Activate () MsgBox "Diagrammet uppdateras" Slut Sub
Ovanstående kod kommer att aktiveras så snart du väljer diagramarket. Här kommer det bara att visa meddelandet att diagrammet uppdateras men du kan göra mycket. Som om du dynamiskt kan välja dataintervall för diagrammet innan du visar det här meddelandet.
Nedan följer några fler exempel på diagramhändelser:
UserForm -händelserna
Användarformhändelsen är precis som andra händelser. Det finns flera händelser som uppstår på användarformuläret. Du kan använda dessa händelser för att utlösa händelserna.
Var skriver man användarformulärshändelserna?
För att skriva en användarformhändelse måste du först infoga en UserForm.
1. Högerklicka sedan på UserForm och klicka på visningskoden. Nu öppnas kodområdet.
2. Välj nu användarformuläret längst upp till vänster.
3. Välj den händelse du vill använda för att utföra kodkörningen från den vänstra listrutan.
4. Skriv koden du vill ha mellan koden händelsekod.
Nedanstående exempel visar helt enkelt meddelandet när ett användarformulär aktiveras.
Private Sub UserForm_Activate () MsgBox "Hej, vänligen verifiera din information." Avsluta Sub
Koden ovan visar bara ett meddelande, men du kan använda den här händelsen för att i förväg fylla i formuläret med några standardinmatningar eller använda bladinformation för att fylla det.
Onkey -evenemanget
Dessa händelser utlöses när en viss knapp eller tangentkombination trycks in. Det är ungefär som att skapa dina på genvägar.
OnKey -händelsen är faktiskt en funktion eller metod för applikationsklass som har två argument som visas nedan:
Application.onkey Nyckel, ["procedur"]
De nyckel- är nyckeln eller tangentkombinationen som du vill använda som utlösare.
"Procedur" är ett valfritt argument som är ett strängnamn på proceduren eller makrot som du vill avfyra. Om du inte definierar proceduren avfyras den nuvarande proceduren.
Var skriver man Onkey -händelserna?
Tja, du kan skriva Onkey -händelsen på vilken normal modul som helst. De fungerar i vanliga moduler men först kommer du att behövas för att köra den underrutinen som innehåller Onkey Instructions. Det är inte så att du har kört makrot varje gång för att använda Onkey -händelserna. Endast en gång kommer du att behöva köra det makrot när du öppnar arbetsboken.
Om du inte vill köra makrot som innehåller Onkey -händelserna kan du lägga in dem i händelsen workbook_open () i arbetsbokobjektet. Det gör Onkey -händelserna aktiva så snart du öppnar arbetsboken som innehåller Onkey -händelserna.
Hur skriver jag en Onkey Event -hanterare?
Så om du redan har några makron som du vill köra med en angiven genväg, skriv sedan en ny procedur som innehåller listan över genvägar. Till exempel här har jag ett makro som visar meddelandet genvägen fungerar.
Sub show_msg () MsgBox "Genvägen fungerar" Avsluta sub
Nu vill jag köra detta makro när jag trycker på tangentkombinationen CTRL+j. För att göra det skriver jag nedanstående VBA -kod.
Sub Activate_Onkey () Application.OnKey "^j", "show_msg" End Sub
"^" (carate) är för CTRL-tangenten. Nedan är tabellen för alla nyckelförkortningar i excel VBA.
https://docs.microsoft.com/en-us/office/vba/api/excel.application.onkey
Hur aktiverar man nyckelhändelse?
Efter att ha skrivit ovanstående kod i en modul, om du går på excelvyn och använder CTRL+J -tangenten, fungerar det inte. Först måste du köra suben som definierar OnKey -händelserna. Så kör en gång Activate_Onkey () -undern och sedan fungerar det under hela sessionen. När du stänger arbetsboken som innehåller Onkey -definitionerna slutar den att fungera.
Du kan placera Onkey -definitionerna inom proceduren som du vill ska hända. Men då måste du köra makrot en gång manuellt. Det är därför jag föreslår att du lägger till Onkey -händelserna i Workbook_Open -händelserna. Alla Onkey -händelser aktiveras automatiskt.
Ontime -evenemanget i Excel
Som namnet antyder utlöser Onkey -händelsen den angivna underrutinen på eller efter den tidigaste angivna tiden. Excel kan vara upptagen i vissa andra uppgifter som att exekvera summan av instruktioner eller att vara i tidigare kopierat läge. I så fall kan det fördröja Ontime -evenemanget. Det är därför argumentet visas som den tidigaste tiden.
Syntax för OnTime Event
Ontime -händelsen är en funktion av applikationsklassen. Den har två väsentliga argument och två valfria argument.
Application.Ontime EarliestTime, "Procedure", [LatestTime], [Schedule]
DeTidigaste tidär den tid då du vill att proceduren ska köras. Men Excel kommer att köra det angivna makrot efter den definierade tidigaste tiden, bara när det är gratis.
De "Procedur" är namnet på proceduren som du vill köra vid den angivna tiden.
Som jag sa att det inte finns någon garanti excel kommer att köra din procedur vid den angivna tiden. De LastestTimeär tiden efter den tidigaste tiden för att ge Excel ett fönster för att vara ledig och utföra din uppgift.
Om du vill inaktivera din schemalagda OnTime -händelse, ställ inschema till falsk.
Var skriver man Ontime -evenemanget?
OnTime -händelsen kan skrivas i valfri modul. Du måste köra händelsen som innehåller proceduren för att aktivera händelsen.
Om du vill att ditt evenemang ska aktiveras så snart du öppnar arbetsboken som innehåller händelsen, lägg det i händelsen workbook_open. Det kommer att aktivera händelsen så snart du öppnar koden som innehåller händelsen i excel.
Hur skriver man Ontime -evenemanget?
Låt oss säga att du har en subrutin som visar aktuellt datum och tid
Sub show_msg () MsgBox "Det aktuella datumet och tiden är" & Nu slut Sub
Nu om du vill att denna procedur ska köras på efter 5 sekunder efter ett annat makros körning måste du ange den här koden.
Sub OnTimeTest () '-några andra uppgifter Application.ontime Now + (5 /24 /60 /60), "show_msg" End Sub
När du väl har kört OnTimeTest -underrutinen, kommer det att utlösa show_msg -subrutinen efter fem sekunder efter dess körning. Så det kommer att vara bra om du vill göra något efter några gånger med att göra något annat, använd ovanstående struktur.
Om du vill att ditt makro ska köra sig själv efter några sekunder/minuter/timmar/etc kan du kalla den funktionen själv. Det skulle vara ett slags rekursiv underrutin.
Sub OnTimeTest () MsgBox "Det aktuella datumet och tiden är" & Now Application.ontime Now + (5 /24 /60 /60), "OnTimeTest" End Sub
Ovanstående rutin körs efter varje fem sekund när du startar den.
Så ja killar, det här är händelserna i Excel VBA. Några av de ovanstående kategorierna har en mängd olika händelseutlösare. Naturligtvis kan jag inte förklara dem alla här. Det kommer att göra en bok lång artikel. Detta var bara en introduktion till de evenemang som finns tillgängliga i Excel VBA. För mer information, följ länkarna inbäddade i artiklarna. Jag har nämnt några relaterade artiklar nedan. Du kan också läsa dem.
Om du har några tvivel relaterade till denna artikel eller någon annan excel/VBA -tanke, fråga oss i kommentarfältet nedan.
Arbetsbladshändelser i Excel VBA| Arbetsbladshändelsen är verkligen användbar när du vill att dina makron ska köras när en viss händelse inträffar på arket.
Arbetsbokshändelser med VBA i Microsoft Excel | Arbetsbokhändelserna fungerar på hela arbetsboken. Eftersom alla blad är en del av arbetsboken fungerar dessa händelser också på dem.
Förhindra att en automacro/eventmacro körs med VBA i Microsoft Excel | För att förhindra körning av auto_open -makro, använd shift -tangenten.
Kartlägg objekthändelser med VBA i Microsoft Excel | Diagrammen är komplexa objekt och det finns flera komponenter som du bifogade dem. För att göra diagramhändelserna använder vi klassmodulen.
Populära artiklar:
50 Excel -genvägar för att öka din produktivitet | Bli snabbare på din uppgift. Dessa 50 genvägar får dig att arbeta ännu snabbare med 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.