手动记录Excel宏错误 - 将公式插入单元格

时间:2011-12-30 14:30:36

标签: excel vba

我试图将一个公式直接插入一个单元格中,让它根据它放置的位置(R1C1)引用它周围的单元格。我在excel中打开了记录宏功能,并使用所需的公式编辑了一个单元格,然后按Enter键。 Excel为我提供了以下功能。关于这一点的奇怪部分,这是excel给出的确切公式,当我尝试运行该函数时,它会出现“运行时错误'1004'错误:应用程序定义或对象定义错误。 使用背景:函数本身仅用于我正在创建的预算,它使用一个单元格两列来决定是继续编号还是创建上述数字的子集(TR是总请求的表示法,所以任何不是TR,是总请求的子集,并且将被标记为最后已知的数字&'A','B'等)

ActiveCell.FormulaR1C1 = _
        "=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]C[2]=""TR"",R[-3]C&" & "(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"",""""))))))))"

对此有任何帮助将不胜感激, 感谢

编辑: 我在工作,我不能排队,所以我决定尝试一下:下面是录制的宏。

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

这是记录宏功能中记录的宏。

公式是在excel中设计的,我试图在宏中重用它。我没有尝试选择案例或其他类似的原因是因为这个公式是基于它周围的单元格动态变化的。因此,如果我在其上方添加一行并插入新的预算行(这是针对上面引用的预算),则其下方的行将相应更改。

编辑:ex excel中的外观:

enter image description here

2 个答案:

答案 0 :(得分:1)

公式中有错误,这就是VBA没有添加公式的原因。

我已经拿出公式并尝试手动将其放入,并且excel会抛出一条消息,说明有错误。

答案 1 :(得分:0)

随着公式中可能出现的错误,显然很容易调试,所以这里有一个替代方案:

=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
  • 否则,将字符放在上面一行中Rank的末尾,将其增加到下一个字符并附加
  • 注意:如果第一个类型 TR,您将获得意外的结果,直到第一个TR