2017-11-21 1 views
0

많은 데이터가있는 배열이 있으므로주기를 통해 시트를 Excel로 내보내는 데 익숙하지만 시간이 너무 오래 걸립니다. 빠른 대안을 들여다 보았다. 그러나 그때 나는 같은 클라이언트의 이름이 필요한 모든 작성된 것을 참조하십시오 resultWorkbook을 열 때배열에서 범위로 셀에 쓰기 : 배열이 범위에 완전히 표시되지 않음

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 

을 :

지금 내가 직접 배열에 셀 범위의 값을 설정하여 정보를 표시하려고 1 열의 세포. 코드의 디버그 섹션도 올바른 출력을 생성합니다. 올바른 배열에 여러 클라이언트 이름이 있습니다.

배열에 범위를 할당하면 무언가가 깨지므로 NamesRange.value = NamesArray입니다.

동시에 다른 배열과 비슷한 작업을 수행하지만 작동하지만이 때 버그가 발생합니다.

어떤 이유 일 수 있습니까?

참고 :clientsColl은 올바른 클라이언트 모음입니다. 이 파일에는 아무런 문제가 없으며 resultWorkbook도 마찬가지입니다.

답변

2

NamesArray는 가로 배열로, 세로 범위에 지정하려고합니다. 트랜스가 빠른 수정하지만 한계가있다 Application.Transpose

NamesRange.value = Application.Transpose(NamesArray) 

를 사용해보십시오. 문제가 해결되지 않는 경우에 당신이 당신의 배열에 제 2의 차원을 선언하여 수직 배열을 강제해야합니다 그래서 :

NamesArray(clientRow,1) = clientCopy.getClientName 

: 다음

ReDim NamesArray(1 To clientsColl.Count, 1 to 1) 

당신은 두 번째 차원을 포함해야합니다 채울 때 그런 다음 할당 할 수 있습니다.

NamesRange.value = NamesArray 
+0

고마워요! 또한 코드에 1 차원 배열이 있지만 여러 행 (의미, 가로 방향)으로 한 행을 표시합니다. 가로 배열은 배열로 변환 할 필요가 없다는 것을 의미합니까? – Ans

관련 문제