使用' Me'传递对UserForm实例的引用时输入Mismatch

时间:2014-06-18 14:50:56

标签: vba

在名为Module1的VBA模块中考虑以下代码:

Sub StartTest()
    Dim frm As UserForm1
    Set frm = New UserForm1
    frm.Show
End Sub

Sub Notify(fromForm As UserForm1)
    MsgBox "Notified."
End Sub

UserForm1中的以下代码:

Private Sub CommandButton1_Click()
    Module1.Notify (Me)
End Sub

当我运行StartTest时,表单会出现,当我点击按钮时,我会收到"类型不匹配" Module1.Notify (Me)CommandButton1_Click()上的错误。为什么呢?

如果我将Module1.Notify (Me)更改为Call Module1.Notify(Me)(感谢@ sous2817指出这一点)或Module1.Notify Me,那么我就不会收到错误。那么为什么当我使用Module1.Notify (Me)

时会发生这种情况

1 个答案:

答案 0 :(得分:3)

将按钮代码更改为:

Private Sub CommandButton1_Click()
    Call Module1.Notify(Me)
End Sub

似乎在我的结尾给出了预期的结果......

至于“为什么”,请参考:http://msdn.microsoft.com/en-us/library/wcx04ck5(VS.85).aspx

具体来说:

  

调用过程时不需要使用Call关键字。   但是,如果使用Call关键字来调用需要的过程   参数,参数列表必须括在括号中。如果你使用   要么调用语法来调用任何内部函数或用户定义的函数,   函数的返回值被丢弃。

我认为你不能得到比这更权威的解释: http://blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx