Misschien wilt u uw macro-/VBA-fragment uitvoeren wanneer een specifieke werkmap is geselecteerd, een blad in de werkmap is geselecteerd, de waarde van een cel verandert, wanneer dubbelklikt, wanneer een blad wordt toegevoegd, enz. In al deze gevallen gebruiken we Werkboek Event Handler. De Event Handler helpt ons VBA-code uit te voeren wanneer een bepaalde gebeurtenis plaatsvindt.
In dit artikel zullen we kort leren over elke Workbook Event Handler.
Wat is een Workbook Event Handler?
Een werkmap-event-handler is een subroutine die lokaal is voor een werkmap. Deze code werkt alleen op de onderdelen van een werkmap. Dat is de werkmap zelf, het zijn bladen en bereiken.
Waar schrijf je Workbook Event Handler-code?
De werkmapgebeurtenissen worden alleen in het werkmapobject geschreven. Als u een werkmapgebeurtenis schrijft in een normale module, zal er geen fout optreden, maar ze zullen gewoon niet werken.
Om in het werkmapobject te schrijven. Dubbelklik erop of klik met de rechtermuisknop en klik op de weergavecode. Het codeschrijfgebied wordt weergegeven.
Hoe schrijf je code voor een specifieke gebeurtenis in de werkmap?
Wanneer u zich nu in de bewerkingsmodus bevindt, ziet u in het vervolgkeuzemenu in de linkerbovenhoek algemeen. Klik op de vervolgkeuzelijst en selecteer de werkmap. In de vervolgkeuzelijst rechtsboven worden alle evenementen weergegeven. Kies wat je nodig hebt en er wordt een skeletcode voor dat evenement voor je geschreven.
Elke gebeurtenis heeft een vaste procedurenaam. Dit zijn de gereserveerde namen van subroutines die beginnen met workbook_. Je kunt ze niet gebruiken voor andere subroutines
(dat kan, maar het zullen normale subroutines zijn).
Belangrijk: Elke subroutine uit die lijst wordt uitgevoerd op de opgegeven gebeurtenis.
Eén type werkmapgebeurtenisprocedure kan slechts één keer in één werkmap worden geschreven. Als u twee dezelfde procedures voor het afhandelen van gebeurtenissen in één werkmap schrijft, resulteert dit in een fout en wordt geen van beide uitgevoerd. Natuurlijk zal de fout dubbelzinnige subroutines zijn.
Laten we kort iets over elk van de gebeurtenissen te weten komen.
1. De Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) Evenement
Deze gebeurtenis wordt geactiveerd wanneer we wijzigingen aanbrengen in het bevatten van werkbladen (opmaak uitgesloten). Als u iets wilt doen als er een wijziging in een blad is aangebracht, is de code:
Private Sub Workbook_SheetChange (ByVal Sh As Object, ByVal Target As Range) 'doe iets Msgbox "iets gedaan" End Sub
De "Sh" is altijd het actieve blad. Het "Doel" is altijd de actieve cel.
Een ander voorbeeld: Misschien wilt u datum en tijd in Cel,prl B1 zetten als A1 verandert. In dat geval gebruiken we de workbook_sheetchange-gebeurtenis. De code zou er als volgt uitzien:
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 Einde sub
Dit zal alleen de cel A1 op elk blad targeten, omdat we het "sh" -object niet hebben gespecificeerd.
2. De Werkmap_Activeren() Evenement
Deze gebeurtenis wordt geactiveerd wanneer de gebeurteniscode die de werkmap bevat, wordt geactiveerd. De skeletcode voor dit evenement is:
Private Sub Workbook_Activate() End Sub
Een eenvoudig voorbeeld is het tonen van de naam van de werkmap wanneer deze wordt geselecteerd.
Private Sub Workbook_Activate() MsgBox "U bevindt zich in de werkmap" & Activeworkbook.Name End Sub
Zodra u in de werkmap komt die deze code bevat, wordt de gebeurtenis uitgevoerd en wordt een bericht weergegeven met de melding "U bevindt zich op de naam van de werkmap" (blad2 is in mijn geval).
3. De Werkmap_Open() Evenement
Dit is een van de meest gestelde vragen over het uitvoeren van een macro zodra de werkmap wordt geopend. Dit is het antwoord. Deze werkmapgebeurtenis wordt uitgevoerd zodra de werkmap wordt geopend. In tegenstelling tot Workbook_Activate() wordt deze code slechts één keer uitgevoerd, niet elke keer dat deze wordt geactiveerd.
Private Sub Workbook_Open() 'uw code' End Sub
Het onderstaande voorbeeld Workbook_Open-gebeurtenis zal eenvoudig een welkomstbericht weergeven wanneer u de code met de werkmap opent.
Private Sub Workbook_Open() MsgBox "Welkom bij het hoofdbestand" End Sub
4. De Werkmap_Deactivate() Evenement
Deze gebeurtenis wordt geactiveerd bij het verlaten van de code met de werkmap. Met andere woorden, als je iets wilt doen, zoals het verbergen van bladen of iets anders wanneer je van werkmap wisselt, gebruik dan deze VBA-gebeurtenis. De syntaxis is:
Private Sub Workbook_Deactivate() 'uw code' End Sub
Het onderstaande voorbeeld Workbook_Deativate-gebeurtenis zal eenvoudig een bericht weergeven dat u het hoofdblad hebt verlaten, wanneer u dit blad verlaat.
Private Sub Workbook_Deactivate() MsgBox "Je hebt het hoofdblad verlaten" End Sub
5. De Werkboek_BeforeClose() Evenement
Deze gebeurtenis wordt geactiveerd wanneer u de verwijdering van het VBA-gebeurtenis-bevattende blad bevestigt. De syntaxis is eenvoudig:
Private Sub Workbook_BeforeClose (Annuleren als Boolean) End Sub
De Annuleren kan worden ingesteld op waar als u de werkmap open wilt houden.
De onderstaande code zal u vragen of u de inhoud van de werkmap die op het punt staat te sluiten wilt opslaan.
Private Sub Workbook_BeforeClose(Annuleren als Boolean) ans = MsgBox("Wilt u de inhoud van deze werkmap opslaan?", vbYesNo) If ans = True Dan thisworkbook.save End If End Sub
6. De Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Evenement
Deze gebeurtenis wordt geactiveerd voordat de werkmap wordt opgeslagen. De syntaxis is eenvoudig:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub
SaveAsUI is ingesteld op True als er een wijziging is in de werkmap (niet in VBA).
De Annuleren kan worden ingesteld op waar als u de werkmap niet wilt opslaan.
De onderstaande code zal u vragen of u de inhoud van de op te slaan werkmap wilt opslaan.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean) ans = MsgBox("Wilt u de inhoud van deze werkmap echt opslaan?", vbYesNo) If ans = False Then Cancel = True End If End Sub
7. De Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Evenement
Deze gebeurtenis wordt geactiveerd voordat de werkmap wordt opgeslagen. De syntaxis is eenvoudig:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) End Sub
SaveAsUI is ingesteld op True als er een wijziging is in de werkmap (niet in VBA).
De Annuleren kan worden ingesteld op waar als u de werkmap niet wilt opslaan.
De onderstaande code zal u vragen of u de inhoud van de op te slaan werkmap wilt opslaan.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel as Boolean) ans = MsgBox("Wilt u de inhoud van deze werkmap echt opslaan?", vbYesNo) If ans = False Then Cancel = True End If End Sub
8. De Workbook_NewSheet(ByVal Sh As Object) Evenement
Deze gebeurtenis wordt geactiveerd wanneer u een nieuw blad aan de werkmap toevoegt. De syntaxis is eenvoudig:
Private Sub Workbook_NewSheet (ByVal Sh As Object) End Sub
De Sh is het bladobject. Het type is eigenlijk een kernobject, zodat als we een grafiekblad, een macroblad of een dialoogvensterblad toevoegen, de gebeurtenis nog steeds werkt.
De onderstaande code wordt toegevoegd en toont de naam van het blad dat nieuw is toegevoegd.
Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "Je hebt een nieuw blad toegevoegd. " & Sh.Name End Sub
Er zijn veel meer gebeurtenissen van het werkmapobject. We kunnen ze hier niet allemaal bespreken. Als je iets wilt weten over een specifiek evenement, vraag het dan in de comments hieronder. Ik hoop dat ik in dit artikel de basisprincipes van de werkmapgebeurtenissen heb kunnen uitleggen. Laat me weten of het je heeft geholpen in de comments hieronder.
Gerelateerde artikelen:
Werkbladwijzigingsgebeurtenis gebruiken om macro uit te voeren wanneer een wijziging is aangebracht | Dus om uw macro uit te voeren wanneer het blad wordt bijgewerkt, gebruiken we de werkbladgebeurtenissen van VBA.
Voer macro uit als er een wijziging is aangebracht op het blad in het opgegeven bereik | Gebruik deze VBA-code om uw macrocode uit te voeren wanneer de waarde in een opgegeven bereik verandert. Het detecteert elke wijziging die in het opgegeven bereik is aangebracht en activeert de gebeurtenis.
Eenvoudigste VBA-code om huidige rij en kolom te markeren met behulp van | Gebruik dit kleine VBA-fragment om de huidige rij en kolom van het blad te markeren.
Populaire artikels:
50 Excel-snelkoppelingen om uw productiviteit te verhogen | Word sneller in uw taak. Met deze 50 sneltoetsen werkt u 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.