excel VBA 用数组值填充 listobject 取决于数组的数据类型 variant/string

excel VBA populate listobject with array values depends on datatype of array variant/string

我必须在 Excel 的 Listobjects 中操作数据,而不是用循环填充列我试图一次性将数组的值粘贴到 listobject 位置以加快速度(访问列表对象和单元格一个一个更新非常慢)。

几周前我在 SO 中发布了这个问题:

尽管如此,我正在观察以下内容:

'variables
Dim mylistObject As ListObject
    Set mylistObject = ThisWorkbook.Sheets("training").ListObjects(1)
Dim i As Integer

' the two arrays to be pasted are defined differently
Dim theArray() As Variant
    theArray = mylistObject.ListColumns(1).DataBodyRange.value
    ' where column 1 is populated with numbers.
Dim otherArray() As String
    otherArray = Split("1,2,3,4,5,6,7,8,9", ",")

'lets paste both arrays with insertion point a particular cell (item 5)

 ' a) if the two ranges are the same size, i.e. one column copied I can do:
mylistObject.ListColumns(2).DataBodyRange.value = theArray

' b) lets paste the two arrays in from item 5 on using resize (note ubound of thearray is 9, i.e. base 1)
mylistObject.ListColumns(3).DataBodyRange.item(5).Resize(UBound(theArray), 1).value = theArray

' c) lets paste the otherarray in column 4 (note ubound of thearray is 8, i.e. base 0)
mylistObject.ListColumns(4).DataBodyRange.item(5).Resize(UBound(otherArray) + 1, 1).value = otherArray

'the classical but slow way to paste value by value is:
For i = LBound(otherArray) To UBound(otherArray)
    mylistObject.ListColumns(5).DataBodyRange.item(4 + i).value = otherArray(i)
Next i

我得到这个结果(见图),这真的很奇怪。当数组是字符串类型时,为什么粘贴第二个数组(otherarray)不起作用。

如果您想知道为什么我只是不将 otherarray 更改为 variant 是因为那样我就无法使用 split() 方法生成 otherarray。

当数组是一维数组时,它应该是水平的。 这就是为什么我只在所有单元格中粘贴了第一个值。

为了在一列中正确粘贴一维数组,需要将其转置为

mylistObject.ListColumns(4).DataBodyRange.item(5).Resize(UBound(otherArray) + 1, 1).value =application.transpose(other_array)

其中 other_array 是一个维度,我们要用它来垂直填充项目 5 的第 4 列。