调用access子过程后保持Excel子程序运行

时间:2014-07-20 07:04:15

标签: vba excel-vba access-vba call excel

在我的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秒才能完成访问程序......任何人都对此有任何见解他们可以与我分享吗? 谢谢!

2 个答案:

答案 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秒的时间延迟需要几个帖子):

http://social.msdn.microsoft.com/Forums/en-US/0546f8eb-d786-4037-906e-1ee5d42e7484/asynchronous-applicationrun-call?forum=isvvba

目前,您在不启动应用程序的情况下操作Access表中的数据,因此您可以使用新的Excel实例来创建触发器,也可以打开Access应用程序并在那里执行({3 }})。无论哪种方式,您必须拥有另一个独立的应用程序(流程),在其中执行您的异步'例程。