在我的Excel子程序中,我正在调用一个在后台运行的Access子程序(DB无法打开)并更新我的数据库中的表。一切都很完美,除了我的Excel Sub不会进入下一行代码,直到Access完成运行它我从Excel调用的子代码。所以,我的问题是......有没有办法在Excel Sub中调用/运行Access宏/子程序,让Excel继续执行其余代码,而不必等待Access Macro / sub到完成以继续?代码:下面:
Set acObj = CreateObject("Access.Application")
acObj.Application.Visible = False
acObj.OpenCurrentDatabase "C:\Intraday Data\Intraday.accdb"
acObj.Application.Run "RunData"
MsgBox "Done!"
所以基本上我想立即得到完成提示,而不必等待30秒才能完成访问程序......任何人都对此有任何见解他们可以与我分享吗? 谢谢!
答案 0 :(得分:1)
这是一些简单的代码,用于演示对Access过程的异步调用:
Sub ExecuteAccessActionQuery()
' Sample demonstrating how to execute an action query in an Access accdb asynchronously
' Requires a reference to a Microsoft ActiveX Data Objects library
Dim cn As ADODB.Connection
Dim strQuery As String
Dim strPathToDB As String
Dim dTimer As Double
' Change path and query name as necessary
strPathToDB = "C:\some path\database name.accdb"
strQuery = "qmtTempTable"
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Data Source=" & strPathToDB & ";"
.Open
End With
dTimer = Timer
cn.Execute strQuery, , adCmdStoredProc + adAsyncExecute
MsgBox Timer - dTimer
Set cn = Nothing
End Sub
答案 1 :(得分:0)
您可以通过在客户端应用程序中创建一个触发器来模拟VBA中的异步调用,然后执行所需的子例程。这里描述了这种技术(注意1秒的时间延迟需要几个帖子):
目前,您在不启动应用程序的情况下操作Access表中的数据,因此您可以使用新的Excel实例来创建触发器,也可以打开Access应用程序并在那里执行({3 }})。无论哪种方式,您必须拥有另一个独立的应用程序(流程),在其中执行您的异步'例程。