如何从MS Access打开MS Access时跳过Autoexec宏?

时间:2010-03-11 02:39:54

标签: ms-access automation macros

所以我有一个MSAccess MDB需要打开其他MDB并运行一堆代码来比较两个Access MDB来查找代码差异,查询差异等。目标是验证任何生产MDB未从原始部署中更改。

我的问题是,许多这些Access应用程序都有Autoexec宏,并且没有简单的方法可以在不运行autoexec宏的情况下调用.OpenCurrentDatabase。

如何使用CODE跳过宏?

我知道我可以按住Shift键。我知道我也可以打开和关闭这个选项。

5 个答案:

答案 0 :(得分:6)

启动时运行的代码可能不在autoexec宏中,它可能是启动形式,因此,您可能希望考虑“通过API以编程方式按shift键”:

http://www.mvps.org/access/api/api0068.htm

答案 1 :(得分:5)

这是一个偷偷摸摸的解决方案,但它对我有用。

我执行Autoexec宏的 DoCmd.DatabaseTransfer acImport 。 然后我使用 DoCmd.DatabaseTransfer acExport

替换autoexec和空白的autoexec

诀窍是导出覆盖

  

DoCmd.TransferDatabase acImport,   “Microsoft Access”,sSourcePath,   acMacro,“autoexec”,“autoexecSource”

     

DoCmd.TransferDatabase acExport,   “Microsoft Access”,sSourcePath,   acMacro,“autoexecblank”,“autoexec”

我再次为第二个MDB做了

  

DoCmd.TransferDatabase acImport,   “Microsoft Access”,sDestPath,   acMacro,“autoexec”,“autoexecDest”

     

DoCmd.TransferDatabase acExport,   “Microsoft Access”,sDestPath,   acMacro,“autoexecblank”,“autoexec”

然后我可以进行所有比较,在不触发autoexec宏的情况下在两个MDB之间找到Diffs,因为我导入了它们并替换了它们

然后我比较导入的两个宏,然后将它们导出回数据库。

  

DoCmd.TransferDatabase acExport,   “Microsoft Access”,sSourcePath,   acMacro,“autoexecSource”,“autoexec”

     

DoCmd.TransferDatabase acExport,   “Microsoft Access”,sDestPath,   acMacro,“autoexecDest”,“autoexec”

显然,此解决方案仅适用于Access中的VBA,但确实有效。

希望这有助于某人。

答案 2 :(得分:2)

如果您有权编辑正在打开的数据库的AutoExec宏,则可以使用另一个选项:在指定[Application].[UserControl]的宏中的每个步骤上设置条件。通过指定此选项,宏步骤仅在用户打开数据库时运行,而不是通过自动化打开。如果宏步骤已经设置了条件,则可以在其周围加上括号:(old condition) AND [Application].[UserControl]

但是,如果您无法更改这些宏,那么最好不要关注@ ChuckB的解决方案。

答案 3 :(得分:2)

另一个选择:在VB代码中重命名autoexec宏。

OpenCurrentDatabase(“您的数据库”)

DoCmd.Rename“Autoexec”,acMacro,“tmp_Autoexec”

CloseCurrentDatabase

完成操作后,再次重命名为autoexec ...  et voila ....

答案 4 :(得分:0)

这是一个老问题,但另一种方法是使用/ cmd命令行参数,并在应用程序启动时使用COMMAND语句有条件地运行启动例程,具体取决于是否提供了/ cmd参数。这只适用于命令行启动,而不是通过自动化。