由于变量的原因,公式给出了运行时错误



大家早上好,

我是VBA的初学者,正在尝试各种各样的东西。我想把一个公式放在一排单元格里,但遇到了一个问题。我使用了一些变量,这些变量似乎在我的公式中造成了问题。我已经改变了我在这个网站上发现的一些东西(比如从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

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

用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

最新更新