如何从MSAccess打开MSAccess时跳过Autoexec宏?

问题描述:

所以我有一个MSAccess MDB,需要打开其他MDB,并运行一堆代码,比较两个访问MDB的代码差异,查询差异等。验证任何生产MDB的目标没有从原始部署中改变。如何从MSAccess打开MSAccess时跳过Autoexec宏?

我的问题是,许多这些Access应用程序具有Autoexec宏,并没有简单的方法来调用.OpenCurrentDatabase而不运行autoexec宏。

我该如何跳过使用CODE的宏?

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

这是一个鬼鬼祟祟的解决方案,但它适用于我。

我做了一个DoCmd.DatabaseTransfer acImport的Autoexec宏。 后来我为空白更换自动执行,使用DoCmd.DatabaseTransfer acExport

诀窍是,导出将覆盖

DoCmd.TransferDatabase acImport, “微软访问”,sSourcePath , acMacro, “自动执行”, “autoexecSource”

DoCmd.TransferDatabase acExport, “微软访问”,sSourcePath, acMacro, “autoexecblank”, “自动执行”

我这样做,再次为第二MDB

DoCmd.TransferDatabase acImport, “微软访问”,sDestPath, acMacro, “自动执行”,“ autoexecDest”

DoCmd.TransferDatabase acExport, “微软访问”,sDestPath, acMacro, “autoexecblank”, “自动执行”

然后,我可以做找到两个MDB之间的diff所有比较而不触发自动执行宏,因为我进口他们,取而代之

然后我比较两个宏我进口,然后导出回数据库。

DoCmd.TransferDatabase acExport, “微软访问”,sSourcePath, acMacro, “autoexecSource”, “自动执行”

DoCmd.TransferDatabase acExport, “微软访问”,sDestPath, acMacro“ autoexecDest“,”autoexec“

很明显,这个解决方案只适用于Access中的VBA,但它确实有效。

希望这可以帮助别人。在启动

+0

非常偷偷摸摸:) +1 – Praesagus 2010-03-11 17:56:31

代码的运行可能不是一个自动执行宏,它可能是在启动的形式,因此,您不妨考虑一下“编程按住shift键”通过API:

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

+0

这应该是公认的答案。 – transistor1 2013-01-17 19:30:54

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

但是,如果您无法更改这些宏,那么您可能最好遵循@ ChuckB的解决方案。

这是一个老问题,但另一种方法是使用/ cmd命令行参数,并在应用程序启动时使用COMMAND语句,以根据是否提供/ cmd参数有条件地运行启动例程。这只会在命令行启动时起作用,但不是通过自动化。

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

OpenCurrentDatabase方法( “数据库”)

DoCmd.Rename “自动执行”,acMacro, “tmp_Autoexec”

CloseCurrentDatabase

你做你的动作做一个重命名回再次自动执行后... et瞧......

+1

'OpenCurrentDatabase'不会导致执行Autoexec宏(在达到'DoCmd.Rename'行之前*)? – Heinzi 2013-01-08 14:44:01