【问题标题】:Open an Access database and run one of its Macros from Excel打开 Access 数据库并从 Excel 运行其中一个宏
【发布时间】:2020-07-09 03:47:42
【问题描述】:

我需要从 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 db 并运行它们的宏)。

【问题讨论】:

  • 这个问题等待被关闭:-)

标签: excel vba ms-access


【解决方案1】:

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

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

【讨论】:

  • 我试过这个,但它不起作用。然后我尝试更改模块的名称,使其与过程名称不同,但它仍然不起作用。错误是:运行时错误:“2517”Microsoft Office Access 找不到过程“RunQueries”。
  • 那个错误信息是一个进步......我测试了我给你的语法。它应该替换您示例中的 ...runmacro 行。你的程序是公开的吗?您在模块级别没有 Option Private 吗?
  • 哦,Set appAccess = Access.Application 是没有必要的,除非你删除了上面一行中的“New”。
  • 这对我也不起作用。即使子被指定为公共。
【解决方案2】:
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

【讨论】:

    【解决方案3】:

    这个怎么样:

    appAccess.Modules.Application.Run "macro_name"
    

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

    【讨论】:

      【解决方案4】:

      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】:

        试试这个:

        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
        

        【讨论】:

        • 为了清楚起见,请添加一个代码块并简要说明此代码的作用。
        【解决方案6】:

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

        请注意,应用程序对象的创建和初始化必须与前面的示例稍有不同(并且以 Set [object] = Nothing 结尾)。

        虽然没有提到,TXE_DEN.accdb 与一个单独的库数据库 MLO_Library.accdb 和 Library 中的 DEN 访问例程中的许多子例程有关联。示例中的宏位于 TXE_DEN 数据库中,而不是库中。如果在Library中,不知道能不能通过如图所示的TXE_DEN数据库访问。

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

        为了避免混淆——这个宏对 Excel 中的任何内容都没有任何作用。它只是“嗯,我正在运行 THIS 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
        
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-09
          • 1970-01-01
          • 2015-10-11
          • 1970-01-01
          相关资源
          最近更新 更多