【问题标题】:Manual Record Excel Macro error - insert formula into a cell手动记录 Excel 宏错误 - 将公式插入单元格
【发布时间】:2012-01-02 20:43:48
【问题描述】:

我试图将公式直接插入到单元格中,并让它根据放置位置 (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 中设计的,我正在尝试在宏中重用它。我没有尝试选择案例或类似的原因是因为此公式旨在根据其周围的单元格动态更改。因此,如果我在其上方添加一条线并插入一条新的预算线(这是针对上面提到的预算),它下面的线将相应地改变。

edit:ex 在 excel 中的样子:

【问题讨论】:

  • 你能描述一下你想要做什么吗?您庞大的一系列嵌套 IF 表明 VBA Select Case 或循环将是更好的解决方案。但我不知道预期的结果是什么......
  • 我想看看你记录的公式的快照 - 它给出了一个有效的答案吗?
  • 我已经给出了上面录制的宏的快照:作为它的作用的一个例子:如果你有一个预算线,它将取它上面的数字,如果你有,则加 1对预算项目的修改,您可以保留相同的数字,(以允许将项目组合在一起)并只需添加一个字母、a、b、c 等。如上所述,我想使用公式的原因是此预算会经常更新,并使用公式确保编号项目自动调整。虽然我愿意接受建议。
  • 澄清一下,上面的 cmets 要求查看结果公式。代码运行后单元格中的公式应该是什么样子?
  • 对不起,在这里(将在单元格 c128 中),还在输出上方发布了图片链接 =IF(E128="","",IF(E128="TR",IF (E127"TR",IF(E126"TR",IF(E125"TR",IF(E124"TR",IF(E123"TR",IF(E122" TR",IF(E121"TR","添加更多",C121+1),C122+1),C123+1),C124+1),C125+1),C126+1),C127+1 ), IF(E127="TR",IF(E128"TR",C127&"A",C127+1),IF(E126="TR",C126&"B",IF(E125="TR", C125&"C",IF(E124="TR",C124&"D",IF(E123="TR",C123&"E",IF(E122="TR",C122&"F",IF(E121="TR ",C121&"G",""))))))))))

标签: excel vba


【解决方案1】:

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

我已经取出公式并尝试手动输入,excel 会抛出一条消息说有错误。

【讨论】:

  • 我也将其拉出,并将其复制到 excel 中,它对我有用……但是,如果我在最后一个 ')' 之后抓住了 '-' (表示评论的结尾) , 会报错...
  • 不是来自评论,而是来自宏。
  • 对,这就是我的重点。它是使用 excel 中的“记录宏”功能创建的......我认为它总是会给你一个 excel 可以使用的输出。
  • 抱歉,您的问题是您收到错误的原因。你能用 R1C1 术语发布最终结果公式吗?
  • 不确定我是否遵循...我认为上面的公式 (Macro7) 是我的 excel 公式的最终结果,因为它是 excel 从“记录宏”功能转换而来的。为了获得 Macro7,我做了“记录宏”,用所需的(和工作的)公式编辑了单元格(通过按 F2),没有做任何更改,然后按 Enter。我点击停止录制,这就是输出。你在找什么?
【解决方案2】:

由于公式中可能出现的错误反复出现,显然很难轻松调试,所以这里有一个替代方案:

=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 末尾取出,将其递增到下一个字符并附加它
  • 注意:如果第一个类型是 not TR 你会得到意想不到的结果直到第一个 TR

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多