我尝试刷新有关单元格更改的查询,但是我无法弄清楚如何引用查询。
我的代码:Sheets("Roster Query").QueryTables(0).Refresh
只是出错:
运行时错误' 1004':
应用程序定义或对象定义的错误
我有一张名为"名册过滤器"有我要刷新的查询表。如何获取QueryTable并刷新它?
编辑:也尝试过:
For Each qt In Sheets("Roster Query").QueryTables
qt.Refresh
Next
这不会出错,但查询不会刷新。
答案 0 :(得分:11)
在 tables 之前,查询表是旧版Excel的遗留物。不确定如何在Excel 2007 +中创建一个。
如果您通过数据/获取外部数据功能区菜单添加了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
您也可以通过QueryTable
访问底层 ListObject
对象:
?Sheet1.ListObjects(1).QueryTable.CommandText 'gives you the query
答案 1 :(得分:2)
您发现错误,因为.Item
方法是基数1,而不是基数0
例如,这在Excel 2016中适用于我:
Sheets("Roster Query").QueryTables(1).Refresh
因此,如果您只有一个QueryTable,那么它将是.QueryTables(1)
。