Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
手动记录Excel宏错误-将公式插入单元格_Excel_Vba - Fatal编程技术网

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

手动记录Excel宏错误-将公式插入单元格,excel,vba,Excel,Vba,我试图将一个公式直接插入一个单元格,并让它根据放置位置(R1C1)引用周围的单元格。我在excel中打开了记录宏功能,用所需的公式编辑了一个单元格,然后按enter键。Excel为我提供了以下功能。奇怪的是,这正是excel给我的公式,当我尝试运行该函数时,它会出现“运行时错误‘1004’”:应用程序定义的错误或对象定义的错误。 使用背景:函数本身仅用于我正在创建的预算,它使用两列上的单元格来决定是继续编号还是创建上面数字的子集(TR是总请求的符号,因此任何不是TR的内容都是总请求的子集,并将标

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

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

你能描述一下你想要做什么吗?你那一系列可怕的嵌套IFs表明VBA Select案例或循环是一个更好的解决方案。但我不知道预期的结果是什么……我想看看你记录的公式的快照,因为它给出了一个有效的答案吗?我给出了上面记录的宏的快照:作为一个例子它的作用:如果您有一个预算行,它将采用上面的数字,并添加1,如果您有一个预算项目的AMMENDENT,您可以保留相同的数字,(以允许项目组合在一起)只需添加字母a、b、c等作为上述参考,我想使用公式的原因是该预算将经常更新,并且该公式用于确保编号项目自动调整。尽管我愿意接受建议。只是为了澄清,上面的评论要求查看结果公式。t中的公式应该是什么代码运行后该单元格看起来像什么?抱歉,这里是(可能在单元格c128中),还张贴了一个输出的图片链接=如果(E128=“”,“”如果(E128=“TR”),如果(E127“TR”,如果(E126“TR”,如果(E125”TR),如果(E124”TR),如果(E123”TR),如果(E121“TR”,“添加更多”,C121+1),C122+1,C123+1,C124+1),C127+1,如果(E127=“TR”,如果(E128“TR”,C127+1),C127+1,如果(E126=“TR”,C126&“B”,如果(E125=“TR”,C125&“C”,如果(E124=“TR”,C124&“D”,如果(E123=“TR”,C123&“E”,如果(E122=“TR”,C122&“F”,如果(E121=“TR”,C121&“G”,C121&“G”),并将其复制到excel中,它对我有效……但是如果我抓住最后一个“—”(表示注释结束)之后的“-”,它对我有效,它会出错…不是从注释中,而是从宏中。对,这就是我的全部观点。它是使用excel中的“记录宏”功能创建的…我一直认为它会提供excel可以使用的输出。对不起,我想你的问题是为什么会收到错误。你能在R1C中发布最终结果公式吗1个术语?不确定我是否遵循…我认为公式ab
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)))"