Hvis du prøver å få et godt grep om Excel VBA , kan du sannsynligvis ha nytte av noen få eksempler for å utvikle den visuelle grunnleggende dyktigheten. Her finner du noen få Excel VBA-eksempler slik at du kan få taket på denne hendelseshåndteringsvirksomheten.
Excel VBA-eksempel: Open-hendelsen for en arbeidsbok
En av de mest brukte Excel VBA-hendelsene er Workbook Open-hendelsen. Anta at du har en arbeidsbok du bruker hver dag. Workbook_Open-prosedyren i dette eksemplet utføres hver gang arbeidsboken åpnes. Prosedyren kontrollerer ukedagen; hvis det er fredag, viser koden en påminnelse for deg.
Følg disse trinnene for å lage Excel VBA-prosedyren som kjøres når Workbook Open-hendelsen oppstår:
Åpne Excel-arbeidsboken.
Enhver Excel-arbeidsbok vil gjøre det.
Trykk Alt+F11 for å aktivere VBE.
Finn arbeidsboken i prosjektvinduet.
Dobbeltklikk på prosjektnavnet for å vise elementene, om nødvendig.
Dobbeltklikk på ThisWorkbook-elementet.
VBE viser et tomt kodevindu for ThisWorkbook-objektet.
I kodevinduet velger du Arbeidsbok fra rullegardinlisten Objekt (venstre).
VBE legger inn begynnelses- og sluttsetningene for en Workbook_Open-prosedyre.
Skriv inn følgende utsagn, så den komplette hendelsesprosedyren ser slik ut:
Privat underarbeidsbok_Open()
Dim melding som streng
Hvis ukedag(nå) = 6 da
Msg = "I dag er det fredag. Ikke glem å "
Msg = Msg & "send inn TPS-rapporten!"
MsgBox Msg
Slutt om
End Sub
Kodevinduet skal se slik ut.
Denne hendelsesbehandlingsprosedyren utføres når arbeidsboken åpnes.
Workbook_Open kjøres automatisk når arbeidsboken åpnes. Den bruker VBAs WeekDay-funksjon for å bestemme ukedagen. Hvis det er fredag (dag 6), minner en meldingsboks brukeren på å sende inn en rapport. Hvis det ikke er fredag, skjer det ingenting.
Hvis i dag ikke er fredag, kan det være vanskelig å teste denne prosedyren. Du kan bare endre 6-en for å samsvare med dagens faktiske dagnummer.
Og selvfølgelig kan du endre denne prosedyren slik du vil. For eksempel viser følgende versjon en melding hver gang arbeidsboken åpnes. Dette blir irriterende etter en stund.
En Workbook_Open-prosedyre kan gjøre nesten hva som helst. Disse hendelsesbehandlerne brukes ofte til følgende:
- Vise velkomstmeldinger (som i Franks kule arbeidsbok)
- Åpne andre arbeidsbøker
- Aktivering av et bestemt regneark i arbeidsboken
- Sette opp egendefinerte snarveimenyer
Her er et siste Excel VBA-eksempel på en Workbook_Open-prosedyre som bruker funksjonene GetSetting og SaveSetting for å holde styr på hvor mange ganger arbeidsboken har blitt åpnet. SaveSetting-funksjonen skriver en verdi til Windows-registeret, og GetSetting-funksjonen henter denne verdien (se hjelpesystemet for detaljer). Følgende Excel VBA-eksempel henter tellingen fra registret, øker den og lagrer den deretter tilbake til registret. Den forteller også brukeren verdien av Cnt som tilsvarer antall ganger arbeidsboken har blitt åpnet.
Privat underarbeidsbok_Open()
Dim Cnt As Long
Cnt = GetSetting("MinApp", "Innstillinger", "Åpne", 0)
Cnt = Cnt + 1
Lagre Innstilling "MinApp", "Innstillinger", "Åpne", Cnt
MsgBox "Denne arbeidsboken har blitt åpnet " & Cnt & " ganger."
End Sub
Bruke en Workbook_Open hendelsesbehandler for å holde styr på hvor mange ganger en arbeidsbok har blitt åpnet.
Excel VBA-eksempel: BeforeClose-hendelsen for en arbeidsbok
Her er et eksempel på Excel VBA Workbook_BeforeClose hendelsesbehandlingsprosedyre, som utføres automatisk rett før arbeidsboken lukkes. Denne prosedyren er plassert i kodevinduet for et ThisWorkbook-objekt:
Privat underarbeidsbok_BeforeClose(Avbryt som boolsk)
Dim melding som streng
Dim Ans As Long
Dim F-navn som streng
Msg = "Vil du ta en sikkerhetskopi av denne filen?"
Ans = MsgBox(Msg, vbYesNo)
Hvis Ans = vbJa Da
FName = "F:\BACKUP\" & ThisWorkbook.Name
ThisWorkbook.SaveCopyAs FName
Slutt om
End Sub
Denne rutinen bruker en meldingsboks for å spørre brukeren om han vil ta en sikkerhetskopi av arbeidsboken. Hvis svaret er ja, bruker koden SaveCopyAs-metoden for å lagre en sikkerhetskopi av filen på stasjon F. Hvis du tilpasser denne prosedyren for eget bruk, må du endre stasjonen og banen.
Excel-programmerere bruker ofte en Workbook_BeforeClose-prosedyre for å rydde opp etter seg. For eksempel, hvis du bruker en Workbook_Open-prosedyre for å endre noen innstillinger når du åpner en arbeidsbok (for eksempel skjuler statuslinjen), er det bare hensiktsmessig at du returnerer innstillingene til den opprinnelige tilstanden når du lukker arbeidsboken. Du kan utføre denne elektroniske rengjøringen med en Workbook_BeforeClose-prosedyre.
Når du bruker Workbook_BeforeClose-hendelsen, husk dette: Hvis du lukker Excel og en åpen fil har blitt endret siden forrige lagring, viser Excel den vanlige meldingsboksen "Vil du lagre endringene dine". Ved å klikke på Avbryt-knappen avbrytes hele lukkingsprosessen. Men Workbook_BeforeClose-hendelsen vil ha blitt utført uansett.
Excel VBA-eksempel: BeforeSave-hendelsen for en arbeidsbok
FørSave-hendelsen, som navnet tilsier, utløses før en arbeidsbok lagres. Denne hendelsen oppstår når du velger Fil → Lagre eller Fil → Lagre som.
Følgende prosedyre, som er plassert i kode-vinduet for en Thisworkbook objekt, viser BeforeSave hendelsen. Rutinen oppdaterer verdien i en celle (celle A1 på Ark1) hver gang arbeidsboken lagres. Med andre ord fungerer celle A1 som en teller for å holde styr på antall ganger filen ble lagret.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI _
Som boolsk, avbryt som boolsk)
Dim teller som rekkevidde
Set Counter = Sheets("Sheet1"). Range("A1")
Counter. Value = Counter. Value + 1
End Sub
Legg merke til at Workbook_BeforeSave-prosedyren har to argumenter: SaveAsUI og Cancel. For å demonstrere hvordan disse argumentene fungerer, undersøk følgende makro, som kjøres før arbeidsboken lagres. Denne prosedyren prøver å hindre brukeren i å lagre arbeidsboken med et annet navn. Hvis brukeren velger Fil → Lagre som, er SaveAsUI-argumentet True.
Når koden kjøres, sjekker den SaveAsUI-verdien. Hvis denne variabelen er True, viser prosedyren en melding og setter Cancel til True, som avbryter Lagre-operasjonen.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI _
Som boolsk, avbryt som boolsk)
Hvis SaveAsUI Da
MsgBox "Du kan ikke lagre en kopi av denne arbeidsboken!"
Avbryt = Sant
Slutt om
End Sub
Vær oppmerksom på at denne prosedyren ikke vil hindre noen i å lagre en kopi med et annet navn. Hvis noen virkelig vil gjøre det, kan han eller hun bare åpne arbeidsboken med makroer deaktivert. Når makroer er deaktivert, deaktiveres også hendelsesbehandlerprosedyrer, noe som er fornuftig fordi de tross alt er makroer.