使用可选参数VBA调用方法
我想通了,设置可选参数,需要“呼”的方法盈。使用可选参数VBA调用方法
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。
文档
Call
是一个可选的关键字,但是一个需要注意的是,如果你使用它,你必须包括在围绕参数的括号,但如果你忽略它,你必须不包括括号。从MSDN
报价:
您不需要调用过程时使用Call关键字。
但是,如果使用Call关键字调用要求参数的过程,参数列表必须用括号括起来。如果您省略了Call关键字,则还必须省略参数列表的括号。如果使用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
如果你在一个Function
使用Call
然后再考虑将其更改为一个Sub
相反,功能是为了返回一个值,如上面的情况。
像这样的工作:
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
完全不知道为什么注释掉的代码不工作...
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
但为什么'abc(“aaa”)'有效? – Vityata
因为当只有一个值时,遗留物不会做任何事情,它不会创建一个参数列表,它将内部的内容封装到一个值中。为了演示,这也将起作用:'(((((“aaa”)))))' – BenShelton
大约有当一些很好的例子和解释'Call' * can *和* can not * below below but but the fact is:**实际上没有理由使用它** - 与[一个小例外](http://stackoverflow.com/questions/2573597 /应-I-使用叩关键字在-VB-VBA#comment19036905_2573597)。所以请避免直到完全有必要。 – CallumDA