写入数组到单元格的单元格:数组没有完全显示在范围内

所以我有一个有很多数据的数组,我曾经把数据写入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