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

Excel VBA。具有动态最后一列的Rezise表,excel,vba,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-“错误对齐错误”。我知道代码不知道最后一行,

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

Sub rezise_table()
Dim lcol As Long
lcol = ActiveSheet.ListObjects("tblN").DataBodyRange.Columns.Count
        ActiveSheet.ListObjects("tblN").Resize Range("A1" & lcol)
End Sub
这会产生运行时错误1004-“错误对齐错误”。我知道代码不知道最后一行,但当最后一列是动态的时,如何声明它?搜索没有给我类似的案例,这是wierd,因为这应该是一个相当常见的案例?也许我用错误的关键字搜索。。。
感谢您的帮助。

DataBodyRange.Columns
将提供表中的列。那么为什么要调整它的大小呢?我想你想在工作表中找到实际的列,而不是表格

另外,实际代码中的
范围(“A1”&lcol)
不正确。如果最后一列为10,则
“A1”&lcol
变为
A110
。请参阅下面的代码

这就是你想要的吗?我假设activesheet的第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
Sub-rezise_表()
变暗lcol为长,lRow为长
将lastCol设置为字符串
将ws设置为工作表
设置ws=ActiveSheet
与ws
lcol=.Cells(1,.Columns.Count).End(xlToLeft).Column

lRow=3'My final working code供参考(采用A1处的表格名称。表格本身从第3行开始,在第5行结束):

Sub-clearandesize()
将tblN标注为字符串,lcol,lrow标注为长,ws标注为工作表
设置ws=ActiveSheet
tblN=ws.范围(“A1”)
ActiveSheet.ListObjects(tblN).AutoFilter.ShowAllData
范围(tblN)。选择
选择.ClearContents
与ws
'lcol=.Cells(1,.Columns.Count).End(xlToLeft).Column
lcol=ws.ListObjects(tblN.DataBodyRange.Columns.Count)

lrow=5'我只发布了代码的相关部分。我真正想要完成的是清除表databodyrange并将其重新zise,使其在databodyrange中只有2行。因此,该表总共有3行,列数可变,具体取决于RISIZE时有多少列。给你举个例子。此代码必须适用于两种情况:表是A1:C3或表是A1:D3谢谢!你帮了我很多@这一行中的Siddharth Rout
lastCol=Split(.Cells(,lcol).Address,“$”)(1)
当应使用
(0)
而不是
(1)时,请详细说明最后一个括号中的部分。
在与表格范围相关的问题上下文中。我不太清楚,可能无法就这一次要问题提出单独的问题,或者请提供我将要讨论的指针。@skkakkar:您将获得的单元格地址类似于
$a$1
$AA$1
或类似格式的内容。代码将在“$”上拆分地址,我们需要列名,因此它将始终是
1
:)此代码也被提及@Siddharth Rout非常感谢您的帮助态度。非常感谢。
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