2012-09-11 2 views
0
Sub testCov() 
    Rng2 = Sheets("20 Asset Model").Range("b3:f48") 
    Dim covMatrix() As Variant 
    ReDim covMatrix(1 To Rng2.Columns.Count, 1 To Rng2.Columns.Count) 
    Call constructCovMatrix(Rng2, covMatrix) 
    MsgBox (covMatrix) 
End Sub 

Sub constructCovMatrix(rng, ByRef covMatrix) 
    '@rng The Range of the return series. 

    Dim i As Integer 
    Dim j As Integer 
    For i = 1 To rng.Columns.Count 
     For j = 1 To rng.Columns.Count 
      covMatrix(i, j) = Application.WorksheetFunction.Covar(rng.Columns(i), rng.Columns(j)) 
     Next 
    Next 
End Sub 

코드가 ReDim 줄에서 중지되어 개체가 없음을 나타냅니다. 왜 이런거야? 감사합니다서브 루틴의 VBA에서 ReDim

+2

'Rng2 = Sheets ("20 Asset Model") 범위 ("b3 : f48")는 배열이며 범위가 아닙니다. 'Set Rng2 = Sheets ("20 Asset Model"). Range ("b3 : f48")'시도해보십시오. – user3357963

답변

4

범위 객체를 선언 할로 범위를 설정하려면이 시도 : (주석 - 라인)

Sub testCov() 

    Dim Rng2 As Range '- Declare variable 
    Set Rng2 = Sheets("20 Asset Model").Range("b3:f48") '-Set range 
    Dim covMatrix() As Variant 
    ReDim covMatrix(1 To Rng2.Columns.Count, 1 To Rng2.Columns.Count) 
    Call constructCovMatrix(Rng2, covMatrix) 
    MsgBox (covMatrix) 

    Set Rng2 = Nothing '- Cleanup anytime 'Set' is used 
End Sub 

참고 :

당신은 VBA 편집기의 설정으로 이동 할 수 있습니다 모래 클릭 도구> 옵션> 변수 선언 선언> 체크

이렇게하면 모든 변수를 선언해야합니다.

위의 코드는 Rng2을 범위로 선언하지 않았습니다. 따라서 Excel에서 처음으로 Rng2이라는 이름을 볼 때 Variant 유형 변수를 만들고 첫 번째 줄의 시트 범위와 동일하게 설정합니다. Excel에서는 Sheets("20 Asset Model").Range("b3:f48")이 셀의 배열임을 알게되고 나머지 코드에서 배열 유형 변수로 변형 Rng2을 처리합니다. Rng2이라는 변수를 범위로 사용한다고 가정 할 때 그 변수를 선언하고 Set 명령을 사용하여 할당 할 수 있습니다.

변수 유형을 선언 할 때 이런 일이 발생하기 쉽습니다.

+2

'VBA 편집기의 설정 도구> 옵션> 선언> varible decleration> checked'을 클릭하십시오. <--- 나는 이런 식의 문제가 있으므로 항상이 설정을 사용해야합니다. – enderland

관련 문제