2017-03-31 5 views
0

Evaluateを含む式は、テストブックで正常に動作します。 すべての結果は良好です。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

ありがとうございますが、SAME CODEは別のシートで完璧に動作します。評価はうまく動作しますが、他のマクロと一緒に使うスプレッドシートでは動作しません。コードで計算された数式を傍受するときは正しいです。 Ctrl + Shift + Enterを押すと正しい結果が得られます – Dominique

答えて

1

の一部です! 評価は255文字以上の式を好きではないようです(FormulaArrayと同じです)! 数式で(External:= True)で範囲を参照すると、ファイルの名前が含まれているので注意してください...私の場合、ファイル名を2文字に減らすのはトリックでした! これが役に立ちますようお願い致します...