使用MS Access执行Excel VBA

时间:2015-08-04 14:42:52

标签: vba excel-vba access-vba excel

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

我有几个连接到Access数据库的Excel电子表格。我使用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。它调用它,然后立即关闭。有没有其他方法来调用它会导致代码实际运行?

2 个答案:

答案 0 :(得分:0)

oXLApp.Run "RefreshReports.Module15"

应该是

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

目前,您的代码没有从Excel运行任何VBA,因为您没有引用特定的子代码。我认为你关闭了错误处理,因为这应该是相当明显的。

答案 1 :(得分:0)

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

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