Проблема скорости заключается в том, что цикл и добавление строки каждый раз действительно очень медленный, а добавление 1000 строк на самом деле занимает около 20 секунд!
Каждое взаимодействие (добавление строки) с рабочим листом требует своего времени.Но это занимает почти одинаковое время, независимо от того, добавляете ли вы по 1 строке за раз или 100 за раз.Таким образом, добавление каждой строки в отдельной команде занимает в 100 раз больше времени, чем добавление 100 строк в одной команде.
Теперь существует проблема, заключающаяся в том, что в таблицах объектов списка нет команды для добавления нескольких строк за один раз ,Но вы можете уменьшить количество взаимодействий, используя обходной путь для этого:
- Добавить 100 строк сразу , ниже каждой таблицы списка объектов (На 99 отдельных операций добавления меньше, чем раньше) .
- Затем измените размер таблицы на это новое пространство.
Это сократило время в моем тесте до 0,8 секунды (10 таблиц добавляются каждый100 рядов).Конечно, этот обходной путь работает только для добавления строк в конец таблицы объектов списка.
Public Sub ExtendRowsSpeedyGonzales()
Const ROWS_TO_ADD As Long = 100 'amount of rows to add each table
Const TABLE_COUNT As Long = 10 'amount of tables
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Holdbarhed")
Dim iTable As Long
For iTable = 1 To TABLE_COUNT
With ws.ListObjects(iTable)
Dim OldTableRange As Range
Set OldTableRange = .Range 'remember original size of table
'add rows BELOW table
.Range.Offset(RowOffset:=.Range.Rows.Count).Resize(RowSize:=ROWS_TO_ADD).Insert Shift:=xlDown
'resize table
.Resize OldTableRange.Resize(RowSize:=.Range.Rows.Count + ROWS_TO_ADD)
End With
Next iTable
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub