我正在尝试从Excel运行Access宏。我设置了对Microsoft Office 14.0 Access数据库引擎对象库的引用。现在,我正在尝试运行这样的小脚本。
Sub RunAccessMacro()
Dim strDatabasePath As String
Dim PathToDB As String
Dim db As DAO.Database
Dim rs As DAO.Recordset
PathOfDatabase = ThisWorkbook.Worksheets("Updates").Range("PathToAccess")
Set db = DAO.DBEngine.OpenDatabase(PathOfDatabase)
Set qry = db.Execute("Macro_Run_Key")
qry.Close
db.Close
MsgBox "Done! All processes complete!!"
End Sub
问题是,db.Execute不会执行宏。我甚至没有看到任何像RunMacro或其他任何东西的东西。
必须有办法做到这一点,对吧。
答案 0 :(得分:2)
数据库引擎只执行数据库事务(包含表和查询的任何事情)。如果您需要更多,则必须通过VBA使用Access应用程序:
Sub RunAccessMacro()
Dim strDatabasePath As String
Dim PathToDB As String
Dim accApp As Access.Application
Set accApp = New Access.Application
PathOfDatabase = ThisWorkbook.Worksheets("Updates").Range("PathToAccess")
accApp.OpenCurrentDatabase PathOfDatabase
accApp.DoCmd.RunMacro "Macro_Run_Key"
accApp.Quit
Set accApp = Nothing
MsgBox "Done! All processes complete!!"
End Sub
此外,您需要添加对Microsoft Access对象库的引用,或者您可以调整此代码以使用后期绑定。
答案 1 :(得分:1)
设置对Access对象库的引用是没用的,除非你实际使用它 :)严重的是,上面编写的代码使用DAO
,这是一个与调用{{1}不同的动物直接通过Object Libary。 DAO严格来说是一个数据库引擎(如ADO),并且不了解宏和模块以及Office Apps中定义的内容。
以下是使用早期绑定时使用的代码:
Access
答案 2 :(得分:0)
如果宏是一个访问宏,你实际上可以用一个命令触发宏,而不是必须绕过房子。 / X命令行开关将有所帮助 - 请检查此链接:How can I schedule a Macro to run automatically in Access 2007