在Access中从Excel

时间:2017-04-28 18:03:57

标签: vba excel-vba ms-access excel

我有一个我需要自动化的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 - 应用程序定义或对象定义的错误

其他人也是,但我不记得,因为我能够解决这些问题,而这些是我坚持的一些问题。任何帮助都会很棒,谢谢。

1 个答案:

答案 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。