Ich habe also eine MSAccess-MDB, die andere MDBs öffnen und eine Menge Code ausführen muss, die zwei Access-MDBs vergleicht, um Codedifferenzen, Abfrage-Diffs usw. zu finden. Das Ziel, eine Produktions-MDB zu überprüfen, wurde nicht von der ursprünglichen Bereitstellung geändert.
Mein Problem besteht darin, dass viele dieser Access-Apps Autoexec-Makros haben und es keine einfache Möglichkeit gibt, .OpenCurrentDatabase aufzurufen, ohne das Autoexec-Makro auszuführen.
Wie kann ich das Makro mit CODE einfach überspringen?
Ich weiß, dass ich die Umschalttaste gedrückt halten kann. Ich weiß, dass ich diese Option auch ein- und ausschalten kann.
Es ist eine hinterhältige Lösung, aber es funktioniert für mich.
Ich mache einen DoCmd.DatabaseTransfer acImport des Autoexec-Makros. Dann ersetze ich den Autoexec mit einem leeren, mit DoCmd.DatabaseTransfer acExport
Der Trick ist, dass ein Export überschreibt
DoCmd.TransferDatabase acImport, "Microsoft Access", sSourcePath, acMacro, "autoexec", "autoexecSource"
DoCmd.TransferDatabase acExport, "Microsoft Access", sSourcePath, acMacro, "autoexecblank", "autoexec"
Ich mache das nochmal für die zweite MDB
DoCmd.TransferDatabase acImport, "Microsoft Access", sDestPfad, acMacro, "autoexec", "autoexecDest"
DoCmd.TransferDatabase acExport, "Microsoft Access", sDestPfad, acMacro, "autoexecblank", "autoexec"
Dann kann ich alle Vergleiche durchführen, um Diffs zwischen den beiden MDBs zu finden, ohne die Autoexec-Makros auszulösen, seit ich sie importiert und ersetzt habe
Dann vergleiche ich die beiden Makros, die ich importiert habe, und exportiere sie dann zurück in die Datenbanken.
DoCmd.TransferDatabase acExport, "Microsoft Access", sSourcePath, acMacro, "autoexecSource", "autoexec"
DoCmd.TransferDatabase acExport, "Microsoft Access", sDestPfad, acMacro, "autoexecDest", "autoexec"
Offensichtlich funktioniert diese Lösung nur mit VBA in Access, aber es funktioniert.
Hoffe das hilft jemandem.
Eine weitere Option, wenn Sie Zugriff auf die AutoExec-Makros der zu öffnenden Datenbanken haben: Legen Sie eine Bedingung für jeden Schritt im Makro fest, der [Application].[UserControl]
angibt. Wenn Sie dies angeben, wird der Makroschritt nur ausgeführt, wenn die Datenbank von einem Benutzer und nicht über die Automatisierung geöffnet wird. Wenn für den Makroschritt bereits eine Bedingung festgelegt ist, können Sie einfach Klammern setzen: (old condition) AND [Application].[UserControl]
.
Wenn Sie diese Makros jedoch nicht ändern können, sollten Sie der Lösung von @ ChuckB besser folgen.
Eine andere Option: Machen Sie eine Umbenennung des Autoexec-Makros in Ihrem VB-Code.
OpenCurrentDatabase ("Ihre Datenbank")
DoCmd.Rename "Autoexec", acMacro, "tmp_Autoexec"
CloseCurrentDatabase
Nachdem Sie Ihre Aktion ausgeführt haben, führen Sie eine erneute Umbenennung in autoexec durch ... et voilà ....
Dies ist eine alte Frage, aber eine andere Möglichkeit wäre das / cmd-Befehlszeilenargument zu verwenden und eine COMMAND-Anweisung im Start der Anwendung zu verwenden, um abhängig davon, ob ein / cmd-Argument angegeben wurde, Startup-Routinen bedingt auszuführen. Dies funktioniert jedoch nur mit einem Startbefehl für die Befehlszeile, nicht über die Automatisierung.
Tags und Links macros automation ms-access