Я встретив низкую производительность при записи данных в таблицу (ListObject)данных VBA записи в ListObject из коллекции (исполнения)
У меня есть набор объектов и хотят писать их построчно строки в таблицу
For Each msrecord In mls.mlRecords
Dim oNewRow As ListRow
Set oNewRow = Sheets(mls.name).ListObjects(1).ListRows.Add(AlwaysInsert:=True)
oNewRow.Range.Cells(1, 1).Value = msrecord.id
Next msrecord
Однако это слишком медленно. Я попробовал Application.ScreenUpdating = False с неуспехом.
Моя идея - сначала заполнить массив, а затем сразу же записать его в таблицу.
Dim outputArray As Variant
Dim counter As Long
For counter = 1 To mls.mlRecords.Count
outputArray(counter, 1).Value = msrecord.id
outputArray(counter, 2).Value = msrecord.name
outputArray(counter, 3).Value = msrecord.morefields
Next
Sheets(mls.name).ListObjects(1).DataBodyRange.Value = outputArray
Однако при проверке значений в массиве вариантов я сталкиваюсь с ошибкой несоответствия типа. Я не могу действительно ReDim массив, так как у меня есть коллекция, с которой можно начать.
Любые мысли? Имеет ли смысл сначала создать массив? Как я могу эффективно записывать данные в таблицу (listobjects)?
Ah ok ReDim основано на количестве элементов в коллекции. Прекрасно работает! Теперь у меня проблема: Sheets (mls.name) .ListObjects (1) .DataBodyRange.Value = outputArray помещает только в первую строку. Я видел, что вы можете изменить размер на основе Range. Однако, это снова является абсолютным, основанным на листе, где находится объект таблицы, правильно? например ActiveSheet.ListObjects («Таблица 3»). Диапазон изменения размера («A1: D10)) Существует ли способ изменить размер« относительных »объектов ListObjects (« Таблица 3 »). Resize (8,200) ?? – heyhey33
Добавление строк в цикл снова настолько медленное ... Для счетчика = 1 Кому mls.mlRecords.Count Листы (mls.name) .ListObjects (1) .ListRows.Add счетчик Следующий счетчик – heyhey33