繁体   English   中英

打开 Access 数据库并从 Excel 运行其宏之一

[英]Open an Access database and run one of its Macros from Excel

在 Excel 中,我需要打开一个 Access 数据库并运行该数据库的宏之一。

我正在使用 Excel 和 Access 2007。这是我在 Excel 中的代码:

Sub accessMacro()

   Dim appAccess As New Access.Application

   Set appAccess = Access.Application

   appAccess.OpenCurrentDatabase "C:\blah.mdb"

   appAccess.Visible = True

   appAccess.DoCmd.RunMacro "RunQueries.RunQueries"
   appAccess.CloseCurrentDatabase

End Sub

在 Access 数据库中,名为 RunQueries 的模块中有一个名为 RunQueries 的过程。

我得到:

运行时错误“2485”:
Microsoft Access Office 找不到对象“RunQueries”。

我也试过

appAccess.DoCmd.RunMacro "RunQueries" 

我收到相同的错误消息。

我反对它,我必须这样做(意思是,我必须使用 Excel 作为前端来打开多个 Access dbs 并运行它们的宏)。

这个语法怎么样?
appAccess.run "RunQueries.RunQueries"

顺便说一句,我总是避免将模块命名为过程。 这是在找麻烦。

Sub accessMacro()

   Dim appAccess As Access.Application

   Set appAccess = New Access.Application

   appAccess.OpenCurrentDatabase "C:\blah.mdb"

   appAccess.Visible = True

   appAccess.DoCmd.RunMacro "Macro Name"  '<-- As it appears in the Macro Group in the Access Interface.   
   appAccess.CloseCurrentDatabase

End Sub

这个怎么样:

appAccess.Modules.Application.Run "macro_name"

宏名称不需要模块名称即可为我工作。

尝试这个:

Sub accessMacro()

   Dim appAccess

   Set appAccess = CreateObject("Access.Application")

   appAccess.OpenCurrentDatabase "C:\blah.mdb"

   appAccess.Visible = True

   appAccess.DoCmd.RunMacro "RunQueries.RunQueries"

   appAccess.CloseCurrentDatabase
End Sub

msdn 站点没有透露太多信息,但我觉得他们的免责声明适用于此处。 这是他们提到的:

如果在库数据库中运行包含 RunMacro 方法的 Visual Basic 代码,Microsoft Access 将在库数据库中查找具有此名称的宏,而不会在当前数据库中查找它。

当然,他们没有提到如何确切地解决这个问题! 但是在查看了上面的答案之后,我认为发布完整的答案会有所帮助:

Sub accessMacro()

   Dim appAccess As New Access.Application

   Set appAccess = Access.Application

   appAccess.OpenCurrentDatabase "C:\blah.mdb"

   appAccess.Visible = True

   appAccess.Run "RunQueries"
   appAccess.CloseCurrentDatabase

End Sub

当我运行它时,这有效。 祝你好运! :D -Reverus

这并没有专门针对“RunQueries”版本,但这适用于 Access 2019。

请注意,Application 对象的创建和初始化与前面的示例略有不同(以 Set [object] = Nothing 结尾)。

尽管没有提及,TXE_DEN.accdb 与单独的库数据库 MLO_Library.accdb 以及 Library 中 DEN 访问例程中的许多子例程相关联。 示例中的宏位于 TXE_DEN 数据库中,而不是库中。 如果它在库中,我不知道它是否可以通过 TXE_DEN 数据库访问,如图所示。

此外,在导航窗格中,示例宏显示在“无关对象”中。 因此,在其他情况下——例如,RunQueries——可能需要在标识符中包含模块名称。

并且只是为了避免混淆——这个宏不会对 Excel 中的任何内容执行任何操作。 它只是“嗯,我正在运行这个 EXCEL 的东西,我还需要运行那个 ACCESS 的东西,所以我将离题到 Access 并运行它,然后继续我的 EXCEL 东西。”

Sub Run_Access_Macro()

    Dim appAccess As Object
    Set appAccess = CreateObject("Access.Application")

    Dim AccessDB As String
        AccessDB = "F:\PATH WITH SPACES\TDN\TXE_DEN.accdb"

    ' format: module.macro
    Dim AccessMacro As String
        AccessMacro = "0 - Import TDN"

    appAccess.OpenCurrentDatabase AccessDB

    appAccess.Visible = True

    appAccess.DoCmd.RunMacro AccessMacro
    appAccess.CloseCurrentDatabase

    Set appAccess = Nothing

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM