2013-06-04 2 views
0

이 질문에 대한 질문이 많이 제기되었지만 문제에 적용 할 수있는 대답을 보지 못했습니다. 이 오류는 상당수 발생합니다. 나는 그것이 관련이 있다고 생각하기 때문에,표현식이 너무 복잡합니다.

SurfArea = 19.63495408 
Volume = 12.2718463 
DeSimpleFinal = 0.009336098 
Counter = 13 
pi = 4*atn(1) 
tracker = 0 
stepamount = (Range("A" & Counter + 1).Value)/1000 
If Range("XFD1048508").Value = 1 Then 
    For x = 0 To Range("A" & Counter + 1).Value Step Stepamount 
     tracker = tracker + 1 
     ActiveSheet.Range("XEY" & tracker).Value = ((2 * SurfArea)/Volume) * Sqr((DeSimpleFinal * x)/pi) 
     ActiveSheet.Range("XEX" & tracker).Value = x 
    Next 
Else 
End If 

나에 (범위 ("A"& 카운터 + 1) .Value)를 떠나기로 결심했습니다 모든

첫째, 여기에 코드입니다 왜 코드가 무너지고 있는지. 그 셀은 A14이고 내부에 값 11을 가지고 있습니다.

디버깅 할 때 플래그가 지정된 줄은 For 루프의 첫 번째 줄입니다. 루프는 한 번의 반복을 거치지 않습니다.

아무도 아이디어가 될 수 있습니까? 모든 데이터 형식을 variant로 변경하여 문제인지 확인했지만 아무 것도 수행하지 않았습니다. 도와 줘서 고마워!

EDIT :이 범위의 값은 하나 여야하므로 루프를 통과해야합니다.

+0

코드를 실행할 때 오류가 발생하지 않습니다. 어떤 오류 메시지가 나타 납니까? – sous2817

+0

런타임 오류 '16'이 발생합니다.식이 너무 복잡합니다. – TheTreeMan

+0

XFD1048508의 값이 1로 설정되어 For 루프를 통과합니까? – TheTreeMan

답변

3

이유를 이해하기 위해 VBA 내부에 대해 충분히 알지 못하지만 FOR 루프의 제한을 설정하는 식을 단순화하면 Error 16 - Expression Too Complex 문제가 해결됩니다. (this SO post뿐만 아니라 다른 웹 토론에 대한 응답은 거의 같은 결론에 온다.)

그냥 다음에 당신이 FOR 조건에 사용 된 표현을 할당, 말, StopAmount을 새 변수를 선언하고 FOR의 표현식을 새 변수의 이름으로 바꿉니다. 당신은 다음과 같은 것을 얻을 수 있습니다 :

StopAmount = Range("A" & Counter + 1).Value 
    ...... 
    For x = 0 To StopAmount Step Stepamount 
    ...... 

그런데 분명히 이상한 점이 있습니다.

예를 들어 이터레이터 변수 x이 암시 적 또는 명시 적으로 Variant로 선언 된 경우 원래 FOR 조건이 제대로 작동합니다. (모든 테스트를위한 변수를 선언했습니다.)

그러나 x이 Double로 지정된 경우 오류가 반환됩니다. 이는 TypeName(x)이 범위 (..) 다음에 Variant x을 Double로 표시 했음에도 불구하고 값 할당이 이루어 졌음에도 불구하고입니다.

For x = 0 To Range("A14").Value Step Stepamount도 문제없이 실행되었습니다.

For x = 0 To Cells(Counter + 1, 1).Value Step Stepamount도 작동했습니다.

+0

놀라운 대답에 감사드립니다. 두 가지가 나를 위해 가장 혼란스러운 부분입니다. 우리는 VBA가 신비한 방식으로 작동하고 계속 움직여야한다는 것을 인정해야합니다. :피 – TheTreeMan

관련 문제