Excel VBA : can't paste my function into a cell

标签 excel excel-formula vba

我正在尝试粘贴

=IF(AND(C4-C3<($I$1/1000),A4=A3),"OOOO","-----")

进入一个单元格,我通过
 Range("I3").Select
 ActiveCell.FormulaR1C1 = "=IF(AND(C4-C3<($I$1/1000),A4=A3)," & Chr(34) & "OOOO" & Chr(34) & "," & Chr(34) & "-----" & Chr(34) & ")"
 Range("I3").Select

返回运行时错误“1004”
应用程序定义或对象定义的错误

我已经尝试过双引号并看到 & Chr(34) & 解决方法并尝试过。没有任何效果。
此外,一些简单的事情
 ActiveCell.FormulaR1C1 = "=IF("

不起作用,但是
 ActiveCell.FormulaR1C1 = "=IF" 

做。

奇怪的是,这在代码中有效
Range("C3").Select
ActiveCell.FormulaR1C1 = "=MID(B3,1,2)*3600+MID(B3,4,2)*60+MID(B3,7,9)"
Range("C3").Select

我之前做的。
如果我将 "=MID(B3,1,2)*3600+MID(B3,4,2)*60+MID(B3,7,9)"(而不是我尝试使用的字符串)粘贴到调试时出现问题代码并点击继续,它将粘贴该行,因此在两个语句之间不会发生任何事情。只有一些选择和复制/粘贴之间会发生什么,但如果你想看的话,我还是会把它包括在这里
    Range("C3").Select
  ActiveCell.FormulaR1C1 = "=MID(B3,1,2)*3600+MID(B3,4,2)*60+MID(B3,7,9)"
Range("C3").Select
Selection.Copy
Range("D3").Select
Selection.End(xlDown).Select
ActiveSheet.Paste
Range("K3:Z4").Select
Application.CutCopyMode = False
Selection.Copy
Range("K1").Select
ActiveSheet.Paste
Columns("H:H").Select
Application.CutCopyMode = False
Selection.Cut
Columns("M:M").Select
ActiveSheet.Paste
Columns("I:I").Select
Selection.Cut
Columns("H:H").Select
ActiveSheet.Paste
Range("I3").Select
ActiveCell.FormulaR1C1 = "=IF(AND(C4-C3<($I$1/1000),A4=A3)," & Chr(34) & "OOOO" & Chr(34) & "," & Chr(34) & "-----" & Chr(34) & ")"
Range("I3").Select

最佳答案

快速回复:

您需要将公式更改为 R1C1 样式 - 或者更简单,将公式分配给 .Formula而不是 .FormulaR1C1属性(property)。

更长的解释:

Excel 有两种引用单元格的方式:

  • 默认的 A1 表示法,通过提供列字母和行号来引用单元格 - 并通过前缀 $ 将其固定为行或列.
  • 通过使用 R 指定行来引用单元格的 R1C1 表示法以及带有C 的行号和列和列号。如果 [] 中提供了号码括号,引用是相对的,没有括号是绝对的。要使用此符号,您需要在 Excel 选项(在公式下)
  • 中进行设置

    R1C1 表示法的优点是相对引用在应用于多个单元格时不会改变!例如 A1 公式 =A1+B1在 C1 中输入的将是 =RC[-2]+RC[-1] .如果现在将公式复制到 C 列下,则行号将以 A1 样式在每一行中更改(例如 =A2+B2=A3+B3 等)。在 R1C1 表示法中,它是完全相同的公式,没有任何变化。

    在普通的 Excel 用户界面中,这无关紧要,只是一个偏好问题,因为只要您使用 $ 正确修复绝对引用,Excel 就会自动调整公式。 .*

    但是,如果您想搜索和替换引用,它在宏中变得更加有用!想象在上面的例子中,你想改变公式 =A1+B1=A1+A2 - 使用此公式的任何地方。在 A1 中,您不能简单地用 A2 搜索和替换 B1,因为 B1 将变为 B2、B3 等等。但是,在 R1C1 中,您只需重新输入 RC[-1]R[1]C你就完成了。

    出于这个原因,Excel 宏记录器还会记录 R1C1 中的公式 - 无论您将其应用到何处,它都是相同的公式!但是,每个 Range有一个 .FormulaFormulaR1C1您可以设置的属性 - 其他属性将相应更新。因此,请使用适合您需要的任何样式。

    在您的情况下,如果您打算将 R1C1 公式也用于 I3 以外的其他单元格,则它是有意义的。

    A1:Range("I3").Formula = "=IF(AND(C4-C3<($I$1/1000),A4=A3),""OOOO"",""-----"") "
    Range("J4").Formula = "=IF(AND(D5-D4<($I$1/1000),B5=B4),""OOOO"",""-----"")"

    R1C1:strFormula = "=IF(AND(R[1]C[-6]-RC[-6]<(R1C9/1000),R[1]C[-8]=RC[-8]),""OOOO"",""-----""")"
    范围(“I3”).FormulaR1C1 = strFormula
    范围(“J4”).FormulaR1C1 = strFormula

    !

    ( * 有趣的边节点:在 Excel 的第一个版本中,Microsoft 使用 R1C1 作为默认符号,因为它在多个方面优于 A1。但是,由于当时 Lotus 1-2-3 是标准并且 A1 已经被接受作为规范,它在以后的版本中恢复了这种表示法。)

    关于Excel VBA : can't paste my function into a cell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14613855/

    相关文章:

    excel - 获取范围内最后一个非空单元格的列号(如果值不唯一)

    vba - 动态调用从形状 OnAction 属性传递参数的宏

    vba - 为什么 'On Error' 总是像键为空一样触发?

    excel - 如何通过比较列中的对来过滤 Excel 中的数据

    VBA复制文件它不存在

    Excel - 从单元格范围创建图表,同时排除空值?

    excel - 如何对相同字母但不同单词使用 Excel VLOOKUP

    excel - 如何引用另一个工作表中的数据表列?

    excel - 使用 IEX API 获取实时股票信息(雅虎财经替代品)?

    EXCEL - 如果列中的单元格包含列表中的任何字符串(特定于每一行的列表),则取平均值