我有一个我需要自动化的Excel文件。当用户打开Excel报告时,它将提示是否要刷新数据。如果他们说是,那么我需要它来运行Access数据库中的MakeTable查询来刷新报告的所有基础数字。
我已经搜索过,并且找不到任何可行的东西。
我甚至尝试在Access中创建可以运行的VBA代码来处理查询,但我甚至无法从Excel VBA运行。
以下是我目前的代码以及我尝试过的一些不起作用的代码:
Sub RunAccessMTQuery(ByVal DBLocation As String)
Dim db As Object
Set db = CreateObject("Access.Application")
With db
.OpenCurrentDatabase DBLocation
.Visible = True
' .Run "Main.RunMTJobBond"
' .docmd.runmacro "Main.RunMTJobBond" '<---Module.Proc Name
' .docmd.runmacro "mMTJobBond" '<---Macro name that calls the Proc
.Application.Run "mMTJobBond"
.CloseCurrentDatabase
.Quit
End With
'Below was found on https://support.microsoft.com/en-us/help/131921/running-a-microsoft-access-macro-from-microsoft-excel
' Dim Chan as Long
'Opens Microsoft Access and the file nwind.mdb
' Shell("""C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.EXE"" """ & DBLocation & """")
'Initiates a DDE channel to Microsoft Access
' Chan = DDEInitiate("MSACCESS", "system")
'Activates Microsoft Access
' Application.ActivateMicrosoftApp xlMicrosoftAccess
'Runs the macro
' Application.DDEExecute Chan, "RunMTJobBond"
'Terminates the DDE channel
' Application.DDETerminate Chan
End Sub
要么我需要能够从Excel运行MakeTable查询,要么启动Access并让它运行查询。我没有尝试过任何工作......我遇到了很多错误,例如:
运行时错误5 - 无效的过程调用或争论
运行时错误2517 - 应用程序定义或对象定义的错误
其他人也是,但我不记得,因为我能够解决这些问题,而这些是我坚持的一些问题。任何帮助都会很棒,谢谢。
答案 0 :(得分:1)
Application.Run()命令运行函数或子过程,而不是宏。这就是为什么运行宏的尝试不起作用。
至于直接运行函数或子函数,Run()
的预期参数格式是“ projectname.procedurename ”,而不是“modulename.procedurename”。除非您的数据库中有多个VBA项目(我假设您没有),否则您甚至不需要 projectname 。请参阅documentation here。
尝试
Set dbApp = CreateObject("Access.Application")
With dbApp
...
.Run "RunMTJobBond"
这假设RunMTJobBond
是标准模块中的 public 函数或sub。