写入数组从数组到范围:数组未完全显示在范围

时间:2017-11-21 14:06:30

标签: arrays excel vba excel-vba

所以我有一个包含大量数据的数组,我过去常常将数据写入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也没有。

1 个答案:

答案 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