VBA - 评估返回#VALUE

时间:2017-03-31 16:22:53

标签: excel vba excel-vba

使用Evaluate的公式在测试工作簿中正常工作。 所有结果都很好。

完全相同的代码返回我应该使用的工作簿中的#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)

1 个答案:

答案 0 :(得分:1)

如果您遇到类似问题,请尝试减少公式的长度! 似乎Evaluate不喜欢超过255个字符的公式(与FormulaArray相同)! 请注意,如果在公式中引用范围(外部:=真),则包含文件名...在我的情况下,将文件名减少为2个字母就可以了! 希望这会有所帮助......