【问题标题】:Run-time error 1004 (adding formulas to cell range using loop)运行时错误 1004(使用循环将公式添加到单元格区域)
【发布时间】:2018-09-10 07:52:19
【问题描述】:

由于某种原因,以下代码生成 1004 运行时错误。这是一个简单的循环,可使用上方 3 行单元格中的值和特定单元格中的“=”符号将公式添加到单元格区域中。

上面 3 行的单元格包含一个公式作为文本,如下所示:IF(OR($A5="",W5<=0),"",RANK(W5,$W$5:$W$9248,0))

我尝试对 'eq' 值(即 '=' 符号)进行硬编码,但错误仍然存​​在,但如果您将其设为另一个字符,则它可以正常工作。我现在没有主意了。

提前致谢。

Sub insertFormula()

Application.ScreenUpdating = False

'Set variables
Dim c, rng As Range
Dim eq As String

Set rng = ActiveSheet.Range("S5:W5")
eq = ActiveSheet.Range("S1").Value 'This cell holds the = sign

'Loop through range and apply formula
For Each c In rng
    c.Value = eq & c.Offset(-3, 0).Value
Next c

Application.ScreenUpdating = True

End Sub

【问题讨论】:

  • 在哪里添加公式? c.formula = ... 添加公式,c.value = ... 没有。
  • 你的意思是写c.Offset(-3, 0).Value,还是应该写c.Offset(-3, 0).Address
  • 嗨 Storax,公式本身作为字符串存储在电子表格中,前面没有 = 符号,即:IF(OR($A5="",W5
  • 嗨,Chronocidal,是的,它应该是 .Value,因为我试图连接 '=' 符号和公式,所以循环粘贴 =(无论公式在上面 3 行的单元格中是什么)进入范围。谢谢。
  • 再一次,您必须使用. formula 设置一个公式。您可以使用自己编写的字符串,但必须确保它是有效的字符串,并且必须将其放入 ""

标签: excel vba


【解决方案1】:

另一种解决方案是使用 RC Notation

Sub insertFormula()

    'Set variables
    Dim rng As Range

    Set rng = ActiveSheet.Range("S5:W5")
    rng.Formula = "=R[-3]C"

End Sub

一行

 ActiveSheet.Range("S5:W5").Formula = "=R[-3]C"

更新根据 OP 的评论,似乎需要类似的东西

For Each c In rng
    c.Formula = "=" & c.Offset(-3, 0).Value & ""
Next c

您可以编写字符串以将它们用作公式,但您需要将它们放在引号之间

更新 2 单元格中似乎有一些空格可能导致运行时错误 1004。请先尝试清除字符串

For Each c In rng
    c.Formula = "=" & WorksheetFunction.Clean(c.Offset(-3, 0).Value) & ""
    'c.Formula = "=" & c.Offset(-3, 0).Value & ""
Next c

更新 3 字符串也可能包含不间断空格。你也可以删除它。

Dim s As String

For Each c In rng
    s = WorksheetFunction.Clean(c.Offset(-3, 0).Value)
    s = Replace(s, Chr(160), "")
    c.Formula = "=" & s
    'c.Formula = "=" & c.Offset(-3, 0).Value & ""
Next c

【讨论】:

  • 感谢您的建议。我试过 c.Formula = "=" & c.Offset(-3, 0).Value & "" 但仍然返回错误。
  • 您不需要在行尾添加& ""。 @Marc - 您是否尝试过手动执行其中一个单元格,以查看评估的公式是否实际有效?
  • 是的,没错,你并不真的需要& "" 在行尾,但它不会造成任何伤害。如果您仍然收到错误,则公式本身是错误的。我用评论中的示例进行了尝试,并且有效。并且“返回错误”不是有用的错误描述。也可以手动尝试导致错误的公式。
  • 您好 Storax,当手动​​将公式粘贴到单元格中时,该公式运行良好,没有错误。当 vba 试图将两者放在一起时,问题似乎围绕着 '=' 符号和公式的连接。谢谢。
  • 正如我所说的代码适用于 IF(OR($A5="",W5
猜你喜欢
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
相关资源
最近更新 更多