これはかなり一般的な問題のようですが、私が見つけた解決策はどれもうまくいかないようです。
SQL Serverからいくつかのデータを取得し、それをワークシートにコピーしています。次に、新しいデータから範囲をコピーして、それを使って他のことをしたいと思います。これはすべて、単一のvba関数で行われます。
私の問題は、関数がExcelから実行されると、クエリが必要なデータを返すのを待たずに、関数の2番目の部分に移動することです。
もちろん、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で実行すると、常に必要なデータが含まれます。