调用access子过程后保持Excel子过程运行
在我的Excel sub中,我调用了在后台运行的Access sub过程(DB未打开)并更新我的DB中的表。一切工作都很完美,除了我的Excel Sub在Access运行完我从Excel调用的Sub之前不会进入下一行代码。所以,我的问题是……有没有办法从Excel Sub中调用/运行Access宏/Sub过程,让Excel继续执行其余代码,而不必等待Access宏/Sub完成才能继续?代码:如下:调用access子过程后保持Excel子过程运行,excel,ms-access,vba,call,Excel,Ms Access,Vba,Call,在我的Excel sub中,我调用了在后台运行的Access sub过程(DB未打开)并更新我的DB中的表。一切工作都很完美,除了我的Excel Sub在Access运行完我从Excel调用的Sub之前不会进入下一行代码。所以,我的问题是……有没有办法从Excel Sub中调用/运行Access宏/Sub过程,让Excel继续执行其余代码,而不必等待Access宏/Sub完成才能继续?代码:如下: Set acObj = CreateObject("Access.Application"
Set acObj = CreateObject("Access.Application")
acObj.Application.Visible = False
acObj.OpenCurrentDatabase "C:\Intraday Data\Intraday.accdb"
acObj.Application.Run "RunData"
MsgBox "Done!"
因此,基本上我想立即完成提示,而不需要等待30秒,访问过程才能完成…任何人对此有任何见解,可以与我分享吗?
谢谢 通过在客户端应用程序中创建触发器,然后执行所需的子例程,可以在VBA中模拟异步调用。这项技术在这里有很好的描述(请注意,1秒的延时需要几个帖子):
当前,您在不启动应用程序的情况下操作Access表中的数据,因此您可以使用Excel的新实例来创建触发器,也可以打开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
这可能取决于访问例程的功能。如果你可以用ADO复制它,你就可以异步运行它。访问例程只是运行一个make table查询来更新一个带有更新数据的表……我相信ADO中的异步连接只能对服务器起作用(例如在一个单独的进程中)。基本问题是进程线程,进程(应用程序)中的所有调用都排队;一个线程不能同时执行两个操作。另一种方法是脚本方法:不,您也可以使用Access来实现。下面是我的示例代码。你说得对,Rory,我已经有一段时间没有使用ADO了!感谢您的复习,并对错误的陈述表示歉意:)我相信关于进程的观点仍然成立,但我认为ADO创建了一个单独的进程,以便使之成为可能!第一个链接工作完美…非常感谢!