【问题标题】:Runtime Error 1004 Copy Formula Array运行时错误 1004 复制公式数组
【发布时间】:2016-10-26 18:08:40
【问题描述】:

我的 Excel 电子表格的单元格 B2 中有以下数组公式:

{=IF(COUNT(IF(ISNUMBER(A30:A1000);IF(B30:B1000>A30:A1000-1;A30:A1000)))>=COUNT(IF(ISNUMBER(A30:A1000);COUNT(B30:B1000>A30:A1000-1;A30:A1000)));COUNT(IF(ISNUMBER(A30:A1000);COUNT(B30:B1000>A30:A1000-1;A30:A1000))))}

现在我想使用以下 VBA 代码将此代码复制到单元格 A2 中:

Sheets("Sheet1").Range("A2").FormulaArray = Sheets("Sheet1").Range("B2").Formula

但是,当我使用此代码时,出现运行时错误 1004。

你知道如何解决这个问题吗?

【问题讨论】:

  • 确实如此。我在这里的帖子中打错了。在我的 Excel 文件中它是正确的,但运行时错误的问题仍然存在。
  • 这是一个打字错误。对不起。它应该是 B 而不是 AP。但是,即使我纠正了它,运行时错误仍然会发生。

标签: vba excel excel-formula


【解决方案1】:

您的数组公式太长,无法像 Range.FormulaArray property 那样传递。

您无需重复所有条件。当您循环浏览第 30 到 1000 行时,如果第一个或第二个条件失败,则不会处理该循环的公式的其余部分。公式中的 IF 在第一个 FALSE 处停止处理。

=IF(COUNT(IF(ISNUMBER(A30:A1000), IF(B30:B1000>A30:A1000-1, A30:A1000)))>=COUNT(B30:B1000>A30:A1000-1,A30:A1000),COUNT(B30:B1000>A30:A1000-1,A30:A1000))

现在代码可以正常工作了。

With Worksheets("Sheet3")
    .Range("A2").FormulaArray = .Range("b2").Formula
End With

请注意,我无法使用分号作为系统列表分隔符进行测试;仅使用我自己系统的逗号。 VBA 不喜欢 .Formula.FormulaR1C1.FormulaArray 属性中的 EN-US 区域设置。如果仍然有问题,请使用 debug,print 来查看 .Formula 是如何返回的。如果它包含分号,则使用,

With Worksheets("Sheet3")
    .Range("A2").FormulaArray = Replace(.Range("b2").Formula, Chr(59), Chr(44))
End With

【讨论】:

  • 您好 Jeeped,感谢您的回答。这是工作。但是,我过于简化了上传的公式,所以你的想法在我原来的公式中不起作用。我会把这个问题作为正确的,并用我的长原始公式发布另一个问题。感谢您的帮助。
  • 不用担心;看来您找到了其他问题的解决方案。另一种可能的解决方案是缩短传输公式,并在将其实例化为数组公式后使用Range.Replace method 将其更改回原始公式。
猜你喜欢
  • 2016-10-26
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
相关资源
最近更新 更多