我需要使用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。它调用它,然后立即关闭。有没有其他方法来调用它会导致代码实际运行?
答案 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