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

时间:2010-05-25 13:27:29

标签: vba excel-vba access-vba 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的过程。每次运行时,都会出现以下错误:

Runtime error '2485':

Microsoft Access Office can't find the object 'RunQueries.'

我也尝试过:

appAccess.DoCmd.RunMacro "RunQueries" 

我收到相同的错误消息。知道怎么做吗?顺便说一句,我可以对我为什么需要这样做进行长时间的解释,但是我只想说我已经反对它了,我必须这样做(意思是,我必须使用Excel作为一个前端打开几个Access dbs并运行它们的宏。)

6 个答案:

答案 0 :(得分:4)

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

顺便说一句,我总是避免像程序一样命名模块。这是在寻找麻烦。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

这个怎么样:

appAccess.Modules.Application.Run "macro_name"

宏名称不需要模块名称对我起作用。

答案 3 :(得分:0)

试试这个,

Sub accessMacro()

Dim appAccess

设置appAccess = CreateObject(“Access.Application”)

appAccess.OpenCurrentDatabase“C:\ blah.mdb”

appAccess.Visible = True

appAccess.DoCmd.RunMacro“RunQueries.RunQueries”

appAccess.CloseCurrentDatabase

End Sub

答案 4 :(得分:0)

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

答案 5 :(得分:0)

此版本未专门解决“ RunQueries”版本,但在Access 2019中有效。

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

尽管未提及,但TXE_DEN.accdb与一个单独的库数据库MLO_Library.accdb有一个关联,并且在Library中的DEN访问例程中有很多子例程。示例中的宏位于TXE_DEN数据库中,而不是库中。如果它在库中,我不知道是否可以通过所示的TXE_DEN数据库对其进行访问。

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

为避免混淆,此宏对Excel中的任何内容均不起任何作用。只是“嗯,我正在运行此EXCEL东西,而且我还需要运行THAT 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