【问题标题】:Run-time Error: Unable to set the FormulaArray property of the Range Class运行时错误:无法设置 Range 类的 FormulaArray 属性
【发布时间】:2019-09-27 00:53:20
【问题描述】:

我收到运行时错误 1004:无法设置 Range 类的 FormulaArray 属性。我一直在研究这个问题,但我找不到解决方案。它不超过 255 个字符。我也试图将公式放在一个新的表格列中,所以这可能是问题的一部分。

问题可能出在“Rows(R8C:RC)”部分吗?我试图将其设为相对引用,以便引用公式所在的表?

当我“debug.print Trans_ID”时,我得到了正确的代码,但 R8C:RC 可能没有更改为正确的单元格引用。

Dim Trans_ID As String

'AccountNumber is equal to 1003

Trans_ID = "=IFERROR(INDEX(Journal,SMALL(IF(L_" & AccountNumber & _
     "=Journal[Acct. '#],Journal[Trans ID],""""),ROWS(R8C:RC)),MATCH(Ledger_" & _
     AccountNumber & "[[#Headers],[Trans ID]],Journal[#Headers],0)),"""")"


Worksheets("Ledger").ListObjects(NewTableName.Name).ListColumns( _
                   "Trans ID").DataBodyRange.FormulaArray = Trans_ID

这将返回一个数字。当我在不使用 VBA 的情况下输入公式时,它可以工作。

【问题讨论】:

  • 您是否尝试过用 A1 表示法替换 R1C1 表示法,看看效果如何?
  • 我试过了。我将其更改为“C$8:C8”,但它仍然不起作用。当我这样做并 debug.print 时,它会将 R8C:RC 放回其中。
  • 如果你写一个数组公式到整个列我不认为行号会更新,我认为你必须在写入第一个单元格后填写。
  • 我这样做了,它工作正常。 ` ThisWorkbook.Worksheets("Ledger").Cells(8, LedgerAccountCell + _ 9).Select Selection.FormulaArray = Trans_ID `
  • 这会引发错误吗:Worksheets("Ledger").ListObjects(NewTableName.Name).ListColumns( _ "Trans ID").DataBodyRange.Cells(1).FormulaArray = Trans_ID?

标签: excel vba


【解决方案1】:

如果您尝试将数组公式写入多个单元格,则相对引用不会更新。能够重现您的错误,尽管使用更简单的数组公式。如果您将公式写入第一个单元格,Range.FillDown 应该可以工作。

With Worksheets("Ledger").ListObjects(NewTableName.Name).ListColumns("Trans ID").DataBodyRange
    .Cells(1).FormulaArray = Trans_ID
    .FillDown
End With

如果您已经在表格中设置了自动填充公式,则.FillDown 是多余的。

【讨论】:

    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多