【问题标题】:FormulaArray commando is not working on VBA Execution CodeFormulaArray 突击队不适用于 VBA 执行代码
【发布时间】:2019-07-18 04:46:24
【问题描述】:

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

{=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))"

Final 变量只是最后一行的值。我知道公式有效,因为如果我执行相同的代码但使用“Formula”而不是“FormulaArray”,它将在 Excel 上引发 #VALUE 错误,然后我返回单元格并按 CTRL + SHIFT + ENTER 并且它可以工作,我对公式什么都不做。

如果我离开 FormulaArray 选项,它甚至不会写任何东西,就像跳过那一行。

【问题讨论】:

  • 您想将使用FormulaArray 的公式放入第一个单元格R2 然后填写。您所做的类似于突出显示所有单元格,将公式放入公式栏中并按 Ctrl-Shift-Enter。它会将相同的公式填充到所有行中。您想将公式作为数组公式输入到第一个单元格中,然后填写。

标签: excel vba excel-formula


【解决方案1】:

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

【讨论】:

  • 我不知道这个限制。然而,该解决方案没有奏效。它只是不替换任何东西,并在其中使用“=SUM(PPP)”公式留下范围。还有其他解决此问题的建议吗?
  • @CarlosCasio,它对我有用。我已经试过好几次了。您必须离开 VBA 窗口并在工作表上单击内部,单元格就会更新。
  • 哦,天哪……这是真的。为什么必须离开 VBA 窗口?成功了,谢谢你的解决方案!
  • @CarlosCasio,我不太确定;我认为这与您正在进行就地替换有关。我只是确保事先没有选择范围,运行我的宏然后回来查看结果。这样就不会打扰你了。
猜你喜欢
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 2013-05-22
  • 1970-01-01
  • 2021-10-09
  • 2017-08-24
  • 2023-03-17
相关资源
最近更新 更多