我有過一個宏執行一個SQL查詢問題SQL語句時,「刷新」在2010年的ExcelExcel 2010中凍結VS只需點擊執行通過宏觀
的設置:
- 我打開了一個新的Excel 2010工作表。
- 進入「數據」選項卡
- 「獲取外部數據」部分我點擊「自其他來源」,並從下拉下下來,我點擊「從Microsoft查詢」
- 我再選擇合適的ODBC連接,通過「查詢嚮導」窗口取消並關閉「添加表」窗口
- 然後在「Microsoft Query」窗口中,我只需點擊「SQL」按鈕,輸入我的查詢並點擊確定
- 它執行查詢在「Microsoft Query」窗口中,然後關閉該窗口,選擇我希望在提示時填充的單元格,然後點擊確定。
- 查詢然後填充到我的電子表格中。
這裏就是問題出現:
如果我在桌子上點擊右鍵並選擇「刷新」右鍵單擊彈出菜單中的數據將刷新和小旋轉的地球底部屏幕上會顯示「正在運行的後臺查詢...」並旋轉,直到查詢運行完畢並且excel不會凍結,並且我可以在其他選項卡或其他工作表中工作。
不過,如果我執行,通過宏確切聲明:
Range("A6").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
旋轉的地球沒有出現,Excel停止響應,有時變白,並且鼠標變成了紡「沒有響應」圈子當盤旋在excel。在這一點上,我無法在excel中工作,直到查詢完成並且excel再次開始響應。
這是一個問題,因爲在我的大多數報告中,我使用Excel中的單元格來允許用戶將參數插入到我執行的SQL語句中。
例子:
Dim oQuery As QueryTable
Dim oDate As String
Set oQuery = ActiveWorkbook.Sheets("Sheet1").ListObjects(1).QueryTable
oDate = Range("B1")
oQuery.CommandText = "exec database.dbo.ExampleProcedure @SuppliedDate = '" + oDate + "'"
oQuery.Refresh False
這不是在Excel 2003中的一個問題,但只來了,當我切換到2010年不得不改變查詢表VB代碼顯示在下面的例子中
2003年:
2010年Set oQuery = Sheet1.QueryTables(1)
:
Set oQuery = ActiveWorkbook.Sheets("Sheet1").ListObjects(1).QueryTable
另外它只發生在我編寫的大約75%的報告中,並且在SQL語句花費超過幾秒鐘刷新時,這只是一個值得注意的問題。這成了一個相當大的問題,所以我會非常感謝任何可以幫助的人。非常感謝。
非常感謝您的回覆。這個解決方案對於一些等待查詢完成的報告肯定有效,在執行其他計算之前不需要。但是,在Excel 2003中,False命令並未完全凍結excel。它會告訴它要等到查詢完成後纔會繼續到vb的下一行。在此期間,用戶仍然可以在Excel中工作。我真的想知道在Excel 2010中是否有可能在執行宏中的其餘代碼之前執行查詢的宏完成,而不會完全凍結excel – BillSchwartzky 2011-03-09 18:04:45
編輯答案以說明如何執行此操作。歡呼聲,本 – Ben 2011-03-09 20:57:22
感謝您的問題和迴應。我有同樣的問題,但添加BackgroundQuery:= True不會改變Excel的行爲。仍凍結實例。 – 2012-09-17 15:43:26