尝试从中运行Access宏

时间:2017-08-02 19:16:40

标签: excel-vba access-vba vba excel

我正在尝试从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或其他任何东西的东西。

enter image description here

必须有办法做到这一点,对吧。

3 个答案:

答案 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