电竞比分网-中国电竞赛事及体育赛事平台

分享

VBA語法基礎(chǔ)(下)_不熄的煙斗

 hxj 2008-04-12
VBA語法基礎(chǔ)(下)
2008年03月20日 星期四 上午 10:13

- - - - - - - - - - - - - - - - -- - -
VBA語法基礎(chǔ)(下)
- - - - - - - - - - - - - - - - -- - -
基本語句
1、控制程序流程語句
(1) GoTo語句
該語句將執(zhí)行的程序轉(zhuǎn)到指定的標(biāo)簽所在的語句指令,但不能轉(zhuǎn)移到過程之外的指令。例如,在進(jìn)行錯(cuò)誤捕捉時(shí),發(fā)生錯(cuò)誤后,程序轉(zhuǎn)移至標(biāo)簽所在處執(zhí)行。
(2) If…Then語句
這種類型的語句用于條件判斷中,當(dāng)滿足條件時(shí),執(zhí)行相應(yīng)的語句;當(dāng)條件不滿足時(shí),執(zhí)行其它的操作。
基本語法為:
If <條件> Then<條件滿足時(shí)的執(zhí)行語句>
If … Then語句有幾種形式分別用于不同的情況:
①當(dāng)只有一個(gè)條件時(shí),可使用下面的結(jié)構(gòu):
If <條件> Then <條件滿足時(shí)的執(zhí)行語句>[Else <條件不滿足時(shí)的執(zhí)行語句>]
其中,Else子句可選。如果該語句不在同一行中,則應(yīng)在后面加上EndIf語句,即:
If <條件> Then
   [指令]
End If
或:
If <條件> Then
   [指令]
Else
   [指令]
End If
當(dāng)條件為真時(shí),執(zhí)行Then后面的語句并結(jié)束If…Then語句的執(zhí)行,否則執(zhí)行Else后面的語句或結(jié)束If…Then語句的執(zhí)行。
②當(dāng)有兩個(gè)或多個(gè)條件時(shí),可使用嵌套的If … Then 結(jié)構(gòu):
If <條件> Then
   [指令]
ElseIf <條件1> Then
   [指令]
[Else]
   [指令]
End If
上面只是兩層嵌套,可以根據(jù)情況使用多層嵌套。當(dāng)條件為真時(shí),執(zhí)行Then后面的語句并結(jié)束If…Then語句的執(zhí)行,否則判斷條件1,當(dāng)條件1為真時(shí),執(zhí)行Then后面的語句并結(jié)束If…Then語句的執(zhí)行,否則執(zhí)行Else后面的指令。
(3) Select Case語句
當(dāng)需要作出三種或三種以上的條件判斷時(shí),最后使用SelectCase語句。其基本語法為:
Select Case <測(cè)試表達(dá)式>
   [Case 條件表達(dá)式1]
[指令]
   [Case 條件表達(dá)式2]
[指令]
   ……
   [Case Else]
[指令]
End Select
當(dāng)某個(gè)條件表達(dá)式與測(cè)試表達(dá)式相匹配時(shí),則執(zhí)行其后的指令,否則執(zhí)行Else(如果有的話)后的指令,然后結(jié)束SelectCase塊的執(zhí)行。
此外,Select Case語句還可以嵌套。

2、循環(huán)語句
循環(huán)即重復(fù)執(zhí)行某段代碼。在VBA中,有多種可以構(gòu)成循環(huán)的語句結(jié)構(gòu)。
(1) For … Next 循環(huán)
其語法如下:
For <計(jì)數(shù)器=開始數(shù)> To<結(jié)束數(shù)> [step 步長(zhǎng)]
   [指令]
   [Exit For]
   [指令]
Next [計(jì)數(shù)器]
從開始到結(jié)束,反復(fù)執(zhí)行For和Next之間的指令塊,除非遇到ExitFor語句,將提前跳出循環(huán)。其中,步長(zhǎng)和ExitFor語句以及Next后的計(jì)數(shù)器均為可選項(xiàng)。
For…Next循環(huán)中可以再包含F(xiàn)or…Next循環(huán),即For…Next循環(huán)可以嵌套使用。
(2) Do While循環(huán)
只有在滿足指定的條件時(shí)才執(zhí)行Do While循環(huán)。有兩種形式:
■ 第一種形式
Do [While 條件]
   [指令]
   [Exit Do]
   [指令]
Loop
當(dāng)條件滿足時(shí)執(zhí)行指令。
■ 第二種形式
Do
   [指令]
   [Exit Do]
   [指令]
Loop [While 條件]
先執(zhí)行指令,然后再判斷條件,如果條件滿足則再次執(zhí)行指令。
其中Exit Do語句表示提前退出指令塊。
(3) Do Until循環(huán)
與Do While循環(huán)一樣,也有兩種形式;
■ 第一種形式
Do [Until 條件]
   [指令]
   [Exit Do]
   [指令]
Loop
■ 第二種形式
Do
   [指令]
   [Exit Do]
   [指令]
Loop [Until 條件]
執(zhí)行指令,直到條件滿足時(shí)退出循環(huán)。
(4) While … Wend循環(huán)
其語法為:
While <條件>
   [指令]
Wend
當(dāng)條件滿足時(shí),則執(zhí)行指令。

- - - - - - - - - - - - - - - -- - - -
過程
過程由一組完成所要求操作任務(wù)的VBA語句組成。子過程不返回值,因此,不能作為參數(shù)的組成部分。
其語法為:
[Private|Public] [Static] Sub <過程名>([參數(shù)])
   [指令]
   [Exit Sub]
   [指令]
End Sub
說明:
(1)Private為可選。如果使用Private聲明過程,則該過程只能被同一個(gè)模塊中的其它過程訪問。
(2)Public為可選。如果使用Public聲明過程,則表明該過程可以被工作簿中的所有其它過程訪問。但是如果用在包含OptionPrivateModule語句的模塊中,則該過程只能用于所在工程中的其它過程。
(3)Static為可選。如果使用Static聲明過程,則該過程中的所有變量為靜態(tài)變量,其值將保存。
(4) Sub為必需。表示過程開始。
(5)<過程名>為必需??梢允褂萌我庥行У倪^程名稱,其命名規(guī)則通常與變量的命名規(guī)則相同。
(6)參數(shù)為可選。代表一系列變量并用逗號(hào)分隔,這些變量接受傳遞到過程中的參數(shù)值。如果沒有參數(shù),則為空括號(hào)。
(7) Exit Sub為可選。表示在過程結(jié)束之前,提前退出過程。
(8) End Sub為必需。表示過程結(jié)束。
如果在類模塊中編寫子過程并把它聲明為Public,它將成為該類的方法。

-- - - - - - - - - - - - - - - - - - -
函數(shù)
函數(shù)(function)是能完成特定任務(wù)的相關(guān)語句和表達(dá)式的集合。當(dāng)函數(shù)執(zhí)行完畢時(shí),它會(huì)向調(diào)用它的語句返回一個(gè)值。如果不顯示指定函數(shù)的返回值類型,就返回缺省的數(shù)據(jù)類型值。
聲明函數(shù)的語法為:
[Private|Public] [Static] Function <函數(shù)名>([參數(shù)]) [As 類型]
   [指令]
   [函數(shù)名=表達(dá)式]
   [Exit Function]
   [指令]
   [函數(shù)名=表達(dá)式]
End Function
說明:
(1)Private為可選。如果使用Private聲明函數(shù),則該函數(shù)只能被同一個(gè)模塊中的其它過程訪問。
(2)Public為可選。如果使用Public聲明函數(shù),則表明該函數(shù)可以被所有ExcelVBA工程中的所有其它過程訪問。不聲明函數(shù)過程的作用域時(shí),默認(rèn)的作用域?yàn)镻ublic。
(3)Static為可選。如果使用Static聲明函數(shù),則在調(diào)用時(shí),該函數(shù)過程中的所有變量均保持不變。
(4) Function為必需。表示函數(shù)過程開始。
(5)<函數(shù)名>為必需??梢允褂萌我庥行У暮瘮?shù)名稱,其命名規(guī)則與變量的命名規(guī)則相同。
(6)參數(shù)為可選。代表一系列變量并用逗號(hào)分隔,這些變量是傳遞給函數(shù)過程的參數(shù)值。參數(shù)必須用括號(hào)括起來。
(7) 類型為可選。指定函數(shù)過程返回的數(shù)據(jù)類型。
(8) ExitFunction為可選。表示在函數(shù)過程結(jié)束之前,提前退出過程。
(9) End Function為必需。表示函數(shù)過程結(jié)束。
通常,在函數(shù)過程執(zhí)行結(jié)束前給函數(shù)名賦值。
函數(shù)可以作為參數(shù)的組成部分。但是,函數(shù)只返回一個(gè)值,它不能執(zhí)行與對(duì)象有關(guān)的動(dòng)作。
如果在類模塊中編寫自定義函數(shù)并將該函數(shù)的作用域聲明為Public,這個(gè)函數(shù)將成為該類的方法。

- - - - - - - - - - - - - - - -- - - -
事件處理過程
要對(duì)一個(gè)控件事件編寫事件處理程序,應(yīng)先打開窗體的代碼窗口并從可用對(duì)象的下拉列表中選擇所需的控件。然后,從該控件的可用事件下拉列表中選擇所用的事件。此時(shí),對(duì)事件處理程序的定義語句就會(huì)自動(dòng)出現(xiàn)在代碼窗口中,就可以直接編寫事件處理程序了。
在Excel中,有下面幾類事件,即Excel應(yīng)用程序事件、工作簿事件、工作表事件、圖表事件、用戶窗體事件等。

- - - - - - - - - - - - - - - -- - - -
類模塊
類模塊是存放共享變量以及共享代碼的存儲(chǔ)庫(kù)。創(chuàng)建一個(gè)類模塊,實(shí)際上也是在創(chuàng)建一個(gè)COM(組件對(duì)象模型)接口。因此,類模塊允許通過一個(gè)由屬性、方法和事件組成的可編程接口向外界描述應(yīng)用程序,同時(shí)保證保留對(duì)應(yīng)用程序的控制權(quán)。也就是說,類模塊能夠讓程序?qū)崿F(xiàn)“封裝”,這樣,在其它工程中可以直接使用某類模塊而不需要訪問源代碼。此外,可以使用類來創(chuàng)建自已的庫(kù),如果要使用的話,只需要在任何新的工程中添加一個(gè)對(duì)該類的引用就行了。并且,如果要改變程序,只需對(duì)類模塊改動(dòng)就行了,而不需要在程序的每個(gè)部分都作改動(dòng)。

- - - - - - - - - - - - - - - -- - - -
屬性過程
屬性過程(propertyprocedure)是特殊的過程,用于賦予和獲取自定義屬性的值。屬性過程只能在對(duì)象模塊如窗體或類模塊中使用。
有三種屬性過程:
Property Let
   給屬性賦值
Property Get
   獲取屬性的值
Property Set
   將對(duì)象引用賦給屬性引用
- - - - - - - - - - - - - - - - - - --
調(diào)用子過程和函數(shù)過程
子過程可以用下面三種方法調(diào)用。第一種使用Call語句:
Call DoSomething(參數(shù)1,參數(shù)2,……)
如果使用Call語句,就必須用小括號(hào)將參數(shù)列表括起來。
第二種是直接利用過程名:
DoSomething 參數(shù)1,參數(shù)2,……
此時(shí),不用在參數(shù)列表兩邊加上括號(hào)。
如果不想使用函數(shù)的返回值,可以用上述任一種方法調(diào)用函數(shù)。否則,可以用函數(shù)名作為表達(dá)式的組成部分,如
If GetFunctionResult(parameter)=1 Then
如果用函數(shù)調(diào)用作為表達(dá)式的一部分,參數(shù)列表必須放在小括號(hào)中。
第三種是使用Run方法。

在過程間傳遞參數(shù)
在很多情況下,需要在子過程或函數(shù)中調(diào)用另一個(gè)自定義函數(shù)或子過程,這時(shí),在被調(diào)用過程中就要用到在調(diào)用過程中使用的某個(gè)變量。因此,可把該變量作為參數(shù)傳遞給被調(diào)用過程。不管被調(diào)用過程是在同一模塊、同一工程中的過程,還是在遠(yuǎn)程服務(wù)器上的類中的一個(gè)方法,從一個(gè)過程向另一個(gè)過程傳遞變量的原理都是一樣的。
被調(diào)用過程(而不是調(diào)用過程)決定了變量如何從調(diào)用過程傳遞到被調(diào)用過程。
1、VBA允許用兩種不同的方式在過程和組件之間傳遞參數(shù)。在子過程或函數(shù)的定義部分,可以指定參數(shù)列表中的變量的傳遞方式:ByRef(按引用)或者ByVal(按值)。
(1) ByRef
這是VBA中在過程間傳遞變量的默認(rèn)方法。ByRef是指按引用傳遞變量,即傳遞給被調(diào)用過程的是原變量的引用。因此,如果改變了被調(diào)用過程中的變量值,其變化就會(huì)反映到調(diào)用過程中的那個(gè)變量,因?yàn)樗鼈儗?shí)際上是同一個(gè)變量。
(2) ByVal
如果使用ByVal關(guān)鍵字傳遞變量,被調(diào)用過程獲得的就是該變量的獨(dú)立副本。因此,改變被廟用過程中該變量的值不會(huì)影響調(diào)用過程中該變量原來的值。
2、Optional參數(shù)
Optional關(guān)鍵字用來指定某個(gè)特定的參數(shù)并不一定要傳遞,即為可選參數(shù)。但是,該參數(shù)必須放在最后。
3、ParamArray
使用ParamArray關(guān)鍵字能夠使過程按受一組數(shù)目可變的參數(shù)。ParamArray參數(shù)必須是參數(shù)列表中的最后一個(gè)參數(shù),而且不能在使用了Optional關(guān)鍵字的參數(shù)列表中使用ParamArray參數(shù)。
- - - - - - - - - - - - - - - - - - - -
變量(常量)作用域和生存期
有時(shí)需要在工程內(nèi)的所有過程中使用某個(gè)變量,而有時(shí)某些變量又只需要在某些特定的過程中用到,變量的這種可見性稱為變量作用域。
變量存在和作用的時(shí)間,稱為變量的生存期。
變量或常數(shù)在程序中聲明的位置決定了變量的作用域和生存期。
總的說來,在模塊的聲明部分用Private關(guān)鍵字聲明的變量可以被模塊中的所有過程使用;在模塊的聲明部分用Public關(guān)鍵字聲明的變量可以被整個(gè)工程使用;若某個(gè)對(duì)象引用指向某類模塊,則在該類模塊的聲明部分用Public關(guān)鍵字聲明的變量可以被整個(gè)工程使用;在子過程或函數(shù)中用Dim語句聲明的變量只能被聲明這些變量的過程使用。
(1) 過程級(jí)作用域
在一個(gè)過程(即子過程或函數(shù))內(nèi)聲明的變量只能在該過程內(nèi)使用,其生存期在執(zhí)行了End Sub或End Function語句后結(jié)束。因此,可以在不同的過程中定義具有相同名稱的不同變量。聲明過程級(jí)作用域的變量,在過程中用Dim語句聲明變量。
此外,還有一種具有過程級(jí)作用域的特殊變量,稱為靜態(tài)變量。靜態(tài)變量是在過程中定義的,盡管這種變量也具有過程級(jí)作用域,但是它具有模塊級(jí)的生存期。這意味著只能在定義靜態(tài)變量的過程內(nèi)使用這些變量,但是變量的值在兩次過程調(diào)用之間是保持不變的。用Static關(guān)鍵字聲明靜態(tài)變量:
Static lngExcuted As Long
還可以聲明一個(gè)過程為靜態(tài)過程,在這種情況下,在過程中聲明的所有變量都被認(rèn)為是靜態(tài)變量,而且它們的值在兩次過程調(diào)用之間都會(huì)保持不變,如
Static Procedure MyProcedure()
   Dim iCtr As Integer
(2) 模塊級(jí)或私有作用域
具有模塊級(jí)作用域的變量可以被某個(gè)模塊內(nèi)的所有子過程和函數(shù)使用,也可以在模塊級(jí)生存期內(nèi)保存在內(nèi)存中。
在模塊的聲明部分(即任何子過程或函數(shù)外),用Dim語句或Private語句聲明變量來創(chuàng)建一個(gè)具有模塊級(jí)作用域的變量。
(3) Friend作用域
Friend關(guān)鍵字只能用于在對(duì)象模塊(如類模塊或窗體模塊)中的變量和過程的聲明。用Friend聲明的變量允許工程中的其他對(duì)象模塊訪問原模塊中的變量或方法,但是不需要用Public語句聲明這些變量或方法。
(4) 公共作用域
在過程外使用Public語句聲明的變量可以被當(dāng)前工程中的所有模塊使用。
- - - - - - - - - - - - - - - - - - - -
注釋
“注釋”就是嵌入在代碼中的描述性文本,VBA完全忽略注釋中的文本。
要在代碼中插入注釋,只需在前面加上單引號(hào),即在一行中以單引號(hào)(‘)開始。
注釋應(yīng)該表達(dá)有用的信息。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多