如何在 Excel 2016 VBA 中引用和刷新 QueryTable

How to reference and refresh a QueryTable in Excel 2016 in VBA

我正在尝试刷新有关单元格更改的查询,但我不知道如何引用该查询。

我的代码:Sheets("Roster Query").QueryTables(0).Refresh

刚刚出错:

Run-time error '1004':

Application-defined or object-defined error

我有一个名为 "Roster Filter" 的 sheet,它有查询 table 我想刷新。我怎样才能得到那个 QueryTable 并刷新它?

编辑:也试过:

For Each qt In Sheets("Roster Query").QueryTables
    qt.Refresh
Next

这不会出错,但不会刷新查询。

查询表是旧版本 Excel 的遗留物,在 出现之前。甚至不知道如何在 Excel 2007+ 中创建一个。

如果您通过 Data/Get 外部数据 功能区菜单添加 QT,您添加的实际上是 ListObject.

我在 Sheet1 上测试了这个,添加了一个简单的查询 - Excel 为我创建了 ListObject

直接窗格中,我得到这些结果:

?Sheet1.QueryTables.Count
 0
?Sheet1.ListObjects.Count
 1

我可以重现你完全相同的错误:

Sheet1.QueryTables(0).Refresh 'runtime error 1004

这个错误简直是令人发指的误导,仅此而已 - 它真的应该是 索引越界.

解决方法是刷新 ListObject 而不是:

Sheet1.ListObjects(1).Refresh 'works

您也可以通过 ListObject 访问 底层 QueryTable 对象:

?Sheet1.ListObjects(1).QueryTable.CommandText 'gives you the query

您看到错误是因为 .Item 方法是基数 1,而不是基数 0

例如,这在 Excel 2016 年对我有用:

Sheets("Roster Query").QueryTables(1).Refresh

因此,如果您只有一个 QueryTable,它将是 .QueryTables(1)