VBA的運算符和表達式_第1頁
VBA的運算符和表達式_第2頁
VBA的運算符和表達式_第3頁
VBA的運算符和表達式_第4頁
VBA的運算符和表達式_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

/VBA的運算符和表達式本文從廣義的角度將VBA的運算符進行了全面的歸納和總結(jié),包括通常意義上的算術運算符、連接運算符、比較運算符和邏輯運算符,還包括了賦值運算符、點運算符以與Like運算符、AddressOf運算符等。同時,概述了表達式的知識。

提示學習是需要思考和實踐的,只有舉一反三,才能真正理解和掌握。因為VBA的一些運算符涉與到較強的邏輯關系,您在閱讀本文時,可以不斷思考它們之間的邏輯關系。同時,您可以在VBE編輯器的模塊中測試本文中的一些語句和示例,以加深認識。

在使用VBA編程時,您一定會經(jīng)常使用到VBA運算符,它是VBA程序的重要組成部分。在本文中,我將運算符分為兩大類,一類是通常意義上的運算符,即:算術運算符、連接運算符、比較運算符和邏輯運算符;另一類是與語句相關的運算符,即:賦值運算符和點運算符。此外,還簡略地介紹一下Like運算符和AddressOf運算符。

您通過使用運算符,對VBA各種元素進行連接,或者完成一些運算以形成了VBA表達式或語句。再進一步說,表達式是數(shù)字、字符串、常量、變量、對象成員、以與運算符的組合。

算術運算符和表達式

■算術運算符包括+(加法運算符)、-(減法運算符)、/(除法運算符)、\(整除運算符)、Mod(取模運算符)、^(乘冪運算符),下面逐一進行介紹。

+加法運算符。形成數(shù)值表達式,并將數(shù)值或數(shù)值表達式相加。也可用于連接兩個字符串變量,但建議用連接運算符進行連接。例如,結(jié)果=表達式1+表達式2。

-減法運算符。形成數(shù)值表達式,將數(shù)值或數(shù)值表達式相減。也可用在數(shù)值之前,用于表示負數(shù)。例如,結(jié)果=表達式1-表達式2。

*乘法運算符。形成數(shù)值表達式,將數(shù)值或數(shù)值表達式相乘。例如,結(jié)果=表達式1*表達式2。

/除法運算符。形成數(shù)值表達式,將兩個數(shù)值或數(shù)值表達式相除,其中除數(shù)不能為零,否則會得到一個錯誤。例如,結(jié)果=表達式1/表達式2。

\整除運算符。將兩個數(shù)值或數(shù)值表達式相除,并返回一個整數(shù),即舍掉余數(shù)或者小數(shù)部分。例如,結(jié)果=表達式1\表達式2。例如,7\3的值為2。

Mod取模運算符。將兩個數(shù)值或數(shù)值表達式相除,并只返回余數(shù)。例如,結(jié)果=表達式1Mod表達式2。例如,7Mod3的值為1。

^乘冪運算符。計算數(shù)值或數(shù)值表達式的乘冪。例如,結(jié)果=數(shù)值^指數(shù)。

■算術運算符的優(yōu)先順序

算術運算符的優(yōu)先順序依次為:乘冪運算符(^)——乘法和除法運算符(*、/,兩者沒有優(yōu)先順序)——整除運算符(\)——取模運算符(Mod)——加法和減法運算符(+、-,兩者沒有優(yōu)先順序)。若在同一代碼中多次使用同一個算術運算符,則從左到右運算。使用括號可以改變優(yōu)先順序。

連接運算符和表達式

&連接運算符,用于連接字符串。它能把一些字符串變量連接在一起,形成一個新的字符串。在進行連接運算之前,任何非字符串變量或表達式都轉(zhuǎn)換為字符串。例如,結(jié)果=字符串1&字符串2,其結(jié)果的數(shù)據(jù)類型為String類型。

+混合連接運算符,它運用很靈活,但會與加法運算符相混,給您的閱讀帶來不便。例如,結(jié)果=表達式1+表達式2,其結(jié)果的數(shù)據(jù)類型取決于表達式的數(shù)據(jù)類型。

下面對這兩種連接運算符進行測試,測試表達式為:

結(jié)果=表達式1+表達式2

當兩個表達式都是數(shù)值數(shù)據(jù)時,用&運算符會將兩個數(shù)值數(shù)據(jù)連接,如5&1連接后為51,但用+運算符后,會將兩數(shù)值相加得到其結(jié)果,如5+1進行連接后為6。當兩個表達式都是字符串(Sting)時,將對兩個字符串進行連接為一個字符串。當兩個表達式為空時,+運算符的結(jié)果為0,而&運算符的結(jié)果為Null值。當一個表達式為數(shù)值類型數(shù)據(jù),另一個表達式為字符串類型數(shù)據(jù)時,+運算符將產(chǎn)生類型不匹配的錯誤,而&運算符則將兩個表達式連接。未聲明變量時,當一個表達式為數(shù)字,另一個表達式為字母時,+運算符和&運算符的結(jié)果均為數(shù)字,如j=7,k=student,i=j+k與i=j&k的結(jié)果均為7。當兩個表達式都為空時,+運算符結(jié)果為0,而&運算符結(jié)果為Null值。

提示您可以在VBE中調(diào)試,看看它們在各種情況下的區(qū)別。

比較運算符和表達式

■比較運算符包括<(小于)、>(大于)、=(等于)、>=(大于或等于)、<=(小于或等于)、<>(不等于),用于數(shù)據(jù)元素的比較,其一般的語法為:

結(jié)果=表達式1<比較運算符>表達式2

結(jié)果為True(1)、False(0)或者為Null。其中比較運算符可以單獨使用,也可以兩兩結(jié)合使用。如果表達式1或者表達式2本身為Null時才會產(chǎn)生Null的結(jié)果。

下面結(jié)合上述語法,對這些比較運算產(chǎn)生的結(jié)果為True或False時所需要的條件進行說明:

>表達式1大于并且不等于表達式2時,其結(jié)果為True;否則,為False。

<表達式1小于并且不等于表達式2時,其結(jié)果為True;否則,為False。

=表達式1等于表達式2時,其結(jié)果為True;否則,為False。

>=表達式1大于或者等于表達式2時,其結(jié)果為True;否則,為False。

<=表達式1小于或者等于表達式2時,其結(jié)果為True;否則,為False。

<>表達式1不等于表達式2時,其結(jié)果為True;否則,為False。

比較運算符可用于數(shù)值比較或字符串變量比較,也可用于數(shù)值與字符串的比較。如果其中一個表達式是數(shù)值,另一個是字符串,則數(shù)值表達式總是“小于”字符串表達式;如果都是字符串,則最大的字符串就是最長的字符串;如果字符串一樣長,則小寫的大于大寫的。

還有一個比較運算符,即Is運算符,可用于判斷兩個對象變量是否指向同一個對象,其語法為:

結(jié)果=對象1Is對象2

如果對象1和對象2都指向同一個對象,其結(jié)果為True;否則,結(jié)果為False。

還可以用Is運算符來判斷一個對象變量是否符合要求,例如,條件判斷語句IfobjVarIsNothingThen表明,如果對象變量objVar沒有對象引用,則為True,執(zhí)行Then后面的語句。

■比較運算符的優(yōu)先順序。如果多個比較運算符出現(xiàn)在同一行代碼中,則按從左到右的順序計算。

邏輯運算符和表達式

■邏輯運算符允許對一個或多個表達式進行運算,并返回一個邏輯值。VBA的邏輯運算符包括:And(邏輯與)、Or(邏輯或)、Not(邏輯非)、Eqv(與或)、Imp(蘊含)、Xor(異或)。

And執(zhí)行邏輯與運算,即如果表達式1和表達式2都是True,則結(jié)果返回True;只要其中一個表達式為False,其結(jié)果就是False;如果有表達式為Null,則結(jié)果為Null。其語法為:

結(jié)果=表達式1And表達式2

例如,Ifx>1Andy<10Then,表示如果x的值大于1且y的值小于10時,就執(zhí)行Then后面的代碼。又如,語句MsgBoxActiveSheet.Name=”Sheet2”AndRange(“A1”)=1表示如果當前工作表名為Sheet2并且當前工作表上的單元格A1的值為1時,消息框?qū)@示True。

Or執(zhí)行邏輯或運算,即如果表達式1或者表達式2為True,或者表達式1和表達式2都為True,則結(jié)果為True;只有兩個表達式都不是True時,其結(jié)果才為False;如果有表達式為Null,則結(jié)果也是Null。其語法為:

結(jié)果=表達式1Or表達式2

例如,Ifx>1Ory<10Then,表示如果x的值大于1,或者y的值小于10,則執(zhí)行Then后面的代碼。又如,語句MsgBoxRange(“A1”)=1OrRange(“B1”)=2表示如果當前工作表中的單元格A1中的值為1或者單元格B1中的值為2時,消息框?qū)@示True。

Not對一個表達式進行邏輯非運算,即如果表達式為True,則Not運算符使該表達式變成False;如果表達式為False,則Not運算符使該表達式變成True;如果表達式為Null,則Not運算符的結(jié)果仍然是Null。其語法為:

結(jié)果=Not表達式

例如,IfNotIsError(x)Then,如果IsError返回False則執(zhí)行Then后面的代碼,表示x中不包含錯誤。

又如,語句Selection.Font.Bold=NotSelection.Font.Bold,其中Bold屬性的值為True或False,使用Not運算符會將值False改為True,將值True改為False,這樣可用于切換所選單元格是否“加粗”。這也是VBA程序編寫時的一個技巧,我們可以運用Not運算符模仿工具欄“加粗”、“斜體”等按鈕的工作模式,如當我們點擊“加粗”按鈕時,所選單元格中的字體將加粗顯示,再次單擊“加粗”按鈕,單元格中的字體又正常顯示了。

Eqv執(zhí)行與或運算,即判斷兩個表達式是否相等,當兩個表達式都是True或者都是False時,結(jié)果返回True;若一個表達式為True而另一個表達式為False時,結(jié)果返回False。其語法為:

結(jié)果=表達式1Eqv表達式2

Imp執(zhí)行邏輯蘊含運算,其語法為:

結(jié)果=表達式1Imp表達式2

當兩個表達式都為True和兩個表達式都為False時,其結(jié)果為True;當表達式1為True,表達式2為False時,其結(jié)果為False;當表達式1為False,表達式2為True時,其結(jié)果為True;當表達式1為False,表達式2為Null時,其結(jié)果為True;當表達式1為True,表達式2為Null時,其結(jié)果為Null;當表達式1為Null,表達式2為True時,其結(jié)果為True;當表達式1為Null,表達式2為False時,其結(jié)果為Null;當兩個表達式都為Null時,其結(jié)果為Null。上面的表述可能有點繞口,概括地說,不管表達式1,當表達式2為真時,其結(jié)果為True;當兩個表達式都為False,或者表達式1為False,表達式2為Null時,其結(jié)果為True;當表達式1為True,表達式2為False時,結(jié)果為False;其它情況則為Null。

Xor執(zhí)行邏輯異或運算,用于判斷兩個表達式是否不同。若兩個表達式都是True或都是False時,其結(jié)果就是False;如果只有一個表達式是True,其結(jié)果就是True;如果兩個表達式中有一個是Null,其結(jié)果是Null。其語法為:

結(jié)果=表達式1Xor表達式2

■邏輯運算符的優(yōu)先順序

邏輯運算符的優(yōu)先順序依次為:Not——And——Or——Xor——Eqv——Imp。如果在同一行代碼中多次使用相同的邏輯運算符,則從左到右進行運算。

運算符的優(yōu)先順序

如果您不了解運算符的優(yōu)先級別(即哪個運算符優(yōu)先運算,哪個運算符最后才運算),您的表達式可能會出現(xiàn)意想不到的結(jié)果。在前面的小節(jié)中,介紹了同一類運算符的優(yōu)先順序。如果在一行代碼中包括多個運算符,則其進行運算的優(yōu)先順序是不相同的。運算符的優(yōu)先級會影響到表達式的最終結(jié)果。

當一行代碼中包括幾類運算符時,其優(yōu)先順序為:算術運算符——連接運算符——比較運算符——邏輯運算符。

如果您要改變同類或不同類運算符的優(yōu)先順序,可以使用括號,括號內(nèi)的表達式總比括號外的優(yōu)先進行運算。

Like運算符

Like運算符用于判斷給定的字符串是否與指定的模式相匹配,其語法為:

結(jié)果=字符串Like模式

其中,字符串為要與模式相比較的字符串,如果字符串與指定的模式相匹配,則結(jié)果為True;否則,其結(jié)果為False。如果字符串或者模式Null,則結(jié)果為Null。

在模式中可使用一些特殊字符,其它的字符都能與它們相匹配,這些字符有:?代表任意一個字符;*代表0或多個字符;#代表任意一個數(shù)字(0-9);[charlist]代表字符列表中的任意一個字符;[!charlist]代表不在字符列表中的任意一個字符;[]代表空字符串(“”)。

Charlist將模式中的一組字符與字符串中的一個字符進行匹配,可以包含任何一種字符,包括數(shù)字;在Charlist中使用連字號(-)產(chǎn)生一組字符來與字符串中的一個字符相匹配,如[A-D]與字符串相應位置的A、B、C或D匹配;在Charlist中可以產(chǎn)生多組字符,如[A-DH-J];各組字符必須是按照排列順序出現(xiàn)的;在Charlist的開頭或結(jié)尾使用連字號(-)或以與連字號自身相匹配,例如[-H-N]與連字號(-)或H到N之間的任何字符相匹配;在Charlist中的一個字符或者一組字符前加上!號,表明與該字符或該組字符之外的所有字符匹配,如[!H-N]與字符H-N范圍之外的所有字符匹配;而在[]外使用!號則只匹配其自身。要使用任何特殊字符作為匹配字符,只需將它放在[]中即可,例如[?]表明要與一個問號進行匹配。下面給出一個例子。

打開一個工作簿,選擇菜單“工具——宏——VisualBasic編輯器”或按Alt+F11組合鍵,打開VBE編輯器。在VBE編輯器中,選擇菜單“插入——用戶窗體”,新建一個用戶窗體,點擊控件工具箱中的“文本框”控件和“按鈕”控件,在用戶窗體上放置一個“文本框”和一個“按鈕”,并在用戶窗體中對它們的大小和位置進行合理調(diào)整,雙擊剛創(chuàng)建的“按鈕”控件,并輸入下面的代碼:

PrivateSubCommandButton1_Click()

DimsEndAsString,sPatternAsString

sEnd="inOffice"

sPattern="[FW]*"&sEnd

IfTextBox1.TextLikesPatternThen

MsgBox"輸入正確"

Else

MsgBox"輸入錯誤"

EndIf

EndSub

本代碼中[FW]*表示字符以F或W開頭的字符串,使用&連接符將其與變量sEnd所代表的字符串“i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論