Om du försöker få ett bra grepp om Excel VBA , kan du förmodligen dra nytta av några exempel för att utveckla den visuella grundläggande skickligheten. Här hittar du några Excel VBA-exempel så att du kan få kläm på denna evenemangshanteringsverksamhet.
Excel VBA-exempel: Open-händelsen för en arbetsbok
En av de mest använda Excel VBA-händelserna är Workbook Open-händelsen. Anta att du har en arbetsbok som du använder varje dag. Proceduren Workbook_Open i det här exemplet körs varje gång arbetsboken öppnas. Proceduren kontrollerar veckodagen; om det är fredag visar koden ett påminnelsemeddelande för dig.
För att skapa Excel VBA-proceduren som körs närhelst Workbook Open-händelsen inträffar, följ dessa steg:
Öppna Excel-arbetsboken.
Vilken Excel-arbetsbok som helst duger.
Tryck på Alt+F11 för att aktivera VBE.
Leta reda på arbetsboken i projektfönstret.
Dubbelklicka på projektnamnet för att visa dess objekt, om det behövs.
Dubbelklicka på objektet ThisWorkbook.
VBE visar ett tomt kodfönster för ThisWorkbook-objektet.
I fönstret Kod väljer du Arbetsbok från rullgardinsmenyn Objekt (vänster).
VBE anger start- och slutsatserna för en Workbook_Open-procedur.
Skriv in följande påståenden så att hela händelseproceduren ser ut så här:
Privat underarbetsbok_Öppen()
Dim Msg As String
Om veckodag(nu) = 6 Då
Msg = "Idag är det fredag. Glöm inte att "
Msg = Msg & "skicka in TPS-rapporten!"
MsgBox Medd
Avsluta om
Avsluta Sub
Kodfönstret ska se ut så här.

Denna händelsehanterare procedur exekveras när arbetsboken öppnas.
Workbook_Open körs automatiskt när arbetsboken öppnas. Den använder VBA:s WeekDay-funktion för att bestämma veckodagen. Om det är fredag (dag 6) påminner en meddelanderuta användaren om att skicka en rapport. Om det inte är fredag händer ingenting.
Om idag inte är fredag kan du ha svårt att testa denna procedur. Du kan bara ändra 6:an så att den motsvarar dagens faktiska dagnummer.
Och naturligtvis kan du ändra denna procedur som du vill. Till exempel visar följande version ett meddelande varje gång arbetsboken öppnas. Detta blir irriterande efter ett tag.
En Workbook_Open-procedur kan göra nästan vad som helst. Dessa händelsehanterare används ofta för följande:
- Visa välkomstmeddelanden (som i Franks coola arbetsbok)
- Öppna andra arbetsböcker
- Aktivera ett visst kalkylblad i arbetsboken
- Konfigurera anpassade genvägsmenyer
Här är ett sista Excel VBA-exempel på en Workbook_Open-procedur som använder funktionerna GetSetting och SaveSetting för att hålla reda på hur många gånger arbetsboken har öppnats. SaveSetting-funktionen skriver ett värde till Windows-registret och GetSetting-funktionen hämtar det värdet (se hjälpsystemet för detaljer). Följande Excel VBA-exempel hämtar antalet från registret, ökar det och sparar det sedan tillbaka till registret. Det talar också om för användaren värdet på Cnt som motsvarar antalet gånger arbetsboken har öppnats.
Privat underarbetsbok_Öppen()
Dim Cnt As Long
Cnt = GetSetting("MyApp", "Settings", "Open", 0)
Cnt = Cnt + 1
SaveSetting "MyApp", "Settings", "Open", Cnt
MsgBox "Denna arbetsbok har öppnats " & Cnt & " gånger."
Avsluta Sub

Använda en Workbook_Open-händelsehanterare för att hålla reda på hur många gånger en arbetsbok har öppnats.
Excel VBA-exempel: Händelsen BeforeClose för en arbetsbok
Här är ett exempel på Excel VBA Workbook_BeforeClose händelsehanterare-proceduren, som exekveras automatiskt omedelbart innan arbetsboken stängs. Denna procedur finns i kodfönstret för ett ThisWorkbook-objekt:
Privat underarbetsbok_BeforeClose(Avbryt som boolesk)
Dim Msg As String
Dim Ans As Long
Dim FName As String
Msg = "Vill du göra en säkerhetskopia av den här filen?"
Ans = MsgBox(Msg, vbYesNo)
Om Ans = vbYes Då
FName = "F:\BACKUP\" & ThisWorkbook.Name
ThisWorkbook.SaveCopyAs FName
Avsluta om
Avsluta Sub
Denna rutin använder en meddelanderuta för att fråga användaren om han vill göra en säkerhetskopia av arbetsboken. Om svaret är ja, använder koden SaveCopyAs-metoden för att spara en säkerhetskopia av filen på enhet F. Om du anpassar denna procedur för eget bruk måste du ändra enheten och sökvägen.
Excel-programmerare använder ofta en Workbook_BeforeClose-procedur för att städa efter sig. Om du till exempel använder en Workbook_Open-procedur för att ändra vissa inställningar när du öppnar en arbetsbok (till exempel gömmer statusfältet), är det bara lämpligt att du återställer inställningarna till deras ursprungliga tillstånd när du stänger arbetsboken. Du kan utföra denna elektroniska hushållning med en Workbook_BeforeClose-procedur.
När du använder händelsen Workbook_BeforeClose, tänk på detta: Om du stänger Excel och någon öppen fil har ändrats sedan den senaste lagringen visar Excel sin vanliga meddelanderuta "Vill du spara dina ändringar". Genom att klicka på knappen Avbryt avbryts hela stängningsprocessen. Men händelsen Workbook_BeforeClose kommer att ha körts ändå.
Excel VBA-exempel: BeforeSave-händelsen för en arbetsbok
Händelsen BeforeSave, som namnet antyder, utlöses innan en arbetsbok sparas. Denna händelse inträffar när du väljer Arkiv → Spara eller Arkiv → Spara som.
Följande procedur, som är placerad i den kod fönster för en ThisWorkbook objekt, demonstrerar BeforeSave händelsen. Rutinen uppdaterar värdet i en cell (cell A1 på Ark1) varje gång arbetsboken sparas. Med andra ord fungerar cell A1 som en räknare för att hålla reda på hur många gånger filen har sparats.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI _
Som boolesk, avbryt som boolesk)
Dim räknare som räckvidd
Set Counter = Sheets("Sheet1"). Range("A1")
Counter.Value = Counter.Value + 1
Avsluta Sub
Observera att Workbook_BeforeSave-proceduren har två argument: SaveAsUI och Cancel. För att visa hur dessa argument fungerar, undersök följande makro, som körs innan arbetsboken sparas. Den här proceduren försöker hindra användaren från att spara arbetsboken med ett annat namn. Om användaren väljer Arkiv → Spara som är argumentet SaveAsUI True.
När koden körs kontrollerar den SaveAsUI-värdet. Om denna variabel är True, visar proceduren ett meddelande och ställer in Cancel till True, vilket avbryter Save-operationen.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI _
Som boolesk, avbryt som boolesk)
Om SaveAsUI Då
MsgBox "Du kan inte spara en kopia av denna arbetsbok!"
Avbryt = Sant
Avsluta om
Avsluta Sub
Observera att den här proceduren inte kommer att hindra någon från att spara en kopia med ett annat namn. Om någon verkligen vill göra det kan han eller hon bara öppna arbetsboken med makron inaktiverade. När makron är inaktiverade inaktiveras även procedurer för händelsehanterare, vilket är vettigt eftersom de trots allt är makron.