Wie überspringen Autoexec-makro beim öffnen von MSAccess aus MSAccess?
So, ich habe eine MSAccess MDB, die Bedürfnisse zu öffnen, die andere MDB 's, und führen Sie eine Reihe von code, die Sie vergleichen zwei Access-MDB' s zu finden, die code-Unterschiede,Abfrage, diffs,etc. Ziel war es zu prüfen, ob jede Produktion MDB nicht verändert wurde, von der ursprünglichen Bereitstellung.
Mein problem ist, dass viele dieser apps Zugreifen haben Autoexec-Makros und es gibt keinen einfachen Weg, zu nennen .OpenCurrentDatabase ohne das autoexec-makro ausführen.
Wie kann ich nur überspringen Sie den makro-CODE verwenden?
Ich weiß, ich kann halten Sie die shift-Taste. Ich weiß, ich kann schalten Sie diese option an und aus zu.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Code-Ausführung beim start-up kann nicht in ein autoexec-makro, es kann in einem Start-Formular, daher möchten Sie vielleicht erwägen 'programmgesteuert durch drücken der shift-Taste' durch APIs:
http://www.mvps.org/access/api/api0068.htm
Es ist eine raffinierte Lösung, aber es funktioniert für mich.
Mache ich DoCmd.DatabaseTransfer acImport der Autoexec-makro.
Dann Ersetze ich die autoexec mit leere, mit DoCmd.DatabaseTransfer acExport
Der trick ist, dass ein Export überschreiben
Ich tun, dass auch für die zweite MDB
Dann kann ich alle Vergleiche für die Suche nach Unterschiede zwischen den beiden MDBs, ohne dass autoexec-Makros, da ich importierte Sie und ersetzt Sie
Dann Vergleiche ich die beiden Makros, die ich importiert und dann exportieren Sie Sie zurück zu den Datenbanken.
Offensichtlich diese Lösung funktioniert nur mit VBA im Zugang, aber es funktioniert.
Hoffe, das jemand hilft.
DoCmd
Objekt zugegriffen werden kann als eine Eigenschaft der Access -Application
Objekt, so dass Sie nicht brauchen, um mit VBA in Access; Sie brauchen nur eine Instanz desApplication
Objekt.Weitere option, wenn Sie Zugriff haben, Bearbeiten Sie die AutoExec-Makros, Datenbanken, die Sie öffnen: legen Sie eine Bedingung auf jedem Schritt in das makro angibt
[Application].[UserControl]
. Durch Angabe dieser, der makro-Schritt nur ausführen, wenn die Datenbank von einem Benutzer geöffnet, nicht durch Automatisierung. Wenn das makro Schritt bereits eine Bedingung festgelegt haben, können Sie setzen Sie einfach Klammern um ihn herum:(old condition) AND [Application].[UserControl]
.Wenn Sie nicht die Fähigkeit haben, ändern Sie die Makros, obwohl, sollten Sie vielleicht besser nach dem @ChuckB Lösung.
Andere Möglichkeit: machen Sie ein umbenennen der autoexec-makro in den VB-code.
OpenCurrentDatabase ("Deine Datenbank")
DoCmd.Benennen Sie "Autoexec", acMacro, "tmp_Autoexec"
CloseCurrentDatabase
Nachdem Sie dies getan haben Ihre Aktion umbenennen zurück zu autoexec wieder ...
et voila....
OpenCurrentDatabase
Ursache das Autoexec-makro ausgeführt wird (vor dieDoCmd.Rename
Zeile erreicht ist)?Dies ist eine alte Frage, aber ein anderer Weg, dies zu tun wäre, um die /cmd commandline argument, und verwenden Sie einen BEFEHL-Anweisung in der app beim Start, bedingt startup-Routinen, je nachdem, ob es war /cmd-argument zur Verfügung gestellt. Funktioniert dies nur mit einem commandline-Start, obwohl, nicht durch Automatisierung.