【发布时间】:2012-07-12 14:04:41
【问题描述】:
这似乎是一个相当普遍的问题,但我找到的解决方案似乎都不起作用。
我正在从 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 只能返回一个值 - 它不能直接更新工作表。
-
@TimWilliams,是的,我在 vba 函数中执行此操作,其中 sqlStr 是返回所需数据的 sql 存储过程。
-
然后只使用
checkData = r.Fields(0).Value,除非您需要来自记录集中的更多数据。如果您需要其他数据,那么您将不得不找到某种方式来运行代码,而不是通过 UDF。