2013-05-09 157 views
4

我正在使用VBA向Excel 2007工作簿添加ListObject。 ListObject的後面有一個QueryTable,鏈接到Access數據庫。代碼如下所示:Excel Querytable刷新僅適用於一次

Dim l As ListObject 
Dim c As ADODB.Connection 
Dim r As ADODB.Recordset 

Set c = New ADODB.Connection 
c.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=myAccessDatabasePath;Persist Security Info=False;" 

Set r = New ADODB.Recordset 
r.Open "Select * From myTable", c 

Set l = ActiveSheet.ListObjects.Add(xlSrcQuery, r, True, xlYes, Range("A1")) 
l.QueryTable.Refresh False 

'this line causes an error 
l.QueryTable.Refresh False 

本質上問題是我無法多次刷新表格。數據和表格設計功能區上的刷新按鈕呈灰色。我嘗試過使用類似的代碼而不使用Listobjects(即僅僅是QueryTables)並得到相同的問題。我已經嘗試刷新底層連接對象,並再次獲得相同的問題。

我花了整個早上谷歌搜索無濟於事。

這是一個錯誤,設計的行爲或(我很可能)在做一些愚蠢的事情嗎?

提前許多感謝,

史蒂夫

+0

由於第一次刷新尚未完成。 – user2140261 2013-05-09 13:24:22

+0

謝謝,但我試過。即使我通過Excel刪除了刷新和刷新,我也可以看到數據到達工作表(僅十幾行)。但是,再次刷新的選項灰顯。即使我關閉並重新打開它,該選項仍然顯示爲灰色。我認爲連接對象發生了一些事情 - 但我無法弄清楚什麼。 – steveo40 2013-05-09 13:31:31

+0

除此之外,刷新方法後的'false'參數應該阻止事物在後臺刷新(我認爲)。所以如果我的理解是正確的,代碼應該等到它完成之後再開始下一行。不過謝謝。 – steveo40 2013-05-09 13:32:59

回答

3

好吧,我得到它的工作。宏記錄器(感謝迪克的建議)實際上有用一次。

Dim s As Worksheet 
Dim l As ListObject 

Set s = ActiveSheet 
Set l = s.ListObjects.Add(xlSrcExternal, "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=myDatabasePath;", True, xlYes, Range("A1")) 

l.QueryTable.CommandType = xlCmdTable 
l.QueryTable.CommandText = "mytable" 

l.QueryTable.Refresh False 

'this now works! 
l.QueryTable.Refresh False 
1

這是UNTESTED,但它仍然應該工作,它會檢查表已在刷新,如果是,它會等待1秒,再次檢查,直到它不再刷新,那麼它將繼續

Dim l As ListObject 
Dim c As ADODB.Connection 
Dim r As ADODB.Recordset 

Set c = New ADODB.Connection 
c.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=myAccessDatabasePath;Persist Security Info=False;" 

Set r = New ADODB.Recordset 
r.Open "Select * From myTable", c 

Set l = ActiveSheet.ListObjects.Add(xlSrcQuery, r, True, xlYes, Range("A1")) 
    With l 
     .QueryTable.Refresh False 

      Do while .Refreshing 
       Application.Wait Now + TimeValue("00:00:01") 
      Loop 

     'this line causes an error 
     .QueryTable.Refresh False 

End With 
+0

再次感謝。它不起作用,但正如我在上面的評論中提到的,我不認爲這是問題。最初的刷新很快就會發生。即使我關閉並重新打開Excel(並從午餐返回),似乎沒有任何方法可以重新刷新查詢。 – steveo40 2013-05-09 13:38:40