FormulaArray突击队不适用于VBA执行代码

时间:2019-07-17 20:12:03

标签: excel vba excel-formula

基本上我在Excel中设置了一个公式,然后将其复制到VBA中,但这是一个数组公式:

Mon Jul 01 00:00:00 EDT 2019
Mon Aug 05 00:00:00 EDT 2019
Fri Sep 20 00:00:00 EDT 2019

它的作用是考虑各种条件从另一张纸计算唯一值。如果我自己执行该公式,则效果很好,但是一旦将其添加到代码中,该公式将无法使用。我的代码如下:

{=SUM(--(FREQUENCY(IF(('BD MXN'!$J$2:$J$5893="A")*('BD MXN'!$X$2:$X$5893='Acum MXN'!Q2)*('BD MXN'!$Q$2:$Q$5893='Acum MXN'!O2)*('BD MXN'!$I$2:$I$5893="REAL")*('BD MXN'!$W$2:$W$5893='Acum MXN'!P2)*('BD MXN'!$O$2:$O$5893='Acum MXN'!A2),'BD MXN'!$A$2:$A$5893),'BD MXN'!$A$2:$A$5893)>0))}_

Range("R2:R" & last).FormulaArray = "=SUM(--(FREQUENCY(IF(('BD MXN'!$J$2:$J$" & Final & "=""A"")*('BD MXN'!$X$2:$X$" & Final & "='Acum MXN'!Q2)*('BD MXN'!$Q$2:$Q$" & Final & "='Acum MXN'!O2)*('BD MXN'!$I$2:$I$" & Final & "=""REAL"")*('BD MXN'!$W$2:$W$" & Final & "='Acum MXN'!P2)*('BD MXN'!$O$2:$O$" & Final & "='Acum MXN'!A2),'BD MXN'!$A$2:$A$" & Final & "),'BD MXN'!$A$2:$A$" & Final & ")>0))" 变量只是最后一行的值。我知道该公式有效,因为如果我执行相同的代码,但使用“ Formula”而不是“ FormulaArray”,它将在Excel上引发#VALUE错误,然后我返回到单元格并按CTRL + SHIFT + ENTER,它可以正常工作,我对公式不做任何操作。

如果我离开FormulaArray选项,它甚至什么都不会写,就像跳过那一行。

1 个答案:

答案 0 :(得分:0)

Range.FormulaArray属性的字符数限制为255。您的字符串长度为362个字符,因此会出现错误。要解决字符数限制,必须使用占位符,稍后将使用正确的字符串填充占位符,如下所示:

Dim pp As String, Final As Long, last As Long

pp = "--(FREQUENCY(IF(('BD MXN'!$J$2:$J$" 
& Final & "=""A"")*('BD MXN'!$X$2:$X$" & Final & "='Acum MXN'!Q2)*('BD 
MXN'!$Q$2:$Q$" & Final & "='Acum MXN'!O2)*('BD MXN'!$I$2:$I$" & Final & 
"=""REAL"")*('BD MXN'!$W$2:$W$" & Final & "='Acum MXN'!P2)*('BD MXN'!$O$2:$O$" & 
Final & "='Acum MXN'!A2),'BD MXN'!$A$2:$A$" & Final & "),'BD MXN'!$A$2:$A$" & 
Final & ")>0)"

With Range("R2:R" & last)
    .FormulaArray = "=SUM(PPP)"
    .Replace "PPP", pp
End With