手动记录Excel宏错误-将公式插入单元格
我试图将一个公式直接插入一个单元格,并让它根据放置位置(R1C1)引用周围的单元格。我在excel中打开了记录宏功能,用所需的公式编辑了一个单元格,然后按enter键。Excel为我提供了以下功能。奇怪的是,这正是excel给我的公式,当我尝试运行该函数时,它会出现“运行时错误‘1004’”:应用程序定义的错误或对象定义的错误。 使用背景:函数本身仅用于我正在创建的预算,它使用两列上的单元格来决定是继续编号还是创建上面数字的子集(TR是总请求的符号,因此任何不是TR的内容都是总请求的子集,并将标记为最后一个已知的数字&“a”、“B”等)手动记录Excel宏错误-将公式插入单元格,excel,vba,Excel,Vba,我试图将一个公式直接插入一个单元格,并让它根据放置位置(R1C1)引用周围的单元格。我在excel中打开了记录宏功能,用所需的公式编辑了一个单元格,然后按enter键。Excel为我提供了以下功能。奇怪的是,这正是excel给我的公式,当我尝试运行该函数时,它会出现“运行时错误‘1004’”:应用程序定义的错误或对象定义的错误。 使用背景:函数本身仅用于我正在创建的预算,它使用两列上的单元格来决定是继续编号还是创建上面数字的子集(TR是总请求的符号,因此任何不是TR的内容都是总请求的子集,并将标
ActiveCell.FormulaR1C1=_
如果(R[-2]C[2[3]C[2]C[2]C[2]C[2]C[2]是“TR”,如果(R[-3[3]C[2]C[2]是“TR”,如果(R[-3[3]C[3]C[2]C[2]C[2]C[2]C[2]C[2[2[2]“TR”,如果(R[3[3[3]C[3]C[3]C[3]C[3]C[3]C[2]C[2]C[2]是“TR”,如“TR”,如“TR”,如“TR”,如“TR”,若(R(R[3[3[3[3[3[3[3[3[3[3]C[3]C[3]C[3]C[3]C[3]C[3]C[3]C[3]C[3]C[3]C[2”如“TR”,如“1]C[2]=“TR”,如果(RC[2]“TR”,R[-1]C和“A”,R[-1]C+1),如果(R[-2]C[2]=“TR”,R[-2]C和“B”,如果(R[-3]C[2]=“TR”,R[3]C&“(R[-4]C[2]=”TR“,”R[-4]C&”D“,”如果(R[-5]C[2]=”TR“,”R[-5]C&”E“,”如果(R[-6]C[2]=”TR“,”R[-6]C&”F“,”如果(R[-7]C[2]=”TR“,”R[-7]C&”G“,”TR
在此方面的任何帮助都将不胜感激,
谢谢
编辑:
我在工作,不能在线回复,所以我决定试试这里:下面是录制的宏
Sub Macro7()
'
' Macro7 Macro
'
'
ActiveCell.FormulaR1C1 = _
"=IF(RC[2]="""","""",IF(RC[2]=""TR"",IF(R[-1]C[2]<>""TR"",IF(R[-2]C[2]<>""TR"",IF(R[-3]C[2]<>""TR"",IF(R[-4]C[2]<>""TR"",IF(R[-5]C[2]<>""TR"",IF(R[-6]C[2]<>""TR"",IF(R[-7]C[2]<>""TR"",""add more"",R[-7]C+1),R[-6]C+1),R[-5]C+1),R[-4]C+1),R[-3]C+1),R[-2]C+1),R[-1]C+1), IF(R[-1]C[2]=""TR"",IF(RC[2]<>""TR"",R[-1]C&""A"",R[-1]C+1),IF(R[-2]C[2]=""TR"",R[-2]C&""B"",IF(R[-3]" & _
"R"",R[-3]C&""C"",IF(R[-4]C[2]=""TR"",R[-4]C&""D"",IF(R[-5]C[2]=""TR"",R[-5]C&""E"",IF(R[-6]C[2]=""TR"",R[-6]C&""F"",IF(R[-7]C[2]=""TR"",R[-7]C&""G"","""")))))))))"
Range("C121").Select
End Sub
Sub宏7()
'
'宏7宏
'
'
ActiveCell.FormulaR1C1=_
如果(R[-1]C[2[2]C[2]C[2]C[2]C[2]C[2]“TR”,如果(R[-2]C[2]C[2]“TR”,如果(R[-2]C[2]“TR”,如果(R[-3]C[3]C[2]C[2]C[2]C[2]“TR”,如果(R[2[2]C[2]C[2]C[2]C[2]“TR”,如“TR”,如果,如果(R[3[3]C[3]C[3]C[3]C[2]C[2]C[2]C[2]C[2]C[2]C[2]为“TR”,如“TR”,如“TR”,如“TR”,如“TR”,如“TR”,如(R,”如,如(R,”如(R(R,”如(R(R[3[3[3]C[3]C[3]C[[-1]C+1),如果(R[-1]C[2]=“TR”,如果(RC[2]“TR”,R[-1]C&“A”,R[-1]C+1),如果(R[-2]C[2]=“TR”,R[-2]C&“B”,如果(R[-3]" & _
“R”、“R[-3]C&“C”、IF(R[-4]C[2]=“TR”、R[-4]C&“D”、IF(R[-5]C[2]=“TR”、R[-5]C&“E”、IF(R[-6]C[2]=“TR”、R[-6]C&“F”、IF(R[-7]C[2]=“TR”、R[-7]C&“G”、“G”、“TR”)、“TR”、“R[-7]C&“G”)”
范围(“C121”)。选择
端接头
这是“录制宏”功能中录制的宏
该公式是在excel中设计的,我正试图在宏中重复使用它。我没有尝试选择案例或类似案例的原因是,该公式旨在根据其周围的单元格进行动态更改。因此,如果我在其上方添加一行并插入新的预算行(这是针对上面引用的预算),它下面的行将相应地更改
编辑:在excel中的外观除外:
公式中有错误,这就是VBA不添加公式的原因
我已经提取了公式并尝试手动输入,excel会抛出一条消息说有错误。对于公式中可能出现的错误进行了反复讨论,显然它太难调试,因此这里有一个替代方案:
=COUNTIF(E$16:E128,"TR")&IF(E128="TR","",IF(E127="TR","A",CHAR(CODE(MID(C127,2,1))+1)))
或采用R1C1
格式
=COUNTIF(R16C[2]:RC[2],"TR")&IF(RC[2]="TR","",IF(R[-1]C[2]="TR","A",CHAR(CODE(MID(R[-1]C,2,1))+1)))
和VBA代码将其添加到活动单元格
ActiveCell.FormulaR1C1 = _
"=COUNTIF(R2C[2]:RC[2],""TR"")& _
IF(RC[2]=""TR"","""",IF(R[-1]C[2]=""TR"",""A"",CHAR(CODE(MID(R[-1]C,2,1))+1)))"
它还有一个额外的好处,即不限于7个级别(实际上,限制为26个级别,之后将附加一些奇数字符)
注意:可能需要调整第一个单元格引用R2C[2]
,以匹配数据的起始行,例如,如果第一列位于第128行,则将其更改为R128C[2]
工作原理:
- 将表中的
数一直计算到此行TR
- 如果类型列为
,则返回此计数TR
- 否则,如果上一行中的类型为
,则追加TR
A
- 否则,将字符从上一行中列的末尾移除,将其递增到下一个字符并追加
- 注意:如果第一个类型不是
,您将得到第一个TR
TR
ActiveCell.FormulaR1C1 = _
"=COUNTIF(R2C[2]:RC[2],""TR"")& _
IF(RC[2]=""TR"","""",IF(R[-1]C[2]=""TR"",""A"",CHAR(CODE(MID(R[-1]C,2,1))+1)))"