Call关键字在VB6中有什么作用?

时间:2009-01-26 14:08:20

标签: vba vb6 syntax

我们的项目中有一些代码看起来像这样:

Private Sub Method1()
    Call InnerMethod
End Sub

Private Sub Method2()
    InnerMethod
End Sub

Private Sub InnerMethod()
    '' stuff
End Sub

Method2优于Method2的优势是什么?

5 个答案:

答案 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)

这是一个post,它描述了何时需要使用呼叫而不使用呼叫以及何时围绕参数括起来。

您还可以从MSDN上阅读有关call的更多信息。基本上主要区别在于,当您使用call调用函数时,您无法访问返回值。