Excel 2013 VBA ListObject Table 调整大小不起作用

Excel 2013 VBA ListObject Table Resize won't work

我试图在使用 VBA 将数据粘贴到下面的行中后动态调整 ListObject table 的大小。只要发生调整的 Sheet02 是活动的 sheet,调整大小就可以正常工作 - 但当 Sheet02 不是活动的 sheet 时会引发错误。我错过了什么?

代码片段:

Function Resize()
  lastRow = Sheet02.Cells(Rows.Count, "G").End(xlUp).Row
  newRange = "$A1:$G$" & lastRow
  Sheet02.ListObjects("tblDb").Resize Range(newRange)
End Function

错误:运行-时间错误'1004':应用程序定义或对象定义的错误

尝试不更新屏幕并将焦点更改为 sheet02。接下来,对 sheet02 进行更改。最后,return 将注意力放在 sheet 之前的任何事情上。

Function Resize()
Let Application.ScreenUpdating = False

Dim Current_Worksheet As Worksheet
Dim Sheet_02 As Worksheet

Set Current_Worksheet = ActiveSheet

Set Sheet_02 = Sheet02

Let lastRow = Sheet_02.Cells(Rows.Count, "G").End(xlUp).Row
Let newRange = "$A1:$G$" & lastRow

Call Sheet_02.Activate
DoEvents
Sheet_02.ListObjects("tblDb").Resize Range(newRange)
DoEvents
Call Current_Worksheet.Activate

Let Application.ScreenUpdating = True

End Function

在 运行 之后对 table 下的数据进行了更多测试 显示没有任何错误的问题 - 不在 sheet,也不是来自它之外。

我遇到的问题如下:

我正在 使用 QueryTables.Add 从 .CSV 文件导入数据,利用 Excel 附带的导入实用程序。事实证明这样做,它 创建一个查询连接 ,一个实时 "Link" 到您导入的文件,因此它可以在文件更改时使用该文件的新数据自动更新自身.

在 Excel 中的现有 Table 对象中使用导入无效,因为 Table 对象和查询连接内容不一致 事实证明,特别好。在这一点上你可能会意识到这是怎么回事。

所以我扩展了代码以从 table 下面的 .CSV 导入,然后继续从 sheet 中删除查询连接,并调整 table 的大小现在已断开连接,导入的 .CSV 文件的纯文本内容。

ImportCSV 函数恰好包含这段特定的代码:

For Each queryConnec In ActiveSheet.QueryTables
  queryConnec.Delete
Next queryConnec

这就是它在 Sheet 中工作的原因 - 因为我 从 sheet 和 查询连接中导入了这样做已被删除从外部 导入 sheet 时,查询连接当然 未删除 ,这就是调整 Table 大小的原因实时查询连接内容引发错误...

通过以下方式轻松修复:

For Each queryConnec In Sheet02.QueryTables
  queryConnec.Delete
Next queryConnec

tl;dr:一个程序员的小疏忽,变成了 Excel 的一个大问题。