提供可選參數(shù)的缺省值
也可以給可選參數(shù)指定缺省值。在下例中,如果未將可選參數(shù)傳遞到函數(shù)過程,則返回一個缺省值。
SubListText(xAsString,OptionalyAs_
Integer=12345)
List1.AddItemx
List1.AddItemy
EndSub
EndSub
使用不定數(shù)量的參數(shù)一般說來,過程調(diào)用中的參數(shù)個數(shù)應(yīng)等于過程說明的參數(shù)個數(shù)。可用ParamArray關(guān)鍵字指明,過程將接受任意個數(shù)的參數(shù)。于是可以這樣來編寫計算總和的Sum函數(shù):
DimxAsInteger
DimyAsInteger
DimintSumAsInteger
SubSum(ParamArrayintNums())
ForEachxInintNums
y=y x
Nextx
intSum=y
EndSub
PrivateSubCommand1_Click()
Sum1,3,5,7,8
List1.AddItemintSum
EndSub
用命名的參數(shù)創(chuàng)建簡單語句
對許多內(nèi)建函數(shù)、語句和方法,VisualBasic提供了命名參數(shù)方法來快捷傳遞參數(shù)值。對命名參數(shù),通過給命名參數(shù)賦值,就可按任意次序提供任意多參數(shù)。為此,鍵入命名參數(shù),其后為冒號、等號和值(MyArgument:="SomeValue"),可以按任意次序安排這些賦值,它們之間用逗號分開。注意,下例中的參數(shù)順序和所要參數(shù)的順序相反:
FunctionListText(strNameAsString,OptionalstrAddressAsString)
List1.AddItemstrName
List2.AddItemstrAddress
EndSub
PrivateSubCommand1_Click()
ListTextstrAddress:="12345",strName:="YourName"
EndSub
如果過程有若干不必總要指定的可選參數(shù),則上述內(nèi)容更為有用。
確定對命名參數(shù)的支持
要確定哪一個函數(shù)、語句和方法支持命名參數(shù),用“代碼”窗口中的“AutoQuickInfo”功能,檢查“對象瀏覽器”,或者參閱語言參考。使用命名參數(shù)時要注意以下幾點:
在VisualBasic(VB)對象庫中的對象的方法不支持命名參數(shù)。而VisualBasicforapplications(VBA)對象庫中的所有的語言關(guān)鍵字都支持命名的參數(shù)。
在語法中,命名參數(shù)是用粗體和斜體字表示的。所有其它參數(shù)只用斜體字表示。
重點使用命名參數(shù)時不能省略所需參數(shù)的輸入。可以只省略可選參數(shù)。對于VisualBasic(VB)和VisualBasicforapplications(VBA)對象庫,“對象瀏覽器”對話框?qū)⒖蛇x參數(shù)用方括號[]括起來。
詳細(xì)信息請參閱語言參考中的"ByVal"、"ByRef"、"Optional"和"ParamArray"。
控制結(jié)構(gòu)概述
有了控制結(jié)構(gòu)就可控制程序執(zhí)行的流程。如果未復(fù)選控制流語句,程序便從左至右、自頂向下地貫穿這些語句。有些簡單程序可以只用單向流程來編寫,有些流程可以依靠運算符的優(yōu)先級來控制,但任何編程語言的效力和用途皆由其通過結(jié)構(gòu)和循環(huán)改變語句順序的能力而得。
判定結(jié)構(gòu)
VisualBasic過程能夠測試條件式,然后根據(jù)測試結(jié)果執(zhí)行不同的操作。
VisualBasic支持的判定結(jié)構(gòu)有:
1.If...Then
2.If...Then...Else
3.SelectCase
If...Then
用If...Then結(jié)構(gòu)有條件地執(zhí)行一個或多個語句。單行語法和多行塊語法都可以使用:
IfconditionThenstatement
IfconditionThen
statements
EndIf
condition通常是比較式,但它可以是任何計算數(shù)值的表達(dá)式。VisualBasic將這個值解釋為True或False:一個為零的數(shù)值為False,而任何非零數(shù)值都被看作True。若condition為True,則VisualBasic執(zhí)行Then關(guān)鍵字后面的所有statements。可以使用單行或多行語法有條件地執(zhí)行一個語句(下面兩個例子等價):
IfanyDate<NowThenanyDate=Now
IfanyDate<NowThen
anyDate=Now
EndIf
注意:If...Then的單行格式不用EndIf語句。如果condition為True時要執(zhí)行多行代碼,則必須使用多行塊If...Then...EndIf語法。
IfanyDate<NowThen
anyDate=Now
Timer1.Enabled=False '定時器控制失效。
EndIf
If...Then...Else
用If...Then...Else塊定義幾個語句塊,執(zhí)行其中一個語句:
Ifcondition1Then
[statementblock-1]
[ElseIfcondition2Then
[statementblock-2]]...
[Else
[statementblock-n]]
EndIf
VisualBasic首先測試condition1。如果它為False,VisualBasic就測試condition2,依此類推,直到找到一個為True的條件。當(dāng)它找到一個為True的條件時,VisualBasic就會執(zhí)行相應(yīng)的語句塊,然后執(zhí)行EndIf后面的代碼。作為一個選擇,可以包含Else語句塊,如果條件都不是True,則VisualBasic執(zhí)行Else語句塊。
If...Then...ElseIf只是If...Then...Else的一個特例。注意,可以使用任意數(shù)量的ElseIf子句,或者一個也不用。可以有一個Else子句,而不管有沒有ElseIf子句。
例如,應(yīng)用程序可以根據(jù)菜單控件數(shù)組中哪個控件被單擊而采取相應(yīng)的動作:
PrivateSubmnuCut_Click(IndexAsInteger)
IfIndex=0Then '“剪切”命令。
CopyActiveControl '調(diào)用通用過程。
ClearActiveControl
ElseIfIndex=1Then '“復(fù)制”命令。
CopyActiveControl
ElseIfIndex=2Then '“清除”命令。
ClearActiveControl
Else '“粘貼”命令。
PasteActiveControl
EndIf
EndSub
注意,總是可以添加更多的ElseIf塊到If...Then結(jié)構(gòu)中去。但是,當(dāng)每個ElseIf都將相同的表達(dá)式比作不同的數(shù)值時,這個結(jié)構(gòu)編寫起來很乏味。在這種情況下可以使用SelectCase判定結(jié)構(gòu)。
詳細(xì)信息請參閱《VisualBasic6.0語言參考手冊》中的“If...Then...Else語句”。
SelectCase
VisualBasic提供SelectCase結(jié)構(gòu)替代If...Then...Else,從而可在多個語句塊中有選擇地執(zhí)行其中一個。SelectCase語句的能力與If...Then...Else語句類似,但對多重選擇的情況,SelectCase語句使代碼更加易讀。
SelectCase在結(jié)構(gòu)的上方處理一個測試表達(dá)式并只計算一次。然后,VisualBasic將表達(dá)式的值與結(jié)構(gòu)中的每個Case的值進(jìn)行比較。如果相等,就執(zhí)行與該Case相關(guān)聯(lián)的語句塊。
SelectCasetestexpression
[Caseexpressionlist1
[statementblock-1]]
[Caseexpressionlist2
[statementblock-2]]
.
.
.
[CaseElse
[statementblock-n]]
EndSelect
每一個expressionlist是一個或幾個值的列表。如果在一個列表中有多個值,就用逗號把值隔開。每一個statementblock中含有零個或多個語句。
如果不止一個Case與測試表達(dá)式相匹配,則只對第一個匹配的Case執(zhí)行與之相關(guān)聯(lián)的語句塊。如果在表達(dá)式列表中沒有一個值與測試表達(dá)式相匹配,則VisualBasic執(zhí)行CaseElse子句(此項是可選的)中的語句。
例如,假定在If...Then...Else的例子中要向“編輯”菜單添加命令。為此可以另加一個ElseIf子句,或用SelectCase來寫函數(shù):
PrivateSubmnuCut_Click(IndexAsInteger)
SelectCaseIndex
Case0 '“剪切”命令。
CopyActiveControl '調(diào)用通用過程。
ClearActiveControl
Case1 '“復(fù)制”命令。
CopyActiveControl
Case2 '“清除”命令。
ClearActiveControl
Case3 '“粘貼”命令。
PasteActiveControl
CaseElse
frmFind.Show '顯示找到的對話框。
EndSelect
EndSub
注意SelectCase結(jié)構(gòu)每次都要在開始處計算表達(dá)式的值。而If...Then...Else結(jié)構(gòu)為每個ElseIf語句計算不同的表達(dá)式。只有在If語句和每一個ElseIf語句計算相同表達(dá)式時,才能用SelectCase結(jié)構(gòu)替換If...Then...Else結(jié)構(gòu)。
新聞熱點
疑難解答