我正在使用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)尝试了类似的代码并得到了同样的问题。我已经尝试刷新底层连接对象,并再次遇到同样的问题。
我整个上午都在谷歌上搜索无济于事。
这是一个错误,设计行为还是(最有可能)我做了一些愚蠢的事情?
非常感谢,
史蒂夫
答案 0 :(得分:4)
好的,我得到了它的工作。宏记录器(感谢Dick的建议)实际上有用一次。
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 :(得分: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