いくつかのドロップダウンメニュー/ユーザーアクションに応じて、いくつかのデータフィードがSQLクエリーにパラメータを戻すブックがあります。これにより、ワークブックのトリミングが維持され、計算が改善されます。ワークブック内のアイテムレベルの詳細をすべてローカルに保持することは実用的ではありません。excel vba:パラメータ化されたSQLクエリを一時停止しますか?
私のVBAのいくつかの要素は、これらのパラメータ化されたクエリに由来するデータの評価に依存します。ここで問題が発生する - VBAは、マクロ内のすべてを評価する前に、パラメータがクエリに返されるのを待たない。
フィードが更新されるまでVBAの実行をプログラムで「一時停止」するためのベストプラクティスについてのご意見やアドバイスがあれば、私は不思議です。今私の仕事は、私のVBAを2つの部分にチャンクし、変更されたデータに依存するものを別の関数にスローし、application.ontimeを使用してX秒間ポーズすることです。
Application.OnTime Now + TimeSerial(0, 0, 10), "Restart"
これは90%の解決策ですが、それは理想的ではありません。時間の長さは任意です - 本当に遅い接続では、それは不十分に長く、高速では不必要に遅いです。
Excelが準備完了するまで待ってから、続行するのが理想的です。 MSインターネットを使用する際にどのようにと同様に、あなたはIEがレディ状態に戻るまで実行を一時停止する
Do Until .document.ReadyState = "complete"
を使用することができ、ライブラリを制御します。より洗練されたソリューションのための戦略?
編集:以下JONあたり、コードを追加し、SQLクエリがどのように機能するかを説明する:
select sts1.studentid, sts1.alphascore as testcycle,
sts2.numscore as lexile, sts3.alphascore as gleq, sts4.numscore as nce
from ps.studenttestscore sts1
join ps.students stu on (sts1.studentid = stu.id)
join ps.studenttestscore sts2 on (sts1.studenttestid = sts2.studenttestid)
join ps.studenttestscore sts3 on (sts1.studenttestid = sts3.studenttestid)
join ps.studenttestscore sts4 on (sts1.studenttestid = sts4.studenttestid)
where (stu.id = ?) and (sts1.testscoreid = 578) and (sts2.testscoreid = 575)
and (sts3.testscoreid = 577) and (sts4.testscoreid = 576)
?関連する学生IDを渡すパラメータです。 - MSクエリは、そのパラメータにセル値を使用します。それはまさに学生に基づいて検索を持っているために見えセルが選択されています:
=IFERROR(INDEX(Stu!$B:$F,MATCH(Student!B2,Stu!$F:$F,0),1),999999)
を(IFERRORだけで不適切な値が何らかの形で選択されます場合はポップアップするから厄介なダイアログボックスを防ぐために、任意の番号を渡します) 。
あなたはSQLの呼び出しや、周囲のコードの長い一例を与えることができますしてください - それは、実行を待っていることだろう、なぜ私はわかりません。歓声 –
あなたはそのSQLをどのように実行しているのかは不明です - あなたのVBAコードを表示できますか?正確にあなたの "データフィード"には何を使用していますか? –