我们的项目中有一些代码看起来像这样:
Private Sub Method1()
Call InnerMethod
End Sub
Private Sub Method2()
InnerMethod
End Sub
Private Sub InnerMethod()
'' stuff
End Sub
Run Code Online (Sandbox Code Playgroud)
Method2优于Method2的优势是什么?
Pat*_*uff 37
来自MSDN:
调用过程时,不需要使用Call关键字.但是,如果使用Call关键字调用需要参数的过程,则必须将参数列表括在括号中.如果省略Call关键字,则还必须省略argumentlist周围的括号.如果使用Call语法调用任何内部函数或用户定义函数,则会丢弃函数的返回值.
例如:
Sub Proc1()
Debug.Print "Hello World"
End Sub
Sub Proc2(text As String)
Debug.Print "Hello " & text
End Sub
Run Code Online (Sandbox Code Playgroud)
在即时窗口中,如果您输入
Proc1
Run Code Online (Sandbox Code Playgroud)
然后打印"Hello World".如果你输入
Call Proc1
Run Code Online (Sandbox Code Playgroud)
然后打印"Hello World".如果你输入
Proc2 "World"
Run Code Online (Sandbox Code Playgroud)
然后打印"Hello World".如果你输入
Call Proc2 "World"
Run Code Online (Sandbox Code Playgroud)
你得到一个编译错误.你必须输入
Call Proc2("World")
Run Code Online (Sandbox Code Playgroud)
Mar*_*own 11
除了调用方法之外,调用没有什么特别之处.当所有行都必须以关键字开头时,它是从Basic的旧时代开始的."让"是这些关键字中的另一个,它总是放在作业之前,但不再需要.
Method1和Method2完全相同.
小智 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
Run Code Online (Sandbox Code Playgroud)
如果你调用没有Call关键字的函数
Dim a As String
Test(a)
Run Code Online (Sandbox Code Playgroud)
a 在调用返回后将是一个空字符串
如果您使用Call关键字like 调用该函数
Dim a As String
Call Test(a)
Run Code Online (Sandbox Code Playgroud)
a 将包含字符串 Test
详细说明见以下链接:http: //blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx