VBA。带有动态最后一列的Rezise表

时间:2019-03-11 08:27:20

标签: excel vba

我正在努力做一件简单的事情。如何调整具有动态最后一列的表的大小?

Sub rezise_table()
Dim lcol As Long
lcol = ActiveSheet.ListObjects("tblN").DataBodyRange.Columns.Count
        ActiveSheet.ListObjects("tblN").Resize Range("A1" & lcol)
End Sub

这将给出运行时错误1004-“错误对齐错误”。我了解我的代码不知道最后一行,但是当最后一列是动态的时如何声明呢?搜索没有给我类似的情况,这很奇怪,因为这应该是一个相当普遍的情况?也许我搜索了错误的关键字... 帮助表示赞赏。

2 个答案:

答案 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

enter image description here

答案 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