如何在 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)
。
我正在尝试刷新有关单元格更改的查询,但我不知道如何引用该查询。
我的代码: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)
。