我们的项目中有一些代码看起来像这样:
Private Sub Method1()
Call InnerMethod
End Sub
Private Sub Method2()
InnerMethod
End Sub
Private Sub InnerMethod()
'' stuff
End Sub
Method2优于Method2的优势是什么?
答案 0 :(得分:37)
来自MSDN:
您无需使用呼叫 调用过程时的关键字。 但是,如果您使用Call关键字 调用需要的过程 参数,参数列表必须是 括在括号中。如果省略 Call关键字,你也必须省略 参数列表周围的括号。 如果您使用任一调用语法来调用 任何内在的或用户定义的 函数,函数的返回值 被丢弃了。
例如:
Sub Proc1()
Debug.Print "Hello World"
End Sub
Sub Proc2(text As String)
Debug.Print "Hello " & text
End Sub
在即时窗口中,如果您输入
Proc1
然后打印“Hello World”。如果输入
Call Proc1
然后打印“Hello World”。如果输入
Proc2 "World"
然后打印“Hello World”。如果输入
Call Proc2 "World"
您收到编译错误。你必须输入
Call Proc2("World")
答案 1 :(得分:11)
除了调用方法之外,调用没有什么特别之处。当所有行都必须以关键字开头时,它是从Basic的旧时代开始的。 “让”是这些关键字中的另一个,它总是放在作业之前,但不再需要。
Method1和Method2完全相同。
答案 2 :(得分:5)
我发现'call'关键字的主要区别在于具有ByRef Arguments的函数(我在MS-Access VBA编辑器中找到了这个)。如果您在没有“Call”关键字的情况下调用该函数,则不会为calle设置ByRef aruments。对于Ex:
Private Function Test(Optional ByRef refArg As String) As Boolean
refArg = "Test"
Test = True
End Function
如果您在没有Call
关键字的情况下调用此功能,例如
Dim a As String
Test(a)
在调用返回之后, a
将为空字符串
如果您使用Call
关键字调用此功能,例如
Dim a As String
Call Test(a)
a
将包含字符串Test
以下链接中提供的详细说明: http://blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx
答案 3 :(得分:2)
没有区别。
答案 4 :(得分:2)