Vba 插入大于255个字符的公式时出错

Vba 插入大于255个字符的公式时出错,vba,excel,excel-formula,array-formulas,Vba,Excel,Excel Formula,Array Formulas,我以前曾在程序中使用此方法插入一个更大的公式,但我收到“运行时错误代码1004无法设置range类的FormulaArray属性”,如下所示: Sub TEST() Dim QFormula As String Dim QCountF As String Dim QCountF2 As String Dim WStart As String Dim MoreDash As String Dim ValueF As String QFormula = "=IF($K3=4,IF(_Q_&

我以前曾在程序中使用此方法插入一个更大的公式,但我收到“运行时错误代码1004无法设置range类的FormulaArray属性”,如下所示:

Sub TEST()
Dim QFormula As String
Dim QCountF As String
Dim QCountF2 As String
Dim WStart As String
Dim MoreDash As String
Dim ValueF As String

    QFormula = "=IF($K3=4,IF(_Q_>0,1,_M_),IF($K3=2,IF(_Q_>0,1,IF(COLUMN(P3)-MATCH(_S_,$A$1:P$1,0)>=8,IF(_Q2_>0,1,_M_),_M_)),IF(_Q_>0,1,IFERROR(IF((COLUMN(P3)-MATCH(_S_,$A$1:P$1,0)+1)-_V_<=13,1,_M_),_M_))))"

    QCountF = "COUNTA(OFFSET(INDIRECT(ADDRESS(ROW(P3),COLUMN(P3)-4)),0,1,1,3))"
    QCountF2 = "COUNTA(OFFSET(INDIRECT(ADDRESS(ROW(P3),COLUMN(P3)-8)),0,1,1,3))"
    WStart = """START"""
    MoreDash = """-"""
    ValueF = "VALUE(MATCH(1,INDIRECT(ADDRESS(ROW(P3),MATCH(_S_,$A$1:P$1,0))):O3,0))"

With ActiveCell
    .FormulaArray = QFormula
    .Replace "_Q_", QCountF
    .Replace "_Q2_", QCountF2
    .Replace "_S_", WStart
    .Replace "_M_", MoreDash
    .Replace "_V_", ValueF

  End With

  End Sub
子测试()
作为字符串的Dim QFormula
Dim qcount作为字符串
Dim QCountF2作为字符串
像弦一样的线
像细绳一样模糊
作为字符串的Dim ValueF
QFormula=“=IF($K3=4,IF($Q>0,1,$M\)、IF($K3=2,IF($Q>0,1,IF(P3列)匹配($S\$A$1:P$1,0)>=8,IF($Q2\>0,1,$M\)、IF($Q\>0,1,IFERROR(IF($S\$A$1:P$1)->直接从V中取:

如果使用此属性输入数组公式,则公式必须使用R1C1引用样式,而不是A1引用样式(请参见示例)

更新编辑:

正如您在评论中所述,即使msdn声明您必须使用
R1C1
引用
A1
引用也有效

代码中的实际问题是:

ValueF = "VALUE(MATCH(1,INDIRECT(ADDRESS(ROW(P3),MATCH(_S_,$A$1:P$1,0))):O3,0))"
您在替换代码中有另一个
\u S
,该代码不会更改,因为它已经超过了
\u S
。替换

修正:

直接取自:

如果使用此属性输入数组公式,则公式必须使用R1C1引用样式,而不是A1引用样式(请参见示例)

更新编辑:

正如您在评论中所述,即使msdn声明您必须使用
R1C1
引用
A1
引用也有效

代码中的实际问题是:

ValueF = "VALUE(MATCH(1,INDIRECT(ADDRESS(ROW(P3),MATCH(_S_,$A$1:P$1,0))):O3,0))"
您在替换代码中有另一个
\u S
,该代码不会更改,因为它已经超过了
\u S
。替换

修正:


谢谢你的评论,不过我已经用一个不同的、更长的公式成功地做到了这一点,在程序的前面,使用A1参考样式。我在这个论坛的其他地方读到,如果公式缩写时没有遵循正确的语法,可能会有问题。我不知道这是否会是问题?@Mac我没有打扰chec国王如果你所做的工作,我的坏。我运行了你的代码,它工作了,但后来我发现实际的错误将更新我的答案。萨缪谢谢你的帮助,我不知道这会花多长时间我注意到!!谢谢你的评论,但是我已经成功地用一个不同的,更长的公式,在A1参考程序的前面ce风格。我在这个论坛的其他地方读到过,如果公式缩写时没有遵循正确的语法,可能会有问题。我不知道这是否会有问题?@Mac我没有费心检查你所做的是否有效,我的错。我运行了你的代码,它有效,但后来我发现实际的错误会更新我的答案。Samu谢谢你r你的帮助,我不知道我会花多长时间注意到!!
ValueF = "VALUE(MATCH(1,INDIRECT(ADDRESS(ROW(P3),MATCH(""START"",$A$1:P$1,0))):O3,0))"