基本上我在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选项,它甚至什么都不会写,就像跳过那一行。
答案 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