[英]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.