写入Range.FormulaArray给了我一个#NAME!错误

时间:2014-08-11 19:19:50

标签: excel vba excel-vba excel-formula excel-2010

这里没什么好看的,尽管我需要将公式拆分为2,因为它超过255个字符(来源:http://www.dicks-blog.com/archives/2005/01/10/entering-long-array-formulas-in-vba/ http://support.microsoft.com/kb/213181)。

    f1 = "=SI(1=1,SOMME(SI(mySheet!$R:$R = ""something"",SI(mySheet!$AQ:$AQ = AM$1, NBCAR(Incidents!$AP:$AP)-NBCAR(SUBSTITUE(mySheet!$AP:$AP,$B2,"""")))))/NBCAR($B2)-X_X_X())"
    f2 = "SOMME(SI(mySheet!$R:$R = """",SI(mySheet!$AQ:$AQ = AM$1, SI(mySheet!$AM:$AM = $A2,SI(DROITE(mySheet!$AP:$AP,6) = $B2,1))))),"""""
    .Range("AM2").FormulaArray = f1
    .Range("AM2").Replace "X_X_X()", f2

公式是法语,这不应该是真的重要。公式在单元格AM2中正确返回,因此结果如下:

={SOMME(SI(1=1;SI(mySheet!$R:$R = "something";SI(mySheet!$AQ:$AQ = AM$1; NBCAR(mySheet!$AP:$AP)-NBCAR(SUBSTITUE(mySheet!$AP:$AP;$B2;"")))))/NBCAR($B2)-SOMME(SI(mySheet!$R:$R = "something";SI(mySheet!$AQ:$AQ = AM$1; SI(mySheet!$AM:$AM = $A2;SI(DROITE(mySheet!$AP:$AP;6) = $B2;1)))));"")}

然而,我得到一个#NAME!错误。如果我查看公式调试,错误来自我的第一个函数,Excel无法解释SI()(这是IF()的法语)。我尝试完全删除IF()子句,但Excel无法解释现在为SOMME()SUM())的第一个函数。

如果我只是点击公式栏并按CTRL + Shift + Enter(不更改任何内容),它将返回正确的值。

为什么在VBA设置数组公式后Excel没有给我正确的数字?如果我只是重新提交 Excel中的公式,为什么它会起作用?为什么它总是遇到第一个功能的问题?我想还有其他一些我不知道的限制。

我在浏览网页时发现了另一个类似问题但没有解决方案。

1 个答案:

答案 0 :(得分:4)

因为Excel对于英语公式有.Formula,对于Excel界面语言的公式有.FormulaLocal

您需要本地版本,但没有数组版本。你必须用英语提供数组公式。

你可以,例如将此法语公式设置为临时(隐藏)范围的.FormulaLocal,然后从同一范围读回.Formula并将其设置为所需范围内的.FormulaArray。但是你不应该这样做,因为你的代码不适用于法语之外的任何Excel版本。最便携的是在代码中始终使用英语公式。