会写Excel 公式的同学一定对参数不陌生了。象SUM,AVERAGE函数这都是需要参数的。另外例如LEFT函数,第2个参数在省略的情况下,就默认值为1。接下来的几章我们就好好聊聊过程的参数。
参数,也就是一个变量名,通过它,在过程内就知道调用时所传过来的参数值。
参数的声明在声明的过程时就必须完成声明(有参数才需要声明)
Sub 过程名(参数变量列表)
如果要声明多个参数,则各个参数变量名之间用逗号隔开。
例如
Sub SubComputeArea(Length, Width)
该过程就有两个参数(类型没有指定,则为Variant类型)
如果要指定参数的类型为Long(长整形),可以这样写
Sub SubComputeArea(Length as long ,Width as long)
需注意的地方是,声明过的参数,不要在声明的过程内部再进行声明,否则会提示声明重复的错误提示。
例如下面的代码在过程内部再次声明参数的变量名,就是错误的。
Sub SubComputeArea(Length as long ,TheWidth as long)
Dim Length as long , TheWidth as long
End sub
可选参数,故名思议,表明这个参数是可选的,一般建议可选参数指定一个缺省值。
Optional 变量名 as 类型 = 缺省值
声明可选参数时,可选参数的后面只能再跟上可选参数。
示例
Sub SubComputeArea(Length as long , optionalWidth as long=100)
‘最后一个参数为可选参数
Sub SubComputeArea(Optional Length as long=100, Optional Width as long=100)
‘两个参数都是可选参数
Sub SubComputeArea(optional Length as long=100, Width as long)
‘声明有误,可选参数后面的参数只能是可选参数,会提示缺少Optional
下面给出完整的代码演示
Sub Main()
Dim i As Long, j As Long
i= 200: j = 200
Call SubComputeArea1(200)
Call SubComputeArea1(200, 200)
Call SubComputeArea1(i, 200)
Call SubComputeArea1(200, j)
Call SubComputeArea1(i, j)
Call SubComputeArea2
Call SubComputeArea2(Width:=300)
Call SubComputeArea2(300)
End Sub
Sub SubComputeArea1(Length As Long,Optional Width As Long = 100)
Dim strMsg As String
strMsg = 'SubComputeArea1(Length As Long, Optional Width As Long =100)' & vbNewLine
strMsg = strMsg & '可选参数 Width 的缺省值为:100'& vbNewLine
strMsg = strMsg & 'length = ' & Length & vbNewLine
strMsg = strMsg & 'width = ' & Width & vbNewLine
strMsg = strMsg & '结果:length * Width =' & Length * Width
MsgBox strMsg
End Sub
'最后一个参数为可选参数
Sub SubComputeArea2(Optional Length As Long= 100, Optional Width As Long = 200)
Dim strMsg As String
strMsg = 'SubComputeArea2(Optional Length As Long = 100, OptionalWidth As Long = 200)' & vbNewLine
strMsg = strMsg & '可选参数 Length 的缺省值为:100'& vbNewLine
strMsg = strMsg & '可选参数 Width 的缺省值为:200'& vbNewLine
strMsg = strMsg & 'length = ' & Length & vbNewLine
strMsg = strMsg & 'width = ' & Width & vbNewLine
strMsg = strMsg & '结果:length * Width =' & Length * Width
MsgBox strMsg
End Sub
'两个参数都是可选参数
在过程Main中,参数分别用了数值,变量做演示。
通常情况下,传递参数的时候,一般按按照声明的顺序传递。
但是有些过程(特别是对象的方法)的参数比较多,很多都是可选参数。
在输入公式的时候都是用,号带过,这招在VBA中也可以继续使用的。
但推荐使用命名参数的方法分配值,需要指定哪个参数变量的值就输入变量名:=表达式
例如 Call SubComputeArea2(Width:=300)
在使用命名参数的还有个好处,就是可以不用按照过程声明的参数的特定顺序来提供值。
例如:Call SubComputeArea2(Width:=300,Length=400)
在过程SubComputeArea2的参数声明是先Length,然后Width。
如果直接写成Call SubComputeArea2(300, 400)
则length的值为300,width的值为400。
联系客服