VBA过程 可选参数Optional

回顾

我们先看msgbox

MsgBox(Prompt, [Buttons As VbMsgBoxStyle = vbOKOnly], [Title], [HelpFile], [Context]) As VbMsgBoxResult

Msgbox共5个参数,而我们经常只传递第1个参数,其它4个参数可以不用传递。

过程中可以不用传值的参数称为可选参数。

观察它的语法,可选参数用中括号[ ]表示。

接下来我们自己定义的过程中添加可选参数,通过Optional关键字。


1 可选参数语法

Sub 过程名称( 参数1 As 数据类型1 , Optional 参数2 As 数据类型2…)
  语句块
End Sub

表示将第2个参数为可选参数。可以同时针对多个参数加Optional。


示例:定义过程同时可以求2个数、3个数的和。

Sub sum61(a As Integer, b As Integer, Optional c As Integer)
  Debug.Print "和为:" & (a + b + c)
End Sub

 

Sub main61()
  sum61 1, 2, 3 '输出6
  sum61 1, 2  '输出3
End Sub

调用sum61 1, 2, 3时,传递3个参数。

调用sum61 1, 2时,只传递3个参数,第3个参数声明为Optional可选参数,不用传值;第3个参数因为声明为Integer,使用自动初始化的值0。


2 判断是否传递参数

Optional参数后有时不加数据类型,也就是用Variant类型,优点是如果不传递时,可以通过IsMissing函数返回True,如果传递则返回False。


示例:定义过程同时可以求2个数、3个数的和。如果省略第3个参数,则自动设为1000。

Sub sum62(a As Integer, b As Integer, Optional c)
  'IsMissing判断variant类型变量是否为空
  Debug.Print "IsMissing(c):" & IsMissing(c)

  If IsMissing(c) Then c = 1000
  Debug.Print "和为:" & (a + b + c)
End Sub

Sub main62()
  sum62 1, 2, 3 '输出 6
  sum62 1, 2  '输出1003
End Sub

输出结果:

IsMissing(c):False
和为:6
IsMissing(c):True
和为:1003