在继续之前强制vba等待sql查询执行

Skr*_*lin 4 excel vba ado

这似乎是一个相当普遍的问题,但我发现的解决方案似乎都没有效果.

我从SQL Server中获取一些数据并将其复制到工作表中.然后我想从新数据中复制一个范围并用它做其他事情.所有这些都发生在单个vba函数中.

我的问题是当函数从Excel运行时它移动到函数的第二部分而不等待查询返回所需的数据.

当然,当我从vba IDE运行它时,该函数工作正常.

Dim a As New ADODB.Connection
Dim r As New ADODB.Recordset

a.Open (connStr)
Set r = a.Execute(sqlstr)

sht.Range("A2").CopyFromRecordset r

'please wait here until the proc has executed?

checkData = sht.Range("A2").Value
Run Code Online (Sandbox Code Playgroud)

当我从Excel运行该函数时,checkData始终为空,当我使用F5运行它时,它始终具有所需的数据.

小智 11

尝试使用:

Application.CalculateUntilAsyncQueriesDone
Run Code Online (Sandbox Code Playgroud)

执行SQL之后,但在复制RecordSet之前

Set r = a.Execute(sqlstr)
    Application.CalculateUntilAsyncQueriesDone
sht.Range("A2").CopyFromRecordset r 
Run Code Online (Sandbox Code Playgroud)