我试图创建一个需要3个输入的Sub。前两个输入没有问题,但第三个不起作用。每次我尝试调用该函数时,都会收到错误424,它指出需要一个对象,并用星号突出显示下面显示的行。
让这个函数工作将保存大量的时间和代码行,因为工作表将包含大量的复选框。总的想法是,当用户选中该框并且第一个输入单元格编号为“FAIL”时,第二个输入单元格的值将被更改为包含用户名和选中日期。我相信这是一个基本的修复,但我该如何着手修复它呢?
Sub Approval(PF, Val, BoxNum)
If Range(PF).Value = "FAIL" Then
If BoxNum.Value = True Then
User = Application.UserName
Dim Today
Today = Date
Range(Val).Value = User & " " & Today
Else
Range(Val).Value = ""
End If
Else
BoxNum.Value = False **********
Range(Val).Value = ""
Exit Sub
End If
End Sub
Private Sub CheckBox1_Click()
Call Approval("O28", "R28", "CheckBox1")
End Sub
我试着查看Microsoft VBA指南以及SO上的其他帖子以获取相关内容,但它们似乎都不适用于此。还值得一提的是,在我试图将其转换为一个名为的子程序之前,该代码确实工作了。
2条答案
按热度按时间kiz8lqtg1#
Call Approval("O28", "R28", "CheckBox1")
将字符串“CheckBox 1”传递给sub。您可能希望传递checkbox对象。尝试
Call Approval("O28", "R28", CheckBox1)
-注意CheckBox 1周围没有引号。虽然没有看到你的代码的其余部分,我不能说,如果这将工作。这也是一个很好的例子,为什么最好的做法是指定参数的类型,如:
这将有助于更早地发现问题,并更容易识别问题。
dw1jzc5e2#
从你的代码看,我认为凯文的答案是正确的。为了稍微扩展Kevin的答案,我强烈建议你在每个模块的顶部都有以下代码行:
这将迫使你声明每个变量类型,正如Kevin所说,这是最佳实践。作为一个很大的附带好处,它还将检测任何可能拼写错误的变量,这些变量可能会在您的代码中导致无休止的问题,直到您找到拼写错误;- )