excel 为什么这个VBA子程序总是出现错误424?

68de4m5k  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(182)

我试图创建一个需要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上的其他帖子以获取相关内容,但它们似乎都不适用于此。还值得一提的是,在我试图将其转换为一个名为的子程序之前,该代码确实工作了。

kiz8lqtg

kiz8lqtg1#

Call Approval("O28", "R28", "CheckBox1")将字符串“CheckBox 1”传递给sub。您可能希望传递checkbox对象。
尝试Call Approval("O28", "R28", CheckBox1)-注意CheckBox 1周围没有引号。虽然没有看到你的代码的其余部分,我不能说,如果这将工作。
这也是一个很好的例子,为什么最好的做法是指定参数的类型,如:

Sub Approval(PF as Range, Val as String, BoxNum as Object)

这将有助于更早地发现问题,并更容易识别问题。

dw1jzc5e

dw1jzc5e2#

从你的代码看,我认为凯文的答案是正确的。为了稍微扩展Kevin的答案,我强烈建议你在每个模块的顶部都有以下代码行:

Option Explicit

这将迫使你声明每个变量类型,正如Kevin所说,这是最佳实践。作为一个很大的附带好处,它还将检测任何可能拼写错误的变量,这些变量可能会在您的代码中导致无休止的问题,直到您找到拼写错误;- )

相关问题