所以我有一个包含大量数据的数组,我过去常常将数据写入excel表格,但是花了太长时间,所以我研究了更快的替代方案。
现在我尝试通过将单元格范围的值直接设置为数组来显示信息:
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
时,我看到同一个客户端的名字写在第一列的所有需要的单元格中。同时,代码的调试部分产生正确的输出 - 该数组中有正确的多个客户端名称。
当我将该数组分配到范围时,某些内容会被破坏:NamesRange.value = NamesArray
。
与此同时,我对其他数组做了类似的事情并且它可以正常工作,但是这个问题就出现了。
可能是什么原因?
注意: clientsColl
是一个很好的,正确的客户端集合。它没有任何问题,resultWorkbook
也没有。
答案 0 :(得分:2)
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