带可选参数的VBA Call方法

时间:2017-04-07 12:16:38

标签: vba call

我只是想出设置可选参数需要" Call"方法面前。

Public Sub Test()

    Call abc("aaa")
    Call abc("aaa", 2)

    abc("aaa") ' is fine
    abc("aaa", 2) ' is a syntax error

End Sub


Function abc(a As String, Optional iCol As Long = 3)

    MsgBox (iCol)

End Function

你能加一个"为什么这有意义?"我的新信息?

问候, 彼得

编辑:PS函数abc除了简化问题外别无用处。

3 个答案:

答案 0 :(得分:1)

文档

Call是一个可选的关键字,但有一点需要注意,如果您使用它,则必须在参数周围加上括号,但如果省略它,则不得包括括号。

来自MSDN:

  

调用过程时不需要使用Call关键字。

     

但是,如果使用Call关键字调用需要参数的过程,则必须将参数列表括在括号中。如果省略Call关键字,则还必须省略argumentlist周围的括号。如果使用Call语法调用任何内部函数或用户定义函数,则函数的返回值将被丢弃。

     

要将整个数组传递给过程,请使用数组名称后跟空括号。

链接:https://msdn.microsoft.com/en-us/library/office/gg251710.aspx

在实践中

这意味着允许以下语法:

Call abc("aaa")
Call abc("aaa", 2)
abc "aaa", 2
abc("aaa") ' <- Parantheses here do not create an argument list
abc(((("aaa")))) ' <- Parantheses here do not create an argument list

不允许使用以下语法:

Call abc "aaa", 2
abc("aaa", 2) ' <- Parantheses here create an argument list

函数返回值

使用函数获取返回值时,这不会生效,例如,如果您要执行以下操作,则需要使用括号:

Function abc(a As String, Optional iCol As Long = 3)
    abc = iCol
End Function

'## IMMEDIATE WINDOW ##
?abc("aaa", 2)      'this works
?abc "aaa, 2        'this will not work
?Call abc "aaa", 2  'this will not work
?Call abc("aaa", 2) 'this will not work

如果您在Call上使用Function,请考虑将其更改为Sub,而功能则意味着返回上述情况中的值。

答案 1 :(得分:0)

这样的事情会起作用:

Option Explicit

Public Sub Test()

    Dim strText As String

    strText = "E"
    Call Abc(strText, 3)
    Call Abc(strText, 2)

    Abc (strText)
'    Abc (strtext,5)

    Abc strText, 2
    Abc strText


End Sub

Public Sub Abc(strText As String, Optional iCol As Long = 5)

    Debug.Print iCol

End Sub

绝对不知道为什么评论代码不起作用......

答案 2 :(得分:0)

Call是一个可选关键字,如上面的答案中详细介绍的那样。

第二个选项

abc("aaa", 2) ' is a syntax error

只需使用:

abc "aaa", 2 

注意:如果您没有返回任何内容,那么拥有Function几乎没用,您可以定期Sub

Function返回String例如(只是快速编造的东西):

Function abc(a As String, Optional iCol As Long = 3) As String                    
    abc = a & CStr(iCol)        
End Function

然后调用它:

Public Sub Test()

    d = abc("aaa", 2)
    MsgBox d

End Sub