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

时间:2018-03-28 22:55:26

标签: excel vba excel-vba listobject

我尝试使用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':应用程序定义或对象定义错误

2 个答案:

答案 0 :(得分:0)

尝试不更新屏幕并将焦点更改为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

答案 1 :(得分:0)

使用表格下面的数据运行一些更多的测试手动放置显示没有任何错误的任何问题 - 不在工作表内,也不在工作表之外。

我案中的问题如下:

使用QueryTables.Add 从.CSV文件导入数据,利用Excel附带的导入工具。事实证明,创建了一个查询连接,这是您导入的文件的实时“链接”,因此如果更改,它可以使用该文件中的新数据自动更新。

使用Excel中现有Table对象中的导入不起作用,因为事实证明表对象和查询连接内容不能相处特别好。此时你可能会意识到这一点。

所以我将代码扩展为从表格下方的.CSV导入,然后继续从工作表中删除查询连接,并在导入的.CSV文件的现在断开连接的纯文本内容上调整表格大小。 / p>

ImportCSV函数碰巧包含了这段特殊代码:

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

这就是它在工作表中起作用的原因 - 因为我从工作表中导入并且查询连接已被删除这样做。当从外部导入工作表时,查询连接当然是未删除,这就是为什么在实时查询连接内容上调整表格会引发错误...

通过以下方式轻松修复:

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

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