2017-03-31 184 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个字母就可以了! 希望这会有所帮助...