4

我正在使用 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

本质上问题是我不能多次刷新表格。“数据”和“表设计”功能区上的“刷新”按钮显示为灰色。我在不使用 Listobjects(即只是 QueryTables)的情况下尝试了类似的代码并得到了同样的问题。我尝试刷新底层连接对象,再次遇到同样的问题。

我花了整个上午谷歌搜索无济于事。

这是一个错误,设计的行为还是(很可能)我在做一些愚蠢的事情?

提前谢谢了,

史蒂夫

4

2 回答 2

4

好的,我让它工作了。宏记录器(感谢迪克的建议)实际上曾经有用过一次。

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
于 2013-05-09T14:41:35.387 回答
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 
于 2013-05-09T13:29:15.710 回答