【问题标题】:VBA IF formula not working?VBA IF公式不起作用?
【发布时间】:2019-01-08 09:07:03
【问题描述】:

我有一些在几个工作簿之间工作的 VBA 代码

我遇到了无法应用此 IF 公式的问题。 我不确定我是如何得到Subscript out of range 错误的。

我尝试使用.Range("O").Range("O:O").Range("O", i),但都给出相同的 1004 错误。

我是否使用 .Range() 错误?我能够在不同的公式上使用范围,所以不知道为什么这不起作用。

Sub if_after()

    Dim co_detail As Workbook
    Set co_detail = ThisWorkbook

        With co_detail.Sheets("Detail")

            For i = 2 To 100
                .Range("O2").Formula = "=IF(L" & i & "=N" & i & ",'good','update')"
            Next i

        End With

End Sub

【问题讨论】:

  • Range("02") 应该是 Range("O2")(字母 'O' 而不是零)
  • @cybernetic.nomad 这只是一种类型。感谢您指出。我的原始代码使用 O.

标签: excel vba if-statement formula


【解决方案1】:

这是一个零而不是一个哦,全引号用于文本。引号也必须在带引号的字符串中加倍。

.Range("o" & i).Formula = "=IF(L" & i & "=N" & i & ", ""good"", ""update"")"

【讨论】:

  • 我的问题中的 0 是一个错字对不起。看起来我对单引号有误。感谢您对此进行修复。
  • 我实际上在我的一个公式中使用了一些单引号,它正在工作,但我不认为它被用作引号,而是文件路径的一部分。
  • 是的,像带有一个或多个空格的工作表名称必须用单引号括起来。
【解决方案2】:

您可以将整个代码简化为以下内容 - 根本不需要循环,您只需 Resize

Sub If_after()
    ThisWorkbook.Sheets("Detail").Range("O2").Resize(99).Formula = "=IF(L2=N2,""good"",""update"")"
End Sub

【讨论】:

  • 是的,谢谢你,我确实已经这样做了。一旦我发现了For 循环,我就能够回到不使用循环的另一种方式。
【解决方案3】:

尝试使用.Range("o" & i).FormulaR1C1 …,而不是使用.Range("o" & i).Formula = …。我总是使用FormulaR1C1 而不是Formula

【讨论】:

  • 我正在阅读 FormulaR1C1,但我没有看到任何明显的优势。
  • 在 xlR1C1 中,像 C3 这样的 xlA1 引用会被误解为 C:C。
  • @Jeeped,感谢您的提示。我会记住这一点的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多