写入数组到单元格的单元格:数组没有完全显示在范围内
所以我有一个有很多数据的数组,我曾经把数据写入Excel工作表的循环,但是花了太长时间,所以我研究了更快的select。
现在我尝试显示信息,并将单元格的值范围直接设置为数组:
Sub displayRandomMatrix(clientsColl As Collection, resultWorkbook As Workbook) Dim NamesRange As Range With resultWorkbook.Worksheets("matrix_random") ... Set NamesRange = _ .Range(.Cells(2, 1), .Cells(clientsColl.Count + 1, 1)) Dim NamesArray() As String ReDim NamesArray(1 To clientsColl.Count) Dim clientRow As Long Dim simulation As Long clientRow = 1 simulation = 1 Dim clientCopy As client For Each clientCopy In clientsColl For simulation = 1 To clientCopy.getRandomNumbers.Count ... Next NamesArray(clientRow) = clientCopy.getClientName clientRow = clientRow + 1 Next ... NamesRange.value = NamesArray ... End With 'debugging Debug.Print "**************start" For clientRow = 1 To clientsColl.Count Debug.Print NamesArray(clientRow) Next Debug.Print "**************end" End Sub
但是,当我然后打开一个resultWorkbook
我看到相同的客户端名称被写入第一列所有需要的单元格。 同样,代码的debugging部分会生成正确的输出 – 该数组中有正确的多个客户端名称。
所以当我将这个数组赋值给一个范围时,某些事情会被破坏: NamesRange.value = NamesArray
。
同时我也和其他数组做类似的事情,并且它可以正常工作,但是这个同时也带来了bug。
可能是什么原因?
注意: clientsColl
是一个很好的,正确的客户端集合。 它没有什么不对,也没有与resultWorkbook
。
NamesArray是一个水平数组,您试图将其分配给垂直范围。 尝试使用Application.Transpose
NamesRange.value = Application.Transpose(NamesArray)
转置是一个快速修复,但有其局限性。 所以,如果这不起作用,你将需要通过在你的数组中声明第二维来强制垂直数组:
ReDim NamesArray(1 To clientsColl.Count, 1 to 1)
然后当你填写它,确保包括第二个维度:
NamesArray(clientRow,1) = clientCopy.getClientName
然后你可以像下面这样分配它:
NamesRange.value = NamesArray