2013-04-24 2 views
1

2 차원 VBA 동적 배열에서 double 형의 큰 행렬을 생성합니다. 즉,하지 않는 한Excel : 런타임 오류 '1004'Worksheet.Activate를 호출하지 않고 Range에 VBA Array를 할당합니다.

Runtime Error '1004': 

Application-defined or Object-defined Error 

, 나는 할당하기 전에 Worksheet.Activate 전화 : 나는 엑셀 Range 개체의 배열을 할당 할 때, 나는 다음과 같은 오류가 발생합니다. (배열의 크기는 약 88 X 1150) 여기 코드 싹둑입니다 : 문제는 세포 개체이다

Dim lIndxRow As Long, lIndxRowBase As Long, lIndxRowLast As Long, lIndxCol As Long, lIndxColBase As Long, lIndxColLast As Long 
lIndxRow = [Close_FirstRow] 
lIndxRowBase = [Close_FirstRow] 
lIndxRowLast = [Close_LastRow] 
lIndxColBase = [Close_FirstCol] 
lIndxColLast = [Close_LastCol] 

Dim Mat() As Double 
ReDim Mat(lIndxRowBase To lIndxRowLast, lIndxColBase To lIndxColLast + 1) 


While lIndxRow <= lIndxRowLast 
    nSharesTotal = 0# 
    While lIndxCol <= lIndxColLast 
     Dim nShares As Double 
     ' 
     ' Calculate value for nShares 
     ' 
     Mat(lIndxRow, lIndxCol) = nShares 
     nSharesTotal = nSharesTotal + nShares 
     lIndxCol = lIndxCol + 1 
    Wend 
    Mat(lIndxRow, lIndxCol) = nSharesTotal 
    lIndxRowPrev = lIndxRow 
    lIndxRow = lIndxRow + 1 
Wend 
' no error when next line uncommented 
'Worksheets("Share Pos").Activate 
Worksheets("Share Pos").Range(Cells(lIndxRowBase, lIndxColBase), Cells(lIndxRowLast, lIndxColLast + 1)).Value2 = Mat 

답변

2

가 완전하지 않습니다. 당신은 그들을 완벽하게 자격을 취득해야합니다. 이것을 시도하십시오 (세포 앞에 DOT를 알려주십시오.)

With Worksheets("Share Pos") 
    .Range(.Cells(lIndxRowBase, lIndxColBase), .Cells(lIndxRowLast, _ 
    lIndxColLast + 1)).Value2 = Mat 
End With 
+0

감사합니다. 또 다른 전투는 비밀스러운 오류 메시지와의 전쟁에서 승리했습니다. – ThomasMcLeod