Excel Querytable Refresh只能使用一次

我正在使用VBA将一个ListObject添加到Excel 2007工作簿。 ListObject的后面有一个QueryTable,链接到Access数据库。 代码如下所示:

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 

问题基本上是我不能多次刷新表格。 数据和表格devisefunction区上的刷新button呈灰色。 我已经尝试了类似的代码,而不使用Listobjects(即只是QueryTables),并得到同样的问题。 我已经尝试刷新底层的连接对象,并再次,得到同样的问题。

我花了整整一个早上Googlesearch无济于事。

这是一个错误,devise的行为,或者(我很可能)在做一些愚蠢的事情吗?

提前谢谢了,

史蒂夫

好吧,我得到它的工作。 macroslogging器(感谢迪克的build议)实际上是有用的一次。

 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 

这是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