Het openen van een werkmap, maar uitschakelen Macro

Bob is de verwerking van gegevens in een werkmap met behulp van een macro. Hij wil graag voor de macro om een ​​tweede werkmap die een AutoClose macro in het heeft te openen, maar hij wil het niet te lopen wanneer de tweede werkmap wordt gesloten. Hij is op zoek naar een manier om de tweede werkmap opent, onder de controle van de macro in het eerste werkboek, zonder waardoor de macro's in de tweede werkmap.

Er is geen manier om de macro's bij het openen van het onder macro-controle uit te schakelen in de tweede werkmap. (Als u handmatig te openen, kunt u uiteraard de Shift-toets ingedrukt te houden als de werkmap opent, maar dat helpt niet uw macro-het heeft geen vingers vast te houden gezaaid die sleutel!)

Er zijn een paar oplossingen, echter. De eerste betreft het aanpassen van uw code die de tweede werkmap sluit, op deze manier:

Application.EnableEvents = False
Werkboeken ("SecondBook.xls"). Sluiten
Application.EnableEvents = True

Door de eigenschap EnableEvents op False, zal het evenement dat gaat gebeuren (het sluiten van het werkboek) niet leiden tot de AutoClose macro. U kunt (en moet) stel vervolgens de eigenschap EnableEvents op True, zodat gebeurtenissen later kan blijven.

Een andere oplossing is om een ​​soort van "vlag" in de AutoClose macro van de tweede werkmap. Deze vlag konden testen om te zien of de eerste werkboek open is, en als het is, niet de belangrijkste code in de AutoClose macro uitvoeren.

Om dit te doen in de tweede werkboek aan de bovenkant van de module pagina's toe te voegen de volgende code:

Dim AutoCloseDisabled Booleaanse
Sub DisableAutoClose ()
AutoCloseDisabled = True
End Sub

Merk op dat de verklaring verklaring voor de AutoCloseDisabled variabele is buiten een procedure, wat betekent dat het wereldwijd opereren en toegankelijk binnen alle procedures zullen zijn.

Vervolgens passen de AutoClose macro zodat zijn lichaam is ingesloten in een If statement, zoals hier getoond:

Sub AutoClose ()
'Variabele declaraties hier

Als Niet AutoCloseDisabled dan

'Lichaam van AutoClose hier

Beëindigen als
End Sub

Het idee is dat wanneer de tweede werkboek normaal wordt geopend, de AutoCloseDisabled variabele wordt automatisch ingesteld op False. (Booleaanse variabelen standaard op False wanneer zij worden gedeclareerd.) Aangezien de DisableAutoClose procedure wordt nooit uitgevoerd in de werkmap, het Als verklaring in de AutoClose macro maakt de behuizing van de macro uit te voeren.

Als je de tweede werkboek van uw eerste werkmap opent, dan is de code in je eerste werkmap kan de DisableAutoClose macro noemen in het tweede werkboek, waardoor het instellen van de AutoCloseDisabled vlag op True. Dit betekent dat wanneer de tweede werkmap wordt gesloten, zal de If statement overslaan over het lichaam van de AutoClose macro.

ExcelTips is uw bron voor kosteneffectieve Microsoft Excel training. Deze tip (3158) is van toepassing op Microsoft Excel 97, 2000, 2002 en 2003. U kunt een versie van deze tip voor de ribbon-interface van Excel (Excel 2007 en later) vindt u hier: Het openen van een werkmap, maar uitschakelen Macro's.