Vba 写入Range.formulararay会给我一个#名称!错误

Vba 写入Range.formulararay会给我一个#名称!错误,vba,excel,excel-formula,excel-2010,Vba,Excel,Excel Formula,Excel 2010,这里没有什么特别的,尽管我需要将公式拆分为2,因为它超过255个字符(来源:) 公式是用法语写的,这不重要。公式在单元格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

这里没有什么特别的,尽管我需要将公式拆分为2,因为它超过255个字符(来源:)

公式是用法语写的,这不重要。公式在单元格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)))));"")}
然而,我得到了一个#名字!错误。如果我查看公式调试,错误来自我的第一个函数,Excel无法解释
SI()
(这是法语中的
If()
)。我试图完全删除
IF()
子句,但Excel无法解释第一个函数,即现在的
SOMME()
SUM()

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

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


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

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

您需要本地版本,但没有用于阵列的本地版本。您必须提供英文数组公式


例如,您可以将此法语公式设置为临时(隐藏)范围的
.FormulaLocal
,然后从同一范围读回
.formula
,并将其设置为所需范围的
.FormulaArray
。但您不应该这样做,因为您的代码在除法语以外的任何Excel版本上都无法工作。最可移植的方法是在代码中始终使用英文公式。

因为Excel在英文公式中使用了
.Formula
,在Excel界面语言中使用了
.FormulaLocal

您需要本地版本,但没有用于阵列的本地版本。您必须提供英文数组公式


例如,您可以将此法语公式设置为临时(隐藏)范围的
.FormulaLocal
,然后从同一范围读回
.formula
,并将其设置为所需范围的
.FormulaArray
。但您不应该这样做,因为您的代码在除法语以外的任何Excel版本上都无法工作。最可移植的方法是在代码中始终使用英语公式。

因为Excel有
.Formula
用于英语公式,而
.FormulaLocal
用于Excel界面语言的公式。您需要本地版本,但没有用于阵列的本地版本。您必须提供英文数组公式。例如,您可以将此法语公式设置为临时(隐藏)范围的
.FormulaLocal
,然后从同一范围读回
.formula
,并将其设置为所需范围的
.FormulaArray
。但您不应该这样做,因为您的代码在除法语以外的任何Excel版本上都无法工作。我尝试在.FormulaArray中使用英语函数名,但Excel也不喜欢。如果它在非法语版本的Excel上不起作用其实没什么大不了的,因为我们在一个业务工作组中,而且Office也没有英文版本。不管怎样,它是用英文名称工作的。哇!将此作为答案发布。因为Excel有
.Formula
的英文公式和
.FormulaLocal
的Excel界面语言公式。您需要本地版本,但没有用于阵列的本地版本。您必须提供英文数组公式。例如,您可以将此法语公式设置为临时(隐藏)范围的
.FormulaLocal
,然后从同一范围读回
.formula
,并将其设置为所需范围的
.FormulaArray
。但您不应该这样做,因为您的代码在除法语以外的任何Excel版本上都无法工作。我尝试在.FormulaArray中使用英语函数名,但Excel也不喜欢。如果它在非法语版本的Excel上不起作用其实没什么大不了的,因为我们在一个业务工作组中,而且Office也没有英文版本。不管怎样,它是用英文名称工作的。哇!将此作为答案发布。
={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)))));"")}