MyData.Columns("R").Address
是$R$10:$R$121
AddressCurr
是$D$10:$D$121
AddressPr
是$O$10:$O$121
MyData.Columns(5).Address
为$E$10:$E$121
AddressPr = MyData.Columns("O").Address
AddressCurr = MyData.Columns("D").Address
MyData.Columns("R").FormulaArray _
= "=IF(" & AddressCurr & ">0;1;0)"
第三行抛出:
运行时错误'1004'无法设置范围类的公式阵列属性
每当我在纸张上手动输入公式=IF($D$10:$D$121>0,1,0)
时,它就会按预期工作。
为什么在使用正确的数组公式填充范围时,运行时错误会不断弹出?
注意:此公式是较大的=ROUND($O$10:$O$121/IF($D$10:$D$121=0,1,$D$10:$D$121)*$E$10:$E$121,-1)
MyData.Columns("R").FormulaArray _
= "=" & AddressPr & "/" & _
"IF(" & AddressCurr & "=0,1," & AddressCurr & ")*" & _
"" & MyData.Columns(5).Address & ""
它也会抛出错误。
相反,下面的公式就像一个魅力:
MyData.Columns("R").FormulaArray _
= "=" & AddressPr & "/" & _
"" & AddressCurr & "*" & _
"" & MyData.Columns(5).Address & ""
我的猜测是它不能形成一个布尔数组,但是跟随也不能用于ROUND
。
答案 0 :(得分:2)
更改
MyData.Columns("R").FormulaArray = "=IF(" & AddressCurr & ">0;1;0)"
到
MyData.Columns("R").FormulaArray = "=IF(" & AddressCurr & ">0,1,0)"
在VBA中,即使Excel中有不同的分隔符,也应使用,
作为分隔符。
另外,请注意,在使用.Formula或.FormulaArray时,您应该在VBA中使用英文公式名称而不是本地公式名称。
如果你想使用你的本地语言公式,你可以使用.FormulaLocal,但似乎没有.FormulaLocal的数组版本(间接解决方案:How to combine FormulaArray and FormulaLocal options in Excel VBA?)。请注意,使用.FormulaLocal需要您使用本地分隔符。