在名为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)
?
答案 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