如何在VBA

时间:2016-08-18 20:52:04

标签: excel vba excel-vba excel-2016

我尝试刷新有关单元格更改的查询,但是我无法弄清楚如何引用查询。

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

只是出错:

  

运行时错误' 1004':

     

应用程序定义或对象定义的错误

我有一张名为"名册过滤器"有我要刷新的查询表。如何获取QueryTable并刷新它?

编辑:也尝试过:

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

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

2 个答案:

答案 0 :(得分:11)

tables 之前,查询表是旧版Excel的遗留物。不确定如何在Excel 2007 +中创建一个。

如果您通过数据/获取外部数据功能区菜单添加了QT,那么您添加的内容实际上是ListObject

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

Excel creates a 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)