我们的项目中有一些代码看起来像这样:
Private Sub Method1() Call InnerMethod End Sub Private Sub Method2() InnerMethod End Sub Private Sub InnerMethod() '' stuff End Sub
Method2优于Method2的优势是什么?
来自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
在即时窗口中,如果您输入
Proc1
然后打印"Hello World".如果你输入
Call Proc1
然后打印"Hello World".如果你输入
Proc2 "World"
然后打印"Hello World".如果你输入
Call Proc2 "World"
你得到一个编译错误.你必须输入
Call Proc2("World")
除了调用方法之外,调用没有什么特别之处.当所有行都必须以关键字开头时,它是从Basic的旧时代开始的."让"是这些关键字中的另一个,它总是放在作业之前,但不再需要.
Method1和Method2完全相同.
我发现'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
关键字like 调用该函数
Dim a As String Call Test(a)
a
将包含字符串 Test
详细说明见以下链接:http: //blogs.msdn.com/b/ericlippert/archive/2003/09/15/52996.aspx