Öffnen einer Arbeitsmappe, aber Deaktivieren von Makros (Microsoft Excel)
Bob verarbeitet Informationen in einer Arbeitsmappe mithilfe eines Makros. Er möchte, dass das Makro eine zweite Arbeitsmappe mit einem AutoClose-Makro öffnet, möchte jedoch nicht, dass es ausgeführt wird, wenn die zweite Arbeitsmappe geschlossen wird.
Er sucht nach einer Möglichkeit, die zweite Arbeitsmappe unter der Kontrolle des Makros in der ersten Arbeitsmappe zu öffnen, ohne die Makros in der zweiten Arbeitsmappe zu aktivieren.
Es gibt keine Möglichkeit, die Makros in der zweiten Arbeitsmappe zu deaktivieren, wenn Sie sie unter Makrosteuerung öffnen. (Wenn Sie es manuell öffnen, können Sie beim Öffnen der Arbeitsmappe natürlich die Umschalttaste gedrückt halten, aber das hilft Ihrem Makro nicht – es hat keine Finger, um diese gesäte Taste gedrückt zu halten!)
Es gibt jedoch einige Problemumgehungen. Das erste beinhaltet das Ändern Ihres Codes, der die zweite Arbeitsmappe schließt, auf folgende Weise:
Application.EnableEvents = False Workbooks("SecondBook.xls").Close Application.EnableEvents = True
Wenn Sie die EnableEvents-Eigenschaft auf False setzen, wird das AutoClose-Makro durch das Ereignis (Schließen der Arbeitsmappe) nicht ausgelöst.
Sie können (und sollten) dann die EnableEvents-Eigenschaft auf True setzen, damit Ereignisse später fortgesetzt werden können.
Eine andere Problemumgehung besteht darin, im AutoClose-Makro der zweiten Arbeitsmappe eine Art „Flag“ zu setzen. Dieses Flag kann testen, ob die erste Arbeitsmappe geöffnet ist, und wenn dies der Fall ist, führen Sie den Hauptcode nicht im AutoClose-Makro aus.
Fügen Sie dazu in der zweiten Arbeitsmappe oben auf den Modulseiten den folgenden Code hinzu:
Dim AutoCloseDisabled as Boolean Sub DisableAutoClose() AutoCloseDisabled=True End Sub
Beachten Sie, dass die Deklarationsanweisung für die Variable AutoCloseDisabled außerhalb einer Prozedur liegt. Dies bedeutet, dass sie global ist und in allen Prozeduren zugänglich ist.
Ändern Sie als Nächstes das AutoClose-Makro so, dass sein Hauptteil in einer If-Anweisung eingeschlossen ist, wie hier gezeigt:
Sub AutoClose() 'variable declarations here If Not AutoCloseDisabled then 'body of AutoClose here End if End Sub
Die Idee ist, dass beim normalen Öffnen der zweiten Arbeitsmappe die Variable AutoCloseDisabled automatisch auf False gesetzt wird. (Boolesche Variablen sind standardmäßig False, wenn sie deklariert werden.) Da die DisableAutoClose-Prozedur niemals in der Arbeitsmappe ausgeführt wird, ermöglicht die If-Anweisung im AutoClose-Makro die Ausführung des tatsächlichen Hauptteils des Makros.
Wenn Sie die zweite Arbeitsmappe aus Ihrer ersten Arbeitsmappe öffnen, kann der Code in Ihrer ersten Arbeitsmappe das DisableAutoClose-Makro in der zweiten Arbeitsmappe aufrufen und dadurch das AutoCloseDisabled-Flag auf True setzen. Dies bedeutet, dass beim Schließen der zweiten Arbeitsmappe die If-Anweisung den Hauptteil des AutoClose-Makros überspringt.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (3158) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: