2016-08-12 6 views
2

나는 두 개의 배열을 비교 한 스프레드 시트로 거의 완성되었지만 한 배열에 있었던 것과 다른 배열에있는 배열은 모두 세 번째 배열에 들어간 것이 아닙니다.VBA의 셀에 긴 배열 배열 인쇄 범위 오류

그런 다음 배열의 값을 통합 문서의 시트에 셀에 넣으려고합니다. 그러나 배열에 디버거의 값이 표시 되어도 배열의 범위를 벗어나는 첨자가 나타납니다.

If (Not MissingLoans) = -1 Then 
    ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1) = "No Missing Loans Found on Roll-Up" 

Else 
    For i = 1 To (UBound(MissingLoans())) Step 1 
     *** ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1).Value = MissingLoans(i) 

     PrintCell = PrintCell + 1 
    Next 
End If 

I 내게 범위 오차의 출력을 제공하는 선으로 별표 듯하지만 MissingLoans (I)의 값을 도시한다 : 여기

배열을 출력하는 루프이다. 사실 Missingloans (1)은 배열의 유일한 값입니다.

+1

실패했을 때'PrintCell'의 가치는 무엇입니까? –

+0

11. 셀 A11에서 시작하여 내림차순으로 작업 중 –

+0

'입력 및 결과'라는 워크 시트가 존재하지 않는 것 같습니다. –

답변

0

배열에 값이 하나만있는 경우 배열이 0부터 시작하므로 Missingloans(0)으로 액세스해야합니다.

, 오히려 배열을 루프보다이

For i = LBound(MissingLoans()) To (UBound(MissingLoans())) Step 1 
    ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1).Value = MissingLoans(i) 
    PrintCell = PrintCell + 1 
Next 
+0

데이터는 1부터 시작하는 배열에 저장됩니다. 옵션베이스 1로 변경하고 Lbound를 사용했습니다. 오류가 계속 발생합니다. –

+0

루프가 '1'이지만 Ubound == 0 인 경우 루프가 실행되지 않으므로 배열 바인딩 *을이 오류의 소스로 사용할 수 없습니다. 내 돈은 워크 시트 이름에 있습니다. –

0

을 시도해보십시오 시트에 직접 배열을 할당 : 워크 시트가 존재하지 않는 Inputs and Results라는 이름의 경우이 코드는 또한 오류가 발생한다

Else 
    Dim myRange as Range 
    Set myRange = ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1) 

    '## Assumes Option Base 0, if Option Base 1, remove the +1 
    myRange.Resize(Ubound(MissingLoans)+1).Value = Application.Transpose(MissingLoans) 

    Next 
End If 

ThisWorkbook에, 내가 의심하는 것은 범위 밖의 아래 첨자의 진짜 원인입니다.

참고 : 저는 단지 Option Base 0을 사용합니다. 기본값이며 장황한 경우가 많습니다. 그냥 함께 사는 법을 배웁니다. 배열 0, 1에 채우기도 시작합니다. 그러나 Option Base 0을 1 ...에서 채우라고 주장하면 배열의 반복 For i = 1 To UBound(MissingLoans) 루프 또는 ReDim Preserve을 수행해야합니다. , 어느 쪽이든 위의 설명처럼 직접 배열> 범위 할당을 통해 더 쉽게 할 수있는 것을 복잡하게 만들지는 않는다고 생각합니다.