【问题标题】:Range.Formula is giving a Run-time error because of variables [duplicate]Range.Formula 由于变量而出现运行时错误[重复]
【发布时间】:2021-06-16 20:10:44
【问题描述】:

大家早上好,

我是 VBA 的初学者,我尝试过各种各样的事情。 Atm 我正在尝试将公式放置在一行单元格中,但我遇到了问题。 我使用了一些似乎在我的公式中引起问题的变量。 我已经更改了在此站点上找到的一些内容(例如从 ActiveCell 更改为 Range 并添加 rr 和 r 变量。

但这并不能解决我收到的错误消息。 我查了这个错误,但不太明白是什么意思。

谁能告诉我是什么导致了我的代码中的问题以及错误消息的含义,以便我可以自己尝试调试它。

使用 F8,我已经确保所有变量都已正确填写。 错误来自 Range(r).Formula 行。

Sub Zoeker()

Sheets("Invoer").Select
NumRows_Gist = Range("A3", Range("A3").End(xlDown)).Rows.Count
NumRows_Vand = Range("I3", Range("I3").End(xlDown)).Rows.Count

For x = 1 To NumRows_Vand

Dim r As String

rr = Range("O" & 2 + x).Row
r = "O" & Range("O" & 2 + x).Row

Range(r).Formula = "=IF(IF(IFERROR(VLOOKUP(I" & rr & ";$A$3:$B$" & NumRows_Gist & ";2;FALSE);'Niet vorige upload') <> 'Niet vorige upload'; VLOOKUP(I" & rr & ";$A$3:$B$" & NumRows_Gist & ";2;FALSE) + J" & rr & "; 'correct') <> 0; ''; '0')"

Next

End Sub

【问题讨论】:

  • 嗨,vlookup 公式中的那些分号不应该是逗号吗?还是不同语言版本的excel差异?
  • @JoeJ 嗨,我不确定,但在我的 Excel 中,我在参数之间使用分号。我首先制作了公式并检查了它,现在我正试图将它带入我正在运行的宏中。所以公式本身可以按预期工作。
  • 在 VBA 中,您必须将公式放入 English 格式,用英文函数名和逗号作为参数分隔符。这样,您的代码将保持独立于 Excel 中使用的语言。替代方法是使用FormulaLocal - 但您需要确保 Excel 的语言始终相同
  • @FunThomas 我更改了分号,但这没有区别。我不认为分号导致错误。
  • 分号一定要改成逗号,文字要双引号,不能单引号。 (您必须将双引号加倍,因为它们是带引号的字符串的一部分)。

标签: excel vba excel-formula


【解决方案1】:

VBA 中的 Excel 公式

尝试以下方法:

Range(r).Formula = "=IF(IF(IFERROR(" _
    & "VLOOKUP(I" & rr & ",$A$3:$B$" & NumRows_Gist & ",2,FALSE)," _
    & """Niet vorige upload"")<>""Niet vorige upload""," _
    & "VLOOKUP(I" & rr & ",$A$3:$B$" & NumRows_Gist & ",2,FALSE)+J" _
    & rr & ",""correct"")<>0, """", ""0"")"

我使用了以下过程,直到我做对了:

Option Explicit

Sub testFormula()
    Const rr As Long = 5
    Const NumRows_Gist As Long = 100
    Dim s As String
    s = "=IF(IF(IFERROR(" _
        & "VLOOKUP(I" & rr & ",$A$3:$B$" & NumRows_Gist & ",2,FALSE)," _
        & """Niet vorige upload"")<>""Niet vorige upload""," _
        & "VLOOKUP(I" & rr & ",$A$3:$B$" & NumRows_Gist & ",2,FALSE)+J" _
        & rr & ",""correct"")<>0, """", ""0"")"
    Debug.Print s
End Sub

【讨论】:

  • @Rory 和 VBasic 谢谢。双引号和逗号确实是问题所在。
【解决方案2】:

使用 VBA 编写公式很棘手。 您的公式中至少有以下错误:

  • 您需要用逗号作为分隔符而不是分号来编写公式
  • 您需要在公式中使用双引号而不是单引号编写字符串。但由于 VBA 编译器会将双引号字符视为 字符串结尾,因此您需要将其加倍:'Niet vorige upload' 应为 ""Niet vorige upload"",最后需要将空字符串指定为""""

您应该始终将公式写入中间变量并使用调试器检查内容。

dim f as string
f = "=IF(IF(IFERROR(VLOOKUP ...  ' <- Put your formula here
Debug.print f

要了解如何在 VBA 中指定公式,请切换到 Excel,在单元格中输入所需的公式,然后切换回 VBA 编辑器,然后在即时窗口中输入 ? activeCell.formula

【讨论】:

  • 感谢您的提示。我来自 C++ 和 PHP 背景(几年前),我想我犯了一些错误 :)
猜你喜欢
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多