vba从集合中将数据写入listobject(性能)

时间:2015-08-03 20:39:30

标签: arrays vba collections listobject

我在将数据写入表(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

但是,我现在遇到变量数组中的值时遇到类型不匹配错误。因为我有一个集合,所以我无法真正地重新训练数组。

有什么想法?首先构建阵列是否有意义?如何有效地将数据写入表(listobjects)?

1 个答案:

答案 0 :(得分:0)

在调用Redim之前,您的变量不是数组。在此之前,它是Empty,它是Variant的默认值。尝试在循环之前添加它。

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