我只是想出设置可选参数需要" 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除了简化问题外别无用处。
答案 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