【问题标题】:Run Excel Macro from Access macro in VBA在 VBA 中从 Access 宏运行 Excel 宏
【发布时间】:2020-05-09 18:24:55
【问题描述】:

我正在尝试从 access 2016 运行 excel 宏。这有很多示例,但是它们都很旧。我收到的确切错误代码是运行时错误“1004”: 无法运行宏“TestScript()”。该工作簿中的宏可能不可用,或者可能会显示所有宏。我只是为测试运行一些简单的东西。我已确保在 excel 中启用了宏。 excel代码如下

Public Sub TestScript()
   MsgBox "IT WORKED"
End Sub

测试非常简单。 Access 正在打开 excel 电子表格,但它在此处停止并显示错误代码。

我的访问代码非常简单,如下所示。我还注意到代码在哪里停止。虽然我是 VBA 的新手,但我在这方面做了很多研究。我正在测试尽可能简单的代码。欢迎任何帮助。

Option Compare Database

Function runExcelmacro()

    Dim XL As Object
    
    Set XL = CreateObject("Excel.Application")
    
    With XL

        'Turn Off warnings
        .Visible = False
        .displayalerts = False
        'WorkBook path such as "C:\Computer\WorkBook.xlsx"
    
        .Workbooks.Open "C:\DATABASE\BLQ-10\Import Database BLQ 10\NTIRAINSTALLTO.xlsm"
        'Run the Macro in excel getworkbook

        .Run TestScript 'Code stops here!

        'Close Workbook
        .ActiveWorkbook.Close (True)
        .Quite
    End With
    Set XL = Nothing

End Function


Public Sub runMacroSub()
    Call runExcelmacro("C:\DATABASE\BLQ-10\Import Database BLQ 10\NTIRAINSTALLTO.xlsm", "TestScript")
End Sub

【问题讨论】:

  • .run "testscript" 会产生同样的错误吗?
  • 另外,Dim xl as excel.applicationset xl=.workbooks.open(….) 可能会更好?
  • 你是对的,我将其更改为 TestScipt 并且它正在运行,知道问题没有发生!我确实看到一个小消息框打开了
  • 嗯,让我改变它并测试一下
  • 不,我这样做了,它只是给了我一堆新错误

标签: excel vba ms-access


【解决方案1】:

在这里试试这个:

Public Sub TestScript()
   MsgBox "IT WORKED"
End Sub

Option Compare Database

Function runExcelmacro()
    Dim XL As Object, wb as object
    Set XL = CreateObject("Excel.Application")
    With XL
        .Visible = False
        .displayalerts = False
        set wb = .Workbooks.Open "C:\DATABASE\BLQ-10\Import Database BLQ 10\NTIRAINSTALLTO.xlsm"
        wb.Run TestScript 'Code stops here!
        .ActiveWorkbook.Close (True)
        .Quite
    End With
    Set XL = Nothing

End Function

Public Sub runMacroSub()
    Call runExcelmacro("C:\DATABASE\BLQ-10\Import Database BLQ 10\NTIRAINSTALLTO.xlsm", "TestScript")
End Sub

在这里,我将 wb 声明为对象,然后将 wb = 设置为工作簿。

这当然是假设您的测试脚本在实际打开的工作簿中。如果这不是一件事,那就真的很有趣了哈哈

【讨论】:

  • 嘿,我更改了代码并得到这个运行时错误 438 Object dosn't support this property or method as wb.run TestScript
【解决方案2】:

我猜 OP 没有将Testscript 的代码放在一个额外的模块中。而是将代码放入工作簿或工作表的类模块中。在后一种情况下,您必须在脚本名称前添加工作簿或工作表名称。

要么是`

.Run "ThisWorkbook.TestScript"

或者如果它在Sheet1(工作表的codename!)

.Run "Sheet1.TestScript"

不要忘记引号!

PS 如果您将testscript 放入模块并添加引号,则上面的OP 代码可以正常工作。

.Run "TestScript"

Here是描述如何创建模块和添加代码

【讨论】:

  • 图 LOL 更多关于为什么需要细节的例子
  • 很好,这让函数知道它不会关闭。ActiveWorkbook.Close (True)
  • 如果Testscript 位于工作簿或工作表模块中,上面的代码对我来说很好。如果您或多或少只说它不起作用,很难说出您的问题所在。
  • 我怎么说这是答案?
  • Storax 是我的英雄!
猜你喜欢
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 2023-03-30
  • 1970-01-01
相关资源
最近更新 更多