執行時錯誤 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 引數的過程,呼叫可以成功。