运行时错误 13 类型不匹配

不正确的代码

Public Sub DoSomething()
    DoSomethingElse "42?"
End Sub

Private Sub DoSomethingElse(foo As Date)
'    Debug.Print MonthName(Month(foo))
End Sub

为什么这不起作用?

VBA 正在努力将 42? 参数转换为 Date 值。当它失败时,无法执行对 DoSomethingElse 的调用,因为 VBA 不知道要传递的日期,因此它引发运行时错误 13 类型不匹配,因为参数的类型与预期类型不匹配(并且可以也不会被隐式转换。

正确的代码

Public Sub DoSomething()
    DoSomethingElse Now
End Sub

Private Sub DoSomethingElse(foo As Date)
'    Debug.Print MonthName(Month(foo))
End Sub

为什么这样做?

通过将 Date 参数传递给期望 Date 参数的过程,调用可以成功。