2017-03-31 2 views
0

평가가있는 수식이 테스트 통합 문서에서 정상적으로 작동합니다. 모든 결과가 좋습니다.VBA - 반환 값 # VALUE

정확히 일치 코드은 (다른 매크로가 포함 된) 통합 문서에서 #Value를 반환합니다. 오류 코드는 2029입니다. 또한 코드에서 결과를 얻는 수식을 시트에 넣을 때 (디버깅 할 때 또는 직접 코드에서) 셀에서 Ctrl + Shft + Enter를 수행하면 결과가 정확합니다. 수식이 어디에 있는지.

결과적으로, 내가 이해하는 것은 수식이 Application.Evaluate에 의해 평가되지 않는다는 것입니다. 가능한 원인에 대한 힌트가 있습니까? 다음은 당신이 비슷한 문제에 직면하는 경우

Const TEMPLATE = "=INDEX({0},MATCH(1,({1}={2})*({3}={4}),{5}))" 
Const MATCH_TYPE = 0 

Dim originalReferenceStyle 
originalReferenceStyle = xlA1 
Application.ReferenceStyle = xlR1C1 

Dim myFormula As String 
myFormula = Replace(TEMPLATE, "{0}", amountRange.Address(External:=True)) 
myFormula = Replace(myFormula, "{1}", accountRange.Address(External:=True)) 
myFormula = Replace(myFormula, "{2}", accountCriteria.Address(External:=True)) 
myFormula = Replace(myFormula, "{3}", dateRange.Address(External:=True)) 
myFormula = Replace(myFormula, "{4}", dateCriteria.Address(External:=True)) 
myFormula = Replace(myFormula, "{5}", MATCH_TYPE) 
myIndexMatch = Application.Evaluate(myFormula) 
+2

평가 라인 전에이'msgbox myformula'을 넣고 기대했던 것처럼 보이는지 확인하십시오. 그런 다음 복사하여 셀에 붙여넣고 작동하는지 확인하십시오. –

+0

http://stackoverflow.com/q/27590768/11683에 따르면 작동해야합니다. – GSerg

+0

감사하지만 동일한 코드가 다른 시트에서 완벽하게 작동합니다. 평가는 잘 작동하지만 다른 매크로와 함께 사용해야하는 스프레드 시트에서는 작동하지 않습니다. 코드에 의해 계산 된 수식을 가로 채면 올바른 것입니다. 복사하여 붙여 넣기하면 Ctrl + Shift + Enter를 누르면 올바른 결과를 얻을 수 있습니다. – Dominique

답변

1

는 식의 길이를 줄여보십시오 코드의 일부입니다! Evaluate가 255 자 이상의 수식을 좋아하지 않는 것 같습니다 (FormulaArray와 동일) !!! 수식에서 (External : = True)를 사용하여 범위를 참조하는 경우 파일 이름이 포함됩니다. 필자의 경우 파일 이름을 2 자로 줄이는 것이 트릭입니다. 희망이 도움이 될 것입니다 ...