首页 文章

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

提问于
浏览
0

我试图将一个公式直接插入到单元格中,并根据它放置的位置(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

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

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

  • 1

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

    =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 ,则返回此计数

    • 否则,如果上面一行中的Type为 TR ,则追加 A

    • 否则,将字符从上面一行中的Rank结尾处取出,将其增加到下一个字符并附加它

    • 注意:如果第一个Type不是 TR ,你会得到意想不到的结果,直到第一个 TR

相关问题