Voorkomen dat auto_open en Workbook_Open events worden uitgevoerd

Inhoud

Inleiding

Omdat ik software ontwikkelaar ben, komt het regelmatig voor dat ik een Excel bestand wil openen met de macro's ingeschakeld. Tegelijkertijd wil ik daarbij soms voorkomen dat het Workbook_Open event of de Auto_Open macro wordt uitgevoerd. In dit artikel laat ik zien hoe dit in de verschillende Excel versies kan worden gedaan.

Waarom zou ik dit moeten willen, vraagt je je af? Ik doe dit bijvoorbeeld met mijn eigen bestanden die ik nog aan het ontwikkelen ben. Het Open event kan code bevatten die enige tijd nodig heeft om uitgevoerd te worden, of bevat routines die het project configureren op een manier die ik (tijdelijk) wil omzeilen wanneer ik aan het bestand ga werken.

Indien een bestand dat je opent op de hieronder beschreven manieren nog meer event code bevat, dan zal deze event code pas reageren op de events nadat je zelf een macro hebt gestart in het bestand (bijvoorbeeld door op een knop te drukken of een menu keuze te maken) of nadat een User Defined Functie is uitgevoerd.

Ik raad af om deze methode toe te passen op bestanden waarvan je de herkomst niet kent. De VBA code kan events bevatten die toch worden uitgevoerd na openen van het bestand en eventueel ongewenste opdrachten uitvoeren.

Excel als onderdeel van Microsoft 365

Ik ga ervan uit dat je bestand al eens is "vertrouwd" of zich in een vertrouwde map bevindt.

Voorkom dan dat het workbook_Open wordt uitgevoerd door op Bestand, Openen, Bladeren te klikken. Selecteer dan in het bestandsverkenner venster je bestand, houdt de shift knop ingedrukt en klik dan op "Openen".

Merk op dat het niet werkt als je het bestand kiest in de lijst met recent geopende bestanden; Shift indrukken heeft dan geen effect en de Workbook_Open code wordt gewoon uitgevoerd.

Als je niet zeker weet of dit zal werken in jouw situatie, (Ik weet niet wat het gedrag is van Excel 2019, 2021 en 2024), dan zijn hier enkele work-arounds:

Workaround 1, events uitschakelen

Open de VBA editor, druk op control+g

Plak deze regel code in het venstertje dat opent en druk op Enter:

Application.EnableEvents = False

Open nu het bestand in kewstie.

Merk op dat geen van de applicatie of werkmap events meer worden uitgevoerd, dus als je die weer werkend wil hebben zal je in bovenstaand regeltje False op True moeten zetten en weer op enter moeten drukken.

Workaround 2: Detecteer dat de shift toets is ingedrukt

Als het bestand van jou zelf is en je gewoon een maier nodig hebt om te voorkomen dat het Open event wordt uitgevoerd (of gelijk welk ander event) terwijl jij de shift toets ingedrukt hebt, dan kan je code gebruiken zoals deze:

Option Explicit

#If VBA7 Then
    Declare PtrSafe Function GetKeyState Lib "USER32" (ByVal vKey As Long) As Integer
#Else
    Declare Function GetKeyState Lib "USER32" (ByVal vKey As Long) As Integer
#End If

Const SHIFT_KEY As Long = &H10

Function
ShiftPressed() As Boolean
'Returns True if shift key is pressed
    ShiftPressed = GetKeyState(SHIFT_KEY) < 0
End Function

Private Sub Workbook_Open()
    If ShiftPressed Then Exit Sub
    MsgBox "You did not hold down the shift key while the file was opened"
End Sub

Workaround 3: Detecteer de aanwezigheid van een specifiek bestand in dezelfde map als waar het Excel bestand is opgeslagen

Sommige collega's van mij gebruiken deze techniek: Simpelweg een leeg txt bestandje plaatsen in dezelfde map als waar het bestand met de macro staat en dan in de macro testen op aanwezigheid van dat bestand. Je kan vervolgens met de Dir opdracht eenvoudig detecteren of de code moet stoppen:

If Len(Dir(ThisWorkbook.Path & "SomeMadeUPFileName.txt") > 0 Then
'Doe iets

Excel 2010, 2013, 2016

Macro beveiligingsniveau op "Alle macro's inschakelen", of een "vertrouwd" document

Als je het macro beveiligingsniveau hebt ingesteld op "Alle macro's inschakelen", of als het document al eerder hebt geopend en macro's hebt ingeschakeld (waardoor het document als een "vertrouwd" document is ingesteld), of als je het document in een vertrouwde map staat, kies dan Bestand, Openen en selecteer je bestand. Houdt de shift toets ingedrukt terwijl je op de Openen knop klikt:

Een bestand selecteren uit het Bestand, Openen dialoogvenster (Excel 2010)

Fig. 1: Een bestand selecteren uit het Bestand, Openen dialoogvenster (Excel 2010, 2013, 2016)

Uiteraard kan het bestand in de lijst Onlangs geopende documenten staan. In dat geval houd je de shift knop ingedrukt terwijl je op het bestand klikt in de lijst (ten tijde van het schrijven van dit artikel was de Nederlandse versie van Excel 2010 nog niet beschikbaar):

Klik op een bestand in de lijst Onlangs geopende documenten (Excel 2010)

Fig. 2: Klik op een bestand in de lijst Onlangs geopende documenten (Excel 2010)

Door dit te doen voorkom je uitvoering van zowel het Workbook_Open als de Auto_Open macro.

Macro beveiliging ingesteld op "Alle macro's uitschakelen, met melding"

Volg eerst de aanwijzingen hierboven.

Normaal gesproken, als je een dergelijk bestand opent toont Excel de balk met de beveiligingswaarschuwing. Als je echter de shift toets had ingedrukt, dan verschijnt dit venster:

Macro's inschakelen dialoogvenster (Excel 2010)

fig 3: Macro's inschakelen dialoogvenster (Excel 2010)

Omdat je de shift toets ingedrukt hield toen je het bestand aanklikte in de lijst met onlangs geopende documenten, of toen je op de "Openen" knop klikte, zullen er geen Automacros worden uitgevoerd.

Excel 2007 en hoger

Macro beveiligingsniveau op "Alle macro's inschakelen", of een "vertrouwd" document

Indien de vertrouwde map zich op het network bevindt, dan voorkomt het indrukken van de shift toets het starten van de macro helaas niet!

Als je het macro beveiligingsniveau hebt ingesteld op "Alle macro's inschakelen", of als je het document in een "vertrouwde" map hebt opgeslagen, of als het bestand macro's bevat van een vertrouwde uitgever, kies dan Bestand, Openen en selecteer je bestand. Houdt de shift toets ingedrukt terwijl je op de Openen knop klikt:

Een bestand selecteren uit het Bestand, Openen dialoogvenster (Excel 2007)

Fig. 4: Een bestand selecteren uit het Bestand, Openen dialoogvenster (Excel 2007 en hoger)

Uiteraard kan je bestand in de lijst "Onlangs geopende documenten" staan. In dat geval houd je de shift knop ingedrukt terwijl je op het bestand klikt in de lijst:

Het bestand kiezen uit de lijst Onlangs geopende documenten (Excel 2007)

Fig. 5: Het bestand kiezen uit de lijst Onlangs geopende documenten (Excel 2007 en hoger)

Hierdoor voorkom je het uitvoeren van het Workbook_Open event en een Auto_Open macro.

Macro beveiliging ingesteld op "Macro's uitschakelen, met melding"

Volg eerst de aanwijzingen die hierboven staan.

Normaal gesproken, als je een bestand met macro's opent, dan toont Excel de beveiligingswaarschuwing. Als je echter de shift toets had ingedrukt, dan verschijnt dit venster:

Macro's inschakelen dialoogvenster (Excel 2007)

fig 6: Macro's inschakelen dialoogvenster (Excel 2007 en hoger)

Omdat je de shift toets ingedrukt hield toen je het bestand aanklikte in de lijst met onlangs geopende documenten, of toen je op de "Openen" knop klikte, zullen er geen Automacros worden uitgevoerd.

Excel 97, 2000, XP, 2003

Macro beveiliging op laag of een vertrouwde uitgever

In het geval dat je macro beveiliging op laag staat, of wanneer je bestand gesigneerde code bevat waarvan je de uitgever als betrouwbaar hebt aangeduid, moet je de shift knop al indrukken op het moment dat je op Openen klikt in het Bestand, Openen dialoogvenster:

Het bestand openen vanuit het Bestand, Openen venster (Excel 97-2003)

Fig. 7: Het bestand openen vanuit het Bestand, Openen venster (Excel 97-2003)

Uiteraard kan het zijn dat het bestand in je lijst met recent geopende documenten staat. In dat geval moet je de shift toets ingedrukt houden terwijl je op het bestand klikt:

Klik op een bestand in de lijst Onlangs geopende documenten (Excel 97-2003)

Fig. 8: Klik op een bestand in de lijst Onlangs geopende documenten (Excel 97-2003)

Op deze manier voorkom je dat het Workbook_Open event wordt uitgevoerd en dat een Auto_Open macro start.

Macro beveiliging op gemiddeld of hoger

Als je macro beveiligingsniveau tenminste op "Gemiddeld" staat en je de uitgever van de macro nog nooit als betrouwbaar hebt aangevinkt, dan hoef je geen shift in te drukken als je op Openen klikt of als je het bestand aanwijst in de lijst met onlangs geopende documenten. In plaats daarvan moet je de shift toets indrukken als je macro's gaat inschakelen:

Houdt shift ingedrukt terwijl je op Macro's inschakelen klikt.

Fig.9: Houdt shift ingedrukt terwijl je op Macro's inschakelen klikt.

Op deze manier voorkom je dat het Workbook_Open event wordt uitgevoerd en dat een Auto_Open macro start.

 


Vragen, suggesties of opmerkingen

Loading comments...