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

这里没有什么特别的想法,尽pipe我需要将公式分成两部分,因为它超过了255个字符(来源: http : //www.dicks-blog.com/archives/2005/01/10/entering-long-array- formula-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! 错误。 如果我查看公式debugging,错误来自我的第一个函数,Excel无法解释SI() (这是IF()的法语)。 我试图完全删除IF()子句,但是Excel无法解释现在是SOMME()SUM() )的第一个函数。

如果我只要点击公式栏并按下CTRL + SHIFT + ENTER(不改变任何东西),它就会返回正确的值。

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

浏览Web时发现另一个类似的问题,但没有解决scheme。

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

你需要本地版本,但没有一个数组。 你必须提供英文的数组公式。

你可以例如把这个法国公式设置为临时(隐藏)范围的.Formula ,然后从相同的范围读回.Formula并将其设置为所需范围的.FormulaArray 。 但是你不应该这样做,因为你的代码在法文之外的任何Excel版本上都不行。 最便携的是在代码中总是使用英文公式。