2017-03-31 146 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

謝謝,但同樣的代碼完美地在另一張表。評估工作正常,但不是在我應該使用的電子表格中,與其他宏一起使用。當我攔截由代碼計算出的公式時,它是正確的。複製並粘貼到工作表中後,按Ctrl + Shift + Enter鍵輸入正確結果 – Dominique

回答

1

如果你面對類似的問題,儘量減少公式的長度的一部分! 看來Evaluate不喜歡超過255個字符的公式(與FormulaArray相同)!!! 請注意,如果您在公式中使用(External:= True)引用範圍,則會包含該文件的名稱......在我的情況下,將文件名縮小爲2個字母就可以了! 希望這會有所幫助...