【问题标题】:Excel vba | running a access macro from excelExcel vba |从 excel 运行访问宏
【发布时间】:2021-02-13 06:54:00
【问题描述】:

每当我尝试执行以下代码时,都会收到以下消息。

Sub Refresh_Pivot()
Dim AWB As Workbook
Dim pvtTable As Object
Dim appAccess As Object

'Save workbook
Set AWB = ActiveWorkbook
AWB.Save

   'Open Access Application
   Set appAccess = CreateObject("Access.Application")
   appAccess.OpenCurrentDatabase "S:\AMA\MPF\MPF Projects\MPF Loss Emergence\MPFV4.accdb"
   appAccess.Visible = True

'Set Message bar in excel t o notify user of update process
oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
Application.StatusBar = "Retrieving information, please be patient...."



  'Execute Access Macro containing lineup of queries and scrubs
  appAccess.DoCmd.RunMacro "0_Retrieve_Scrub"  '<-- As it appears in the Macro Group in the Access Interface.


       'Close Access

       appAccess.DoCmd.Quit


       'Return message bar to original status
        Application.StatusBar = False
        Application.DisplayStatusBar = oldStatusBar


    Set pvtTable = Worksheets("1. Roll Rate Pivots").Range("C13").PivotTable
    pvtTable.RefreshTable

    Columns("B:B").EntireColumn.AutoFit
    Columns("C:j").Select
    Selection.ColumnWidth = 13

  'Notify user process has completed
  MsgBox ("Update complete")
End Sub

它基本上会打开一个 Access 数据库,运行一个 Access 宏并关闭 Access。我与触发此代码的同一个 excel 文件中的宏创建的表有一个 ODBC 连接。我在 excel 2007 中成功运行。我们最近升级了 office 2013,我们开始收到此消息。当我们调试时,它会突出显示这行代码。起初我虽然它与该版本的对象库有关,但检查了所有最新的。有没有人遇到过类似的问题。任何帮助将不胜感激。

appAccess.DoCmd.RunMacro "0_Retrieve_Scrub"

Error message

【问题讨论】:

  • Office 2013 是 64 位版本吗?您可以使用在 Access 中检查您的链接表管理器以确保它仍然正确连接吗?宏是使用 RunCode 运行 VBA 函数还是逐步访问命令?
  • 我们运行的是 32 位版本的 Office 2013。真正奇怪的是,当我将代码复制到一个全新的文件(当然是注释掉数据透视表刷新)时,它执行得很好。 "Docmd" 是一个 Access vba 方法。
  • 可能是安全设置?尝试在 Excel 和 Access 中将宏设置设置为“激活所有宏”。

标签: excel ms-access vba


【解决方案1】:

您是否 100% 确定您引用的宏名称存在于正在打开的数据库中,并且宏名称中的前导 0 不会导致任何问题?

【讨论】:

  • 是的,宏名称不是问题,因为我可以在另一个 Excel 电子表格中运行相同的代码,正如我对 dbmitch 的其他评论中所述。
  • 好的。那么您可以尝试的另一种方法是不使用该行来运行宏,而是将数据库的打开绑定到自动运行的宏(即使自动宏只是调用此宏)。任何名为“AutoExec”的宏都会在数据库打开时自动运行。创建一个调用您要启动的宏的 autoexec 宏,并且您不需要 DoCmd 行。
【解决方案2】:

我在尝试从 Excel VBA 运行 Access 宏时遇到了完全相同的错误。

改变这个:

appAccess.DoCmd.RunMacro "0_Retrieve_Scrub"  '<-- Error line referring to Access subroutine`

到这里:

appAccess.Run "0_Retrieve_Scrub"

【讨论】:

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