【问题标题】:How to skip Autoexec macro when opening MSAccess from MSAccess?从 MS Access 打开 MS Access 时如何跳过 Autoexec 宏?
【发布时间】:2010-03-11 02:39:53
【问题描述】:

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

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

如何使用 CODE 跳过宏?

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

【问题讨论】:

    标签: ms-access automation macros


    【解决方案1】:

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

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

    将 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"

    然后我可以进行所有比较以查找两个 MDB 之间的差异,而无需触发 autoexec 宏,因为我导入并替换了它们

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

    DoCmd.TransferDatabase acExport, "Microsoft Access", sSourcePath, acMacro, "autoexecSource", "autoexec"

    DoCmd.TransferDatabase acExport, "Microsoft Access", sDestPath, acMacro, "autoexecDest", "autoexec"

    显然,这个解决方案只能在 Access 中使用 VBA,但它确实有效。

    希望这对某人有所帮助。

    【讨论】:

    • DoCmd 对象可以作为 Access Application 对象的属性来访问,因此您不需要在 Access 中使用 VBA;你只需要一个Application 对象的实例。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        OpenCurrentDatabase(“您的数据库”)

        DoCmd.Rename "Autoexec", acMacro, "tmp_Autoexec"

        关闭当前数据库

        完成操作后,再次重命名为 autoexec ... 等等……

        【讨论】:

        • OpenCurrentDatabase 不会导致 Autoexec 宏被执行(到达DoCmd.Rename 行之前)?
        【解决方案5】:

        这是一个老问题,但另一种方法是使用 /cmd 命令行参数,并在应用程序的启动中使用 COMMAND 语句根据是否提供 /cmd 参数有条件地运行启动例程。不过,这仅适用于命令行启动,不能通过自动化实现。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多