插入大于 255 个字符的公式时出错
Error When Inserting Formula greater than 255 characters
我以前在我的程序中使用过这种方法来插入一个更大的公式,但是我收到了 "run-time error code 1004 unable to set the FormulaArray property of the range class" 这个公式:
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:P,0)>=8,IF(_Q2_>0,1,_M_),_M_)),IF(_Q_>0,1,IFERROR(IF((COLUMN(P3)-MATCH(_S_,$A:P,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:P,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
这次我不知道哪里出了问题,希望你能帮忙。
提前致谢
直接取自msdn site:
如果使用这个属性输入数组公式,公式必须使用R1C1引用样式,而不是A1引用样式(见例子)。
Worksheets("Sheet1").Range("E1:E3").FormulaArray = "=Sum(R1C1:R3C3)"
更新编辑:
正如您在评论中所述,即使 msdn 声明您必须使用 R1C1
参考,A1
参考也有效。
您代码中的实际问题是:
ValueF = "VALUE(MATCH(1,INDIRECT(ADDRESS(ROW(P3),MATCH(_S_,$A:P,0))):O3,0))"
您在替换代码中还有另一个 _S_
,此代码永远不会更改,因为它已经超过了 _S_
.Replace
。
修复:
ValueF = "VALUE(MATCH(1,INDIRECT(ADDRESS(ROW(P3),MATCH(""START"",$A:P,0))):O3,0))"
我以前在我的程序中使用过这种方法来插入一个更大的公式,但是我收到了 "run-time error code 1004 unable to set the FormulaArray property of the range class" 这个公式:
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:P,0)>=8,IF(_Q2_>0,1,_M_),_M_)),IF(_Q_>0,1,IFERROR(IF((COLUMN(P3)-MATCH(_S_,$A:P,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:P,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
这次我不知道哪里出了问题,希望你能帮忙。
提前致谢
直接取自msdn site:
如果使用这个属性输入数组公式,公式必须使用R1C1引用样式,而不是A1引用样式(见例子)。
Worksheets("Sheet1").Range("E1:E3").FormulaArray = "=Sum(R1C1:R3C3)"
更新编辑:
正如您在评论中所述,即使 msdn 声明您必须使用 R1C1
参考,A1
参考也有效。
您代码中的实际问题是:
ValueF = "VALUE(MATCH(1,INDIRECT(ADDRESS(ROW(P3),MATCH(_S_,$A:P,0))):O3,0))"
您在替换代码中还有另一个 _S_
,此代码永远不会更改,因为它已经超过了 _S_
.Replace
。
修复:
ValueF = "VALUE(MATCH(1,INDIRECT(ADDRESS(ROW(P3),MATCH(""START"",$A:P,0))):O3,0))"