Медленно при удалении строк из таблицы Excel с помощью ListRows.Item (i) .Delete - PullRequest
1 голос
/ 17 января 2011

Я использую VBA для заполнения диапазона таблиц Excel из подмножества других данных.

Быстрое получение данных (либо из кэшированного массива, либо из запроса SQL на данные в другом листе).), но добавление и удаление - МЕДЛЕННО.

With Worksheets("Overview").ListObjects("OverviewServiceTable")

    For i = .ListRows.Count To 1 Step -1
        .ListRows(i).Delete
    Next

    For i = 0 To UBound(cache)
        Set NewRow = .ListRows.Add(AlwaysInsert:=True)
        NewRow.Range.Cells(1, 1).Value = cache(i)
    Next

End With

Используя немного базового профилирования, для добавления и удаления строк требуется до секунды на строку.Есть ли намного более быстрый способ очистки и обновления такой таблицы?В противном случае я прибегну к использованию «простых» диапазонов ячеек, отформатированных так, чтобы они выглядели симпатично, но тогда приятные вещи, такие как автофильтры и т. Д., Исчезнут.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 17 января 2011

Вы можете попробовать установить расчет вручную и отключить обновление экрана, пока код работает

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

your code here

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
2 голосов
/ 26 сентября 2011

У меня была та же проблема, но отключение вычислений, обновление экрана и т. Д. У меня не сработало.После поиска в Интернете и настройки моего VBA более часа, вот мой обходной путь:

Range("NamedTable").Clear
Range("NamedTable").RemoveDuplicates Columns:=1

Первая строка очищает все строки таблицы с именем NamedTable, оставляя строку заголовка(если он существует).

Во второй строке используется тот факт, что все ячейки в таблице теперь пустые, и удаляются все дублирующиеся строки (анализируя «дубликаты» в первом столбце)

1 голос
/ 12 августа 2013

Я знаю, уже немного поздно, но ..

listobject.DataBodyRange.Rows.Delete

Небольшая помощь для будущих пользователей; o)

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