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

Dou*_*ell 4 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
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*don 12

表格之前,查询表是旧版Excel的遗留物.不知道如何在Excel 2007+中创建一个.

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

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

Excel创建一个ListObject

即时窗格中,我得到以下结果:

?Sheet1.QueryTables.Count
 0
?Sheet1.ListObjects.Count
 1
Run Code Online (Sandbox Code Playgroud)

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

Sheet1.QueryTables(0).Refresh 'runtime error 1004
Run Code Online (Sandbox Code Playgroud)

这个错误只是极其误导,这就是全部 - 它应该是一个超出范围索引.

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

Sheet1.ListObjects(1).Refresh 'works
Run Code Online (Sandbox Code Playgroud)

您也可以通过以下方式访问基础 QueryTable对象ListObject:

?Sheet1.ListObjects(1).QueryTable.CommandText 'gives you the query
Run Code Online (Sandbox Code Playgroud)