输入的VBA数组公式太长

时间:2018-10-09 15:50:11

标签: arrays vba formula

嗨,我正尝试以这种方式插入公式数组

Dim F1 As String
Dim f2 As String

F1 = "=SUM(--(FREQUENCY(IF(rptEURegThresholds!C[7]=""Yes"",IF(rptEURegThresholds!C[16]=""No"",IF(rptEURegThresholds!C[15]=""Total Disclosure"",1,1"
f2 = "MATCH(rptEURegThresholds!C[-1],rptEURegThresholds!C[-1],0)))),ROW(rptEURegThresholds!C[-1])-ROW(rptEURegThresholds!R[-6]C[-1])+1)>0))"

With sh8.Range("F7")
    .FormulaArray = F1
    .Replace "1,1", f2, xlPart
End With

但是出了点问题,找不到问题。请帮忙!!!

1 个答案:

答案 0 :(得分:0)

我可以想到公式中有2个问题

  1. 您的公式(包括F1和F2)中的字符总数约为272,超过了Excel中FormulaArray的255个字符的限制。请参阅 Overcoming the 255 char. limit for formulaArray in Excel VBA

  2. 代码肯定会在第

    行处停止

    .FormulaArray = F1

    ,出现错误“无法设置范围类的FormualArray属性” 由于此阶段的公式不完整(括号等不匹配)。

因此,我尝试将工作表名称从“ rptEURegThresholds”缩短为“ rptEURT”,并将F1和F2字符串都组合为F1。它的工作没有任何错误。但是,只能由您检查公式是否正确工作。

Dim F1 As String

 F1 = "=SUM(--(FREQUENCY(IF(rptEURT!C[7]=""Yes"",IF(rptEURT!C[16]=""No"",IF(rptEURT!C[15]=""Total Disclosure""," & _
    "MATCH(rptEURT!C[-1],rptEURT!C[-1],0)))),ROW(rptEURT!C[-1])-ROW(rptEURT!R[-6]C[-1])+1)>0))"


    With Sheets(3).Range("F7")
        .FormulaArray = F1
    '    .Replace "1,1", f2, xlPart
    End With