我尝试使用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':应用程序定义或对象定义错误
答案 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的一个大问题。