我正在努力做一件简单的事情。如何调整具有动态最后一列的表的大小?
Sub rezise_table()
Dim lcol As Long
lcol = ActiveSheet.ListObjects("tblN").DataBodyRange.Columns.Count
ActiveSheet.ListObjects("tblN").Resize Range("A1" & lcol)
End Sub
这将给出运行时错误1004-“错误对齐错误”。我了解我的代码不知道最后一行,但是当最后一列是动态的时如何声明呢?搜索没有给我类似的情况,这很奇怪,因为这应该是一个相当普遍的情况?也许我搜索了错误的关键字... 帮助表示赞赏。
答案 0 :(得分:2)
DataBodyRange.Columns
已经为您提供了表中的列。那么为什么要调整它的大小呢?我认为您想在工作表而不是表格中找到实际的列?
实际代码中的Range("A1" & lcol)
也不正确。如果最后一列为10,则"A1" & lcol
变为A110
。请参见下面的代码。
这是您要尝试的吗?我假设活动表的第1行有标题。
Sub rezise_table()
Dim lcol As Long, lRow As Long
Dim lastCol As String
Dim ws As Worksheet
Set ws = ActiveSheet
With ws
lcol = .Cells(1, .Columns.Count).End(xlToLeft).Column
lRow = 3 '<~~ 2 rows + 1 Header row
lastCol = Split(.Cells(, lcol).Address, "$")(1)
.ListObjects("tblN").Resize .Range("A1:" & lastCol & lRow)
End With
End Sub
答案 1 :(得分:0)
我最后的参考工作代码(以表名A1表示。表本身从第3行开始,在第5行结束):
Sub clearandresize()
Dim tblN As String, lcol, lrow As Long, ws As Worksheet
Set ws = ActiveSheet
tblN = ws.Range("A1")
ActiveSheet.ListObjects(tblN).AutoFilter.ShowAllData
Range(tblN).Select
Selection.ClearContents
With ws
'lcol = .Cells(1, .Columns.Count).End(xlToLeft).Column
lcol = ws.ListObjects(tblN).DataBodyRange.Columns.Count
lrow = 5 '<~~ 2 rows + 1 Header row
lastCol = Split(.Cells(, lcol).Address, "$")(1)
.ListObjects(tblN).Resize .Range("A3:" & lastCol & lrow)
End With
Range("A1").Select
Application.CutCopyMode = False
End Sub