Over het algemeen zijn de gebeurtenissen niets anders dan het gebeuren van iets. In Excel is het hetzelfde. Maar soms willen we dat er automatisch iets gebeurt wanneer een bepaalde gebeurtenis plaatsvindt. Om iets te doen wanneer een specifieke gebeurtenis in Excel plaatsvindt, gebruiken we Excel VBA-gebeurtenis.
Excel VBA-gebeurtenishandlers: typen
Er zijn hoofdzakelijk 7 soorten gebeurtenishandlers in Excel VBA.
- Toepassingsgebeurtenissen
- Werkboekgebeurtenissen
- Werkblad Evenementen
- Kaartgebeurtenissen
- Gebeurtenissen in gebruikersformulier
- Toetscombinatie Gebeurtenissen (sneltoetsgebeurtenissen)
- Tijdige evenementen
Laten we ze een voor een onderzoeken.
Toepassingsgebeurtenissen in Excel
De gebeurtenissen op toepassingsniveau worden geactiveerd wanneer de toepassing (Excel) wordt gesloten, geopend, geactiveerd, beschermd, onbeschermd, enz.
Er zijn meer dan 50 soorten evenementen op applicatieniveau. We kunnen ze hier dus niet allemaal bespreken.
Reikwijdte van het toepassingsevenement:
Deze gebeurtenissen werken op alle werkmappen van Excel, zolang de code met de werkmap open is. Als u bijvoorbeeld een gebeurtenis op toepassingsniveau hebt gemaakt om u de bladnaam van het actieve blad te vertellen, wordt deze geactiveerd bij elke bladactivering van een werkmap.
Hoe maak je een Application Event-handler in VBA?
Het maken van de toepassingsgebeurtenis is een beetje lastig. Ik heb het hier in detail uitgelegd met een voorbeeld.
Werkmapgebeurtenissen in Excel
Reikwijdte van de werkmapgebeurtenis
De werkmapgebeurtenissen werken op de hele werkmap die de code bevat. De gebeurtenis kan werkmap openen, sluiten, activeren, deactiveren, bladwissel, enz.
Waar werkboekgebeurtenissen schrijven?
De werkmapgebeurtenissen worden op het werkmapobject geschreven.
Hoe schrijf je een Workbook-evenement?
Volg deze stappen:
1. Dubbelklik in de projectverkenner op het werkmapobject. Het codeschrijfgebied wordt weergegeven. Alle gebeurtenissen met een werkmapbereik worden hier geschreven.
2. Linksboven in het codeschrijfgebied ziet u een vervolgkeuzemenu. Klik op het vervolgkeuzemenu en kies de werkmap. Standaard is het algemeen.
3. Nadat u de werkmap hebt gekozen in de vervolgkeuzelijst aan de linkerkant, wordt standaard een workbook_open-gebeurtenissubroutine ingevoegd. Maar als u een andere gebeurtenissubroutine wilt gebruiken, kiest u deze in de vervolgkeuzelijst rechtsboven. Het toont alle beschikbare werkmapgebeurtenissen.
4. Kies het evenement dat je nodig hebt. Omwille van het voorbeeld kies ik de SheetActivate-gebeurtenis. Deze gebeurtenis wordt geactiveerd bij elke selectie van het blad in de code die de werkmap bevat.
Voorbeeld werkmapgebeurtenis:Dit is een eenvoudig voorbeeld. Ik wil alleen de naam tonen van het werkblad dat is geactiveerd. Daarvoor gebruik ik gewoon de SheetActivate Event in het Workbook-object.
Privé Sub Workbook_SheetActivate (ByVal Sh As Object) MsgBox Sh.Name & "Geactiveerd" End Sub
Wanneer nu een nieuw blad in deze werkmap wordt geactiveerd, wordt deze gebeurtenis geactiveerd. U wordt gevraagd met de massage, bladnaam geactiveerd.
Ik weet dat deze code niet zo handig is, maar je kunt elke set instructies tussen deze regels plaatsen. U kunt de functies en subroutines vanuit de modules zelf oproepen.
Werkbladgebeurtenissen in Excel
Alle bereik- en celgerichte gebeurtenissen worden in de werkbladgebeurtenissen geschreven. U kunt hier lezen over de werkbladgebeurtenissen.
De reikwijdte van de werkbladgebeurtenis
De werkbladgebeurtenissen zijn gericht op de bereiken en cellen van een specifiek werkblad. Een werkbladgebeurtenis wordt geactiveerd op gebeurtenissen die plaatsvinden op het specifieke werkblad (het werkblad dat de code bevat).
Waar zijn de werkbladgebeurtenissen geschreven?
De werkbladgebeurtenissen worden op het werkbladobject geschreven.
Hoe schrijf ik een gebeurtenisafhandelingscode voor een werkblad?
Het is hetzelfde als de werkmapgebeurtenissen.
1. Dubbelklik in de projectverkenner op het werkbladobject. Het codeschrijfgebied wordt weergegeven voor het werkblad. Alle gebeurtenissen met een werkbladbereik zijn in deze werkbladen geschreven.
2. Linksboven in het codeschrijfgebied ziet u een vervolgkeuzemenu. Klik op het vervolgkeuzemenu en kies het werkblad. Standaard is het algemeen.
3. Zodra u het werkblad uit de linker vervolgkeuzelijst kiest, wordt standaard een worksheet_selectionChange-gebeurtenissubroutine ingevoegd. Maar als u een andere gebeurtenissubroutine wilt gebruiken, kiest u deze in de vervolgkeuzelijst rechtsboven. Het toont alle beschikbare werkbladgebeurtenissen.
4. Kies het evenement dat je nodig hebt. Omwille van het voorbeeld kies ik de gebeurtenis Worksheet_SelectionChange (ByVal Target As Range). Deze gebeurtenis wordt geactiveerd bij elke wijziging van de selectie van een bereik op het blad.
Voorbeeld van werkbladgebeurtenis
Private Sub Worksheet_SelectionChange (ByVal Target As Range) MsgBox "U bevindt zich in " & Target.Address End Sub
De bovenstaande gebeurtenis is geschreven in blad1 van een werkmap. Deze gebeurtenis toont het bereikadres dat u hebt geselecteerd op het codeblad, telkens wanneer u de bereikselectie wijzigt. Hieronder staan nog enkele voorbeelden van werkbladgebeurtenissen.
De werkbladgebeurtenissen worden meestal gebruikt in dynamische dashboards. U kunt cellen gebruiken als selectievakjes of actieve selecties om uw dashboards dynamisch te maken.
Hieronder staan nog enkele voorbeelden van werkbladgebeurtenissen.
Werkbladwijzigingsgebeurtenis gebruiken om macro uit te voeren wanneer een wijziging is aangebracht
Voer macro uit als er een wijziging is aangebracht op het blad in het opgegeven bereik
Eenvoudigste VBA-code om huidige rij en kolom te markeren met behulp van
De grafiekgebeurtenissen
Er zijn twee soorten grafiekgebeurtenissen in Excel. Een daarvan is de normaal ingebedde grafieken die we hier in detail hebben besproken. Het lijkt veel op gebeurtenissen op applicatieniveau.
Een ander voorbeeld is het kaartblad. Dit zijn de speciale bladen die alleen de grafieken bevatten die zijn gekoppeld aan gegevens op sommige andere bladen.
Als het op evenementen aankomt, lijken ze veel op normale lakens.
Waar moet u grafiekengebeurtenissen schrijven?
De kaartgebeurtenissen worden in het kaartobject geschreven. Dubbelklik op het grafiekblad om het codegebied te openen.
Hoe kaartgebeurtenissen te schrijven?
Volg deze stappen:
1. Dubbelklik in de projectverkenner op het grafiekbladobject om het codegebied te openen. Alle specifieke gebeurtenissen met betrekking tot de kaartbladen worden hier beschreven.
2. In de rechterbovenhoek van het codegebied ziet u de gebruikelijke vervolgkeuzelijst. Selecteer de grafiek in die vervolgkeuzelijst.
3. Selecteer in de rechterhoek het gewenste evenement.
Als ik bijvoorbeeld iets wil doen zodra de gebruiker de grafiek selecteert, gebruik ik de gebeurtenis Chart_Activate.
Voorbeeld: Kaartbladgebeurtenis
Private Sub Chart_Activate() MsgBox "De kaart is vernieuwd" End Sub
Het bovenstaande stukje code wordt geactiveerd zodra u het kaartblad selecteert. Hier wordt alleen het bericht weergegeven dat de grafiek is vernieuwd, maar u kunt veel doen. Zoals u het gegevensbereik voor de grafiek dynamisch kunt selecteren voordat u dit bericht weergeeft.
Hieronder staan nog enkele voorbeelden van grafiekgebeurtenissen:
De UserForm-gebeurtenissen
De gebruikersformuliergebeurtenis is net als andere gebeurtenissen. Er zijn verschillende gebeurtenissen die plaatsvinden op het gebruikersformulier. U kunt die gebeurtenissen gebruiken om de gebeurtenissen te activeren.
Waar schrijf je de User Form-evenementen?
Om een gebruikersformuliergebeurtenis te schrijven, moet u eerst een gebruikersformulier invoegen.
1. Klik vervolgens met de rechtermuisknop op het gebruikersformulier en klik op de weergavecode. Nu wordt het codegebied geopend.
2. Selecteer nu in de vervolgkeuzelijst linksboven het gebruikersformulier.
3. Selecteer in de vervolgkeuzelijst links de gebeurtenis die u wilt gebruiken om de uitvoering van de code te activeren.
4. Schrijf de gewenste code tussen de code gebeurteniscode.
Het onderstaande voorbeeld toont eenvoudig het bericht wanneer een gebruikersformulier is geactiveerd.
Private Sub UserForm_Activate() MsgBox "Hallo, verifieer alstublieft uw gegevens." Einde sub
De bovenstaande code toont alleen een bericht, maar u kunt deze gebeurtenis gebruiken om het formulier vooraf in te vullen met enkele standaardinvoer of bladinformatie te gebruiken om het in te vullen.
Het Onkey-evenement
Deze gebeurtenissen worden geactiveerd wanneer een bepaalde toets of toetsencombinatie wordt ingedrukt. Het lijkt veel op het maken van de jouwe op snelkoppelingen.
De OnKey-gebeurtenis is eigenlijk een functie of methode van de klasse Application die twee argumenten heeft, zoals hieronder wordt weergegeven:
Applicatie.onkey Sleutel, ["procedure"]
De toets is de toets of toetsencombinatie die u als trigger wilt gebruiken.
"Procedure" is een optioneel argument dat een tekenreeksnaam is van de procedure of macro die u wilt activeren. Als u de procedure niet definieert, wordt de huidige procedure geactiveerd.
Waar schrijf je de Onkey Events?
Welnu, u kunt de Onkey-gebeurtenis op elke normale module schrijven. Ze werken in normale modules, maar eerst moet u die subroutine uitvoeren die de Onkey-instructies bevat. Het is niet alsof u de macro elke keer hebt uitgevoerd om de Onkey-gebeurtenissen te gebruiken. Slechts één keer hoeft u die macro uit te voeren wanneer u de werkmap opent.
Als u de macro die de Onkey-gebeurtenissen bevat niet wilt uitvoeren, kunt u deze in de workbook_open()-gebeurtenis in het werkmapobject plaatsen. Het maakt de Onkey-gebeurtenissen actief zodra u de werkmap opent die de Onkey-gebeurtenissen bevat.
Hoe schrijf je een Onkey Event-handler?
Dus, als je al een aantal macro's hebt die je wilt uitvoeren met een gespecificeerde snelkoppeling, schrijf dan een nieuwe procedure die de lijst met snelkoppelingen zal bevatten. Hier heb ik bijvoorbeeld een macro die het bericht laat zien dat de snelkoppeling werkt.
Sub show_msg() MsgBox "De snelkoppeling werkt" End Sub
Nu wil ik deze macro uitvoeren terwijl ik op de toetsencombinatie CTRL+j druk. Om dit te doen, schrijf ik de onderstaande VBA-code.
Sub Activate_Onkey() Application.OnKey "^j", "show_msg" End Sub
"^" (carate) is voor de CTRL-toets. Hieronder vindt u de tabel met alle belangrijke afkortingen in Excel VBA.
https://docs.microsoft.com/en-us/office/vba/api/excel.application.onkey
Hoe Onkey Event activeren?
Nadat u de bovenstaande code in een module hebt geschreven, werkt het niet als u naar de Excel-weergave gaat en de CTRL + J-toets gebruikt. Eerst moet u de sub uitvoeren die de OnKey-gebeurtenissen definieert. Dus voer een keer de Activate_Onkey() sub uit en dan werkt het voor de hele sessie. Zodra u de werkmap sluit die de Onkey-definities bevat, werkt deze niet meer.
U kunt de Onkey-definities binnen de procedure plaatsen die u wilt laten gebeuren. Maar dan moet u de macro eenmaal handmatig uitvoeren. Daarom stel ik voor om de Onkey-gebeurtenissen in de Workbook_Open-gebeurtenissen te plaatsen. Het zorgt ervoor dat alle Onkey-evenementen automatisch worden geactiveerd.
Het Ontime-evenement in Excel
Zoals de naam al doet vermoeden, activeert de Onkey-gebeurtenis de gespecificeerde subroutine op of na de vroegst gespecificeerde tijd die mogelijk is. Excel kan bezig zijn met een aantal andere taken, zoals het uitvoeren van de optelsom van instructies of in de modus Copy Past. In dat geval kan het de Ontime-gebeurtenis vertragen. Dat is de reden waarom het argument wordt weergegeven als de vroegste tijd.
Syntaxis van OnTime-gebeurtenis
De gebeurtenis Ontime is een functie van de klasse Application. Het heeft twee essentiële argumenten en twee optionele argumenten.
Application.Ontime EarlyTime, "Procedure", [LtestTime], [Schedule]
DeVroegste tijdis het tijdstip waarop u wilt dat uw procedure wordt uitgevoerd. Maar Excel voert de opgegeven macro uit na de gedefinieerde vroegste tijd, alleen als deze gratis is.
De "Procedure" is de naam van de procedure die u op het opgegeven tijdstip wilt uitvoeren.
Zoals ik al zei, is er geen garantie dat Excel uw procedure op het opgegeven tijdstip zal uitvoeren. De Laatste Tijdis de tijd na de vroegste tijd om Excel een venster te geven om vrij te zijn en uw taak uit te voeren.
Als u uw geplande OnTime-gebeurtenis wilt deactiveren, stelt u inschema te vals.
Waar schrijf je het Ontime Event?
De OnTime-gebeurtenis kan in elke module worden geschreven. U moet de gebeurtenis uitvoeren die de procedure bevat om de gebeurtenis te activeren.
Als u wilt dat uw gebeurtenis wordt geactiveerd zodra u de werkmap opent die de gebeurtenis bevat, plaatst u deze in de gebeurtenis workbook_open. Het activeert de gebeurtenis zodra u de code met de gebeurtenis in Excel opent.
Hoe schrijf je het Ontime Event?
Stel dat u een subroutine heeft die de huidige datum en tijd toont
Sub show_msg() MsgBox "De huidige datum en tijd is " & Einde nu Sub
Als u wilt dat deze procedure 5 seconden na het uitvoeren van een andere macro wordt uitgevoerd, moet u deze code invoeren.
Sub OnTimeTest() '--enkele andere taken Application.ontime Now + (5 / 24 / 60 / 60), "show_msg" End Sub
Nadat u de OnTimeTest-subroutine hebt uitgevoerd, wordt na vijf seconden de subroutine show_msg geactiveerd. Dus het is goed als je iets wilt doen na een paar keer iets anders te hebben gedaan, gebruik de bovenstaande structuur.
Als u wilt dat uw macro zichzelf na elke paar seconden/minuten/uren/etc. uitvoert, kunt u die functie zelf aanroepen. Het zou een soort recursieve subroutine zijn.
Sub OnTimeTest() MsgBox "De huidige datum en tijd is " & Now Application.ontime Now + (5 / 24 / 60 / 60), "OnTimeTest" End Sub
De bovenstaande subroutine wordt na elke vijf seconden uitgevoerd nadat u deze hebt gestart.
Dus ja jongens, dit zijn de gebeurtenissen in Excel VBA. Sommige van de bovenstaande categorieën hebben verschillende triggers voor gebeurtenissen. Ik kan ze hier natuurlijk niet allemaal uitleggen. Dat maakt een boek lang artikel. Dit was slechts een inleiding tot de gebeurtenissen die beschikbaar zijn in Excel VBA. Volg voor meer informatie de links die in de artikelen zijn ingesloten. Ik heb hieronder enkele gerelateerde artikelen genoemd. Je kunt ze ook lezen.
Als je twijfels hebt met betrekking tot dit artikel of een andere Excel / VBA-gedachte, vraag het ons dan in de comments hieronder.
De werkbladgebeurtenissen in Excel VBA|De werkbladgebeurtenis is erg handig als u wilt dat uw macro's worden uitgevoerd wanneer een opgegeven gebeurtenis op het werkblad plaatsvindt.
Werkmapgebeurtenissen met VBA in Microsoft Excel | De werkmapgebeurtenissen werken op de hele werkmap. Omdat alle bladen deel uitmaken van de werkmap, werken deze gebeurtenissen ook op hen.
Voorkom dat een automacro/eventmacro wordt uitgevoerd met VBA in Microsoft Excel | Gebruik de shift-toets om het uitvoeren van de macro auto_open te voorkomen.
Objectgebeurtenissen in kaart brengen met VBA in Microsoft Excel | De grafieken zijn complexe objecten en er zijn verschillende componenten die u eraan hebt gekoppeld. Om de Chart Events te maken gebruiken we de Class module.
Populaire artikels:
50 Excel-snelkoppelingen om uw productiviteit te verhogen | Word sneller in uw taak. Met deze 50 sneltoetsen werk je nog sneller in Excel.
De VERT.ZOEKEN-functie in Excel | Dit is een van de meest gebruikte en populaire functies van Excel die wordt gebruikt om waarde op te zoeken uit verschillende bereiken en bladen.
AANTAL.ALS in Excel 2016 | Tel waarden met voorwaarden met behulp van deze geweldige functie. U hoeft uw gegevens niet te filteren om een specifieke waarde te tellen. Countif-functie is essentieel om uw dashboard voor te bereiden.
Hoe de SUMIF-functie in Excel te gebruiken? | Dit is een andere essentiële functie van het dashboard. Dit helpt u bij het optellen van waarden voor specifieke voorwaarden.