这似乎是一个相当普遍的问题,但是我发现的解决方案似乎都不起作用。强制vba在继续之前等待sql查询执行
我从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
当我运行从Excel checkData功能始终是空的,当我与F5它始终拥有所需的数据运行它。
你试图做这个工作表中的功能?它不起作用,因为UDF只能返回一个值 - 它不能直接更新工作表。 – 2012-07-12 14:24:28
@TimWilliams,是的我在vba函数中这样做,其中sqlStr是一个返回所需数据的sql存储过程。 – Skrealin 2012-07-12 14:43:31
然后只要使用'checkData = r.Fields(0).Value',除非你需要的记录集中有更多的数据。如果你需要其他数据,那么你将不得不寻找某种方式来运行代码,而不是通过UDF。 – 2012-07-12 14:54:21