【发布时间】:2013-05-09 11:21:06
【问题描述】:
我正在使用 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)的情况下尝试了类似的代码并得到了同样的问题。我尝试刷新底层连接对象,但又遇到了同样的问题。
我整个上午都在谷歌上搜索无济于事。
这是一个错误、设计行为还是(很可能)我在做一些愚蠢的事情?
非常感谢,
史蒂夫
【问题讨论】:
-
因为第一次刷新还没有完成。
-
谢谢,但我试过了。即使我删除了刷新和通过 Excel 刷新,我也可以看到数据到达工作表(只有十几行左右)。但是,再次刷新的选项是灰色的。即使我关闭并重新打开它,该选项仍然是灰色的。我认为连接对象发生了一些事情 - 但我不知道是什么。
-
除此之外,refresh 方法后面的 'false' 参数应该是为了防止事物在后台刷新(我认为)。因此,如果我的理解是正确的,代码应该等到它完成后再开始下一行。不过还是谢谢。
-
如果工作簿中的任何表具有
Connection Property以不启用后台刷新,则有时会覆盖后台刷新。但是有了新数据,我的解决方案不适用于您的特定问题。只是一个想法,您是否尝试将Persist Security Info=False更改为 True 以便保留安全信息 -
我在外部数据方面做了很多工作,但我从来不知道您可以使用 ADODB 记录集作为源。但我可以确认它可以工作,然后刷新按钮(Win7、XL2010)变灰。如果您录制宏,它不使用 ADODB,而是使用 xlSrcExternal 的 SourceType 并传入连接字符串。我想知道你是否这样做而不是 ADODB 是否可以释放刷新(我们都会学到一些东西)。