Excel 2013 VBA 列表对象表大小调整不起作用



我试图用VBA将数据粘贴到以下行中后,将ListObject表大小。调整大小的工作效果很好,只要Sheet02发生,即活动表就是活动表格 - 但是当Sheet02不是活动表时,会引发错误。我想念什么?

代码段:

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

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

在运行了更多测试后,在表下方使用数据下方的数据 揭示了没有任何错误的问题。

我的问题如下:

i是使用QueryTables.ADD 从.csv文件导入数据,并使用Import Utility Excel随附。事实证明,它创建了一个查询连接,一个live" link"到您导入的文件,因此它可以自动使用该文件更改的新数据自动更新自身。

使用Excel中现有表对象中的导入不起作用,因为表对象和查询连接内容并没有尤其好,因为事实证明。在这一点上,您可能会意识到这是在哪里。

因此,我将代码扩展到从表正下方的.csv导入的代码,然后从表格上删除查询连接,然后通过现已断开的Emported .csv文件的现在断开的纯文本内容调整表格。/p>

ImportCSV函数恰好包括此特定代码片段:

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

这就是它在工作表中工作的原因 - 因为从表中i 导入,并且在这样做时已删除了查询连接。当从外部导入表格时,查询连接当然是未删除,这就是为什么通过实时查询连接内容调整表格上的表格的原因...

轻松修复:

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

tl; DR:对程序员的微小监督,变成了Excel的一个巨大问题。

尽量不要更新屏幕并将焦点更改为Sheet02。接下来,将您更改为Sheet02。最后,将焦点归还到您所在的任何表格中。

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

最新更新