Очистка и изменение размеров таблиц в Excel VBA - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть таблица, которую я использую для отображения данных. Я хочу, чтобы он изменил свой размер в зависимости от размера данных, которые должны отображаться. Я уже реализовал эту часть.

Однако у меня возникли проблемы с последующей очисткой стола. Я хочу написать функцию, которая очищает все поля в таблицах DataBodyRange и изменяет размер до 1, не изменяя ничего в таблице . Я также хотел бы не полагаться на код, такой как

Worksheets("Sheet").ListObjects("table").Resize Range("B13:K15")

, который использует ссылку на определенные ячейки stati c, такие как B13 или K15, поскольку перемещение таблицы нарушило бы функцию, если бы я использовал это.

Что мне нужно, так это «Изменить размер DataBodyRange до 1 строки». Как мне это сделать?

РЕДАКТИРОВАТЬ:

Ответ Дагана в основном делает то, что я хочу, однако я больше не могу выбирать свои таблицы DataBodyRange после использования функция очистки.

Мой код:

Функция очистки:

Sub clearAllocationsView()
    Worksheets("sheet").ListObjects("table").DataBodyRange.ClearContents
    Worksheets("sheet").ListObjects("table").Resize Range("table[#All]").Resize(2, 10)
End Sub

Функция заполнения таблицы:

Sub getAllocations()

    Dim cmd As New ADODB.Command

    Set t = Worksheets("sheet").ListObjects("table").DataBodyRange
    data = transposeArray(cn.Execute("select * from some_table").GetRows)
    t.Resize(UBound(data, 1) - LBound(data, 1) + 1, UBound(data, 2) - LBound(data, 2) + 1) = data

End Sub

Где находится transposeArray просто написанная функция транспонирования, потому что стандартная транспонирование VBA имеет проблемы с нулевыми значениями.

Чтобы дать более подробную информацию о текущей ситуации: моя функция заполнения таблицы работает (заполнение данных и изменение размера таблицы в зависимости от размера данных) , функция очистки работает, однако после вызова функции очистки я больше не могу вызывать ни заполнение таблицы, ни функцию очистки, обе ошибки с

объектной переменной с блочной переменной, не установленной

относительно DataBodyRange таблицы.

Есть идеи?

1 Ответ

1 голос
/ 18 февраля 2020

Попробуйте это

Worksheets("Sheet").ListObjects("table").DataBodyRange.ClearContents

Worksheets("Sheet").ListObjects("table").Resize Range("table[#All]").Resize(2, 10)

Где 2 - заголовок + 1 строка данных (минимум для таблиц).

Где 10 - количество столбцов от B до K.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...