【问题标题】:Use MS Access to execute Excel VBA使用 MS Access 执行 Excel VBA
【发布时间】:2015-10-27 00:57:54
【问题描述】:

我需要使用 VBA 从 Access 表单+按钮在 Excel 电子表格中调用和执行 VBA。

我有几个 Excel 电子表格连接到我的 Access 数据库。我使用 VBA (C:\CDR & Project Inventory Reports\RebuildDB) 创建了一个单独的数据库来刷新和重建我的源数据库和报告工作簿。我还创建了一个单独的工作簿来刷新我的所有其他报告(C:\CDR & Project Inventory Reports\RefreshReports)。该 .xlsm 的模块 15 将调用我的所有其他模块来刷新这些报告。

在执行代码的 Excel 部分之前,我的所有代码都与重建数据库有关。目前,Excel 部分如下所示:

Dim oXLApp As Object
Set oXLApp = CreateObject("Excel.Application")
oXLApp.Visible = True
oXLApp.Workbooks.Open ("C:\CDR & Project Inventory Reports\RefreshReports.xlsm")
Debug.Print "Open report refresh code"
Debug.Print "refreshing all spreadsheets"

oXLApp.Run "RefreshReports.Module15" 'refreshes all CDR and Proj Inv spreadsheets

DoEvents
Debug.Print "Refresh completed"
oXLApp.ActiveWorkbook.Close (True)
oXLApp.Quit
Set oXLApp = Nothing
Debug.Print "Release object"

我遇到的问题是 oXLApp.Run 实际上并没有执行它需要的 VBA。它调用它,然后立即关闭。有没有其他方式调用它会导致代码实际运行?

【问题讨论】:

  • 你在resume next里面吗?如果是这样,请将其删除。你看到 debug.prints 了吗?请注意,在现代版本的 Windows 中,对 C:\ 的写访问受到限制。
  • 您调用宏的行仅指向Module,它需要指向特定的Sub @MacroMan 的链接是一个很好的资源来纠正这个问题

标签: excel ms-access vba


【解决方案1】:
oXLApp.Run "RefreshReports.Module15"

应该是

oXLApp.Run "RefreshReports.xlsm!NameOfMySub" '// Change sub name as required

就目前而言,您的代码没有从 Excel 运行任何 VBA,因为您没有引用特定的子代码。我认为您已关闭错误处理,因为这应该很明显。

【讨论】:

  • 我的错误处理程序会给我 1004 错误,但重命名 sub 并使用您的语法修复它。谢谢!
【解决方案2】:

您应该通过提供模块名称来完全限定要执行的子 所以

oXLApp.Run "RefreshReports.Module15"

应该是

oXLApp.Run "'RefreshReports.xlsm'!Module15.NameOfMySub"

如果你使用

oXLApp.Run "'RefreshReports.xlsm'!NameOfMySub"

和 过程NameOfMySub 在多个模块中声明 您将收到错误消息。

你也可以这样重写你的代码:

Dim oXLApp As Object
Dim Wkbk as workbook

Set oXLApp = CreateObject("Excel.Application")
oXLApp.Visible = True
set Wkbk  = oXLApp.Workbooks.Open ("C:\CDR & Project Inventory Reports\RefreshReports.xlsm")

Debug.Print "Open report refresh code"
Debug.Print "refreshing all spreadsheets"

oXLApp.Run "'" & Wkbk.Name & "'!Module15.NameOfMySub"

' Note use of single speechmarks arond workbook name

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多