Wie überspringe Autoexec-Makro beim Öffnen von MSAccess von MSAccess?

8

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.

    
ChuckB 11.03.2010, 02:39
quelle

5 Antworten

5

Code, der beim Start ausgeführt wird, befindet sich möglicherweise nicht in einem Autoexec-Makro. Möglicherweise befindet er sich in einem Startformular. Daher sollten Sie in Erwägung ziehen, die Shift-Taste über APIs programmgesteuert zu drücken:

Ссылка

    
Fionnuala 11.03.2010 23:30
quelle
4

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.

    
ChuckB 11.03.2010 04:11
quelle
2

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.

    
Harry Steinhilber 26.08.2010 00:25
quelle
2

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à ....

    
Jan Henk 30.08.2011 09:22
quelle
0

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.

    
David-W-Fenton 27.08.2010 03:07
quelle

Tags und Links