2015-08-03 4 views
0

Я встретив низкую производительность при записи данных в таблицу (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)?

ответ

0

Ваша переменная не является массивом, пока вы не назовете Redim. До этого это Empty, который является значением по умолчанию для Variant. Попробуйте добавить это перед вашим циклом.

ReDim outputArray(1 to mls.mlRecords.Count, 1 to 3) 
+0

Ah ok ReDim основано на количестве элементов в коллекции. Прекрасно работает! Теперь у меня проблема: Sheets (mls.name) .ListObjects (1) .DataBodyRange.Value = outputArray помещает только в первую строку. Я видел, что вы можете изменить размер на основе Range. Однако, это снова является абсолютным, основанным на листе, где находится объект таблицы, правильно? например ActiveSheet.ListObjects («Таблица 3»). Диапазон изменения размера («A1: D10)) Существует ли способ изменить размер« относительных »объектов ListObjects (« Таблица 3 »). Resize (8,200) ?? – heyhey33

+0

Добавление строк в цикл снова настолько медленное ... Для счетчика = 1 Кому mls.mlRecords.Count Листы (mls.name) .ListObjects (1) .ListRows.Add счетчик Следующий счетчик – heyhey33

 Смежные вопросы

  • Нет связанных вопросов^_^