所以我有一个MSAccess MDB需要打开其他MDB并运行一堆代码来比较两个Access MDB来查找代码差异,查询差异等。目标是验证任何生产MDB未从原始部署中更改。
我的问题是,许多这些Access应用程序都有Autoexec宏,并且没有简单的方法可以在不运行autoexec宏的情况下调用.OpenCurrentDatabase。
如何使用CODE跳过宏?
我知道我可以按住Shift键。我知道我也可以打开和关闭这个选项。
答案 0 :(得分:6)
启动时运行的代码可能不在autoexec宏中,它可能是启动形式,因此,您可能希望考虑“通过API以编程方式按shift键”:
答案 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参数。这只适用于命令行启动,而不是通过自动化。