我有一個工作簿,其中幾個數據提要根據某些下拉菜單/用戶操作將參數傳遞迴SQL查詢。這可以保持工作簿的修剪,改進計算等 - 將所有項目級別的細節保存在工作簿中並不實際。excel vba:暫停參數化SQL查詢來完成?
我的VBA的一些元素依賴於來自這些參數化查詢的數據的評估。這就產生了這個問題 - 在評估宏中的所有內容之前,VBA不會等待參數傳遞迴查詢。
我很好奇,如果任何人有任何想法或建議的最佳做法,以編程方式暫停VBA執行,直到飼料刷新。我現在的工作是將我的VBA分爲兩部分,將取決於已更改數據的所有內容都放入單獨的函數中,並使用application.ontime暫停X秒。
Application.OnTime Now + TimeSerial(0, 0, 10), "Restart"
這是一個90%的解決方案,但它並不理想。時間長度是任意的 - 在一個非常緩慢的連接上,它不夠長,在一個很快的連接上它不必要的緩慢。
理想情況下,會有某種方式等待Excel準備好然後繼續。使用MS上網的時候如何類似的控件庫,您可以使用
Do Until .document.ReadyState = "complete"
暫停執行,直到IE返回就緒狀態。任何更優雅的解決方案的策略?
編輯:每低於喬恩,添加代碼,並解釋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調用和周邊代碼的例子 - 我不知道爲什麼它會等待執行。乾杯 – 2011-02-24 15:22:16
目前還不清楚你是如何執行該SQL的 - 你能展示你的VBA代碼嗎?你到底用了什麼「數據饋送」? – 2011-02-24 17:19:49