VBA.Изменить размер таблицы с динамическим последним столбцом - PullRequest
1 голос
/ 11 марта 2019

Я борюсь с тем, что должно быть простым делом.Как изменить размер таблицы с последним динамическим столбцом?

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 ]

2 голосов
/ 11 марта 2019

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

0 голосов
/ 11 марта 2019

Мой окончательный рабочий код для справки (берет имя таблицы в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...