【问题标题】:VBA Run time error 1004: Unable to set the formulaarray property of the range classVBA运行时错误1004:无法设置范围类的formulaarray属性
【发布时间】:2016-11-18 14:03:28
【问题描述】:

VBA 运行时错误 1004:无法设置范围类的公式数组属性

我在link 中遵循了 Dick Kusleika 的建议,但无法通过 VBA 将以下数组公式输入到 excel 中。谁能看到我哪里出错了?公式的两半很容易低于 255 个字符。

Public Sub Configuration()

Dim theFormulaPart1 As String

Dim theFormulaPart2 As String

theFormulaPart1 = "=IF(ISODD(B2),IFERROR(INDEX(Race1Grid,MATCH(C2&I2&""Q3""," & _
                "QualRace1ID&QualDriver&QSession,0)),IFERROR(INDEX(Race1Grid" & _
                ",MATCH(C2&I2&""Q2"",QualRace1ID&QualDriver&QSession,0)),INDEX" & _
                "(Race1Grid,MATCH(C2&I2,QualRace1ID&QualDriver,0))))," & _
                "X_X_X())"

theFormulaPart2 = "IFERROR(INDEX(Race2Grid,MATCH(C2&I2&""Q3"",QualRace2ID&" & _
                "QualDriver&QSession,0)),IFERROR(INDEX(Race2Grid,MATCH(C2&" & _
                "I2&""Q2"",QualRace2ID&QualDriver&QSession,0)),INDEX(" & _
                    "Race2Grid,MATCH(C2&I2,QualRace2ID&QualDriver,0)))))"

    With Worksheets("Races").Range("V2")
        .FormulaArray = theFormulaPart1
        .Replace "X_X_X())", theFormulaPart2
    End With

End Sub

我已尝试将公式拆分为更多行以使其更易于阅读。

【问题讨论】:

  • 你使用了Formula 而不是FormulaArray
  • 我已经编辑了问题...
  • 公式的第一部分仍然太长。
  • 数组公式的第一部分是229个字符?
  • 您需要确保它在 R1C1 格式中也低于 255。你的不是 - 大约是 279。

标签: vba excel


【解决方案1】:

正如我在 cmets 中提到的,它只是公式第一部分的长度。我建议您进一步简化:

Public Sub Configuration()

Dim theFormulaPart1 As String

Dim theFormulaPart2 As String

Dim theFormulaPart3 As String

theFormulaPart1 = "=IF(ISODD(B2),X_X_X1(),X_X_X())"
theFormulaPart3 = "IFERROR(INDEX(Race1Grid,MATCH(C2&I2&""Q3""," & _
                "QualRace1ID&QualDriver&QSession,0)),IFERROR(INDEX(Race1Grid" & _
                ",MATCH(C2&I2&""Q2"",QualRace1ID&QualDriver&QSession,0)),INDEX" & _
                "(Race1Grid,MATCH(C2&I2,QualRace1ID&QualDriver,0)))),"
theFormulaPart2 = "IFERROR(INDEX(Race2Grid,MATCH(C2&I2&""Q3"",QualRace2ID&" & _
                "QualDriver&QSession,0)),IFERROR(INDEX(Race2Grid,MATCH(C2&" & _
                "I2&""Q2"",QualRace2ID&QualDriver&QSession,0)),INDEX(" & _
                    "Race2Grid,MATCH(C2&I2,QualRace2ID&QualDriver,0)))))"

    With ActiveSheet.Range("V2")
        .FormulaArray = theFormulaPart1
        .Replace "X_X_X())", theFormulaPart2
        .Replace "X_X_X1()", theFormulaPart3
    End With

End Sub

【讨论】:

  • 谢谢,把它分成三个现在至少进去没有 1004 错误。警告-我实际上是在尝试将此公式插入表格中,并且在运行宏 V2 后显示#VALUE!如果我单击单元格并按 Ctrl + Shift + Enter,它将作为数组进入。是什么赋予了? .FormulaArray 在 Sub! 中指定!
  • 它最初出现在单元格中是否带有 {} 周围?
  • 没有,但是你我都用过的代码是.FormulaArray = 所以我有点迷茫...
  • 奇怪的是,代码不再为我进行第二次替换 - 但它正在作为数组公式 (Excel 2010)
  • 我不认为您可以使用替换将长数组公式插入到表中并让公式成功地复制到该列中。除了第一个单元格之外,它对我不起作用。
猜你喜欢
  • 2015-12-29
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多