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 的一个大问题。
我试图在使用 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 的一个大问题。