本帖最后由 hwc2ycy 于 2013-12-4 09:05 编辑
会写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。 |