




已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
VBA編程系列之VBA的運算符和表達(dá)式整理了近兩天,貼出來供分享!VBA的運算符和表達(dá)式摘要 本文從廣義的角度將VBA的運算符進(jìn)行了全面的歸納和總結(jié),包括通常意義上的算術(shù)運算符、連接運算符、比較運算符和邏輯運算符,還包括了賦值運算符、點運算符以及Like運算符、AddressOf運算符等。同時,概述了表達(dá)式的知識。提示 學(xué)習(xí)是需要思考和實踐的,只有舉一反三,才能真正理解和掌握。因為VBA的一些運算符涉及到較強(qiáng)的邏輯關(guān)系,您在閱讀本文時,可以不斷思考它們之間的邏輯關(guān)系。同時,您可以在VBE編輯器的模塊中測試本文中的一些語句和示例,以加深認(rèn)識。在使用VBA編程時,您一定會經(jīng)常使用到VBA運算符,它是VBA程序的重要組成部分。在本文中,我將運算符分為兩大類,一類是通常意義上的運算符,即:算術(shù)運算符、連接運算符、比較運算符和邏輯運算符;另一類是與語句相關(guān)的運算符,即:賦值運算符和點運算符。此外,還簡略地介紹一下Like運算符和AddressOf運算符。您通過使用運算符,對VBA各種元素進(jìn)行連接,或者完成一些運算以形成了VBA表達(dá)式或語句。再進(jìn)一步說,表達(dá)式是數(shù)字、字符串、常量、變量、對象成員、以及運算符的組合。算術(shù)運算符和表達(dá)式 算術(shù)運算符包括+(加法運算符)、- (減法運算符)、/ (除法運算符)、(整除運算符)、Mod(取模運算符)、(乘冪運算符),下面逐一進(jìn)行介紹。+ 加法運算符。形成數(shù)值表達(dá)式,并將數(shù)值或數(shù)值表達(dá)式相加。也可用于連接兩個字符串變量,但建議用連接運算符進(jìn)行連接。例如,結(jié)果=表達(dá)式1+表達(dá)式2。- 減法運算符。形成數(shù)值表達(dá)式,將數(shù)值或數(shù)值表達(dá)式相減。也可用在數(shù)值之前,用于表示負(fù)數(shù)。例如,結(jié)果=表達(dá)式1-表達(dá)式2。* 乘法運算符。形成數(shù)值表達(dá)式,將數(shù)值或數(shù)值表達(dá)式相乘。例如,結(jié)果=表達(dá)式1*表達(dá)式2。/ 除法運算符。形成數(shù)值表達(dá)式,將兩個數(shù)值或數(shù)值表達(dá)式相除,其中除數(shù)不能為零,否則會得到一個錯誤。例如,結(jié)果=表達(dá)式1/表達(dá)式2。 整除運算符。將兩個數(shù)值或數(shù)值表達(dá)式相除,并返回一個整數(shù),即舍掉余數(shù)或者小數(shù)部分。例如,結(jié)果=表達(dá)式1表達(dá)式2。例如,73的值為2。Mod 取模運算符。將兩個數(shù)值或數(shù)值表達(dá)式相除,并只返回余數(shù)。例如,結(jié)果=表達(dá)式1 Mod 表達(dá)式2。例如,7 Mod 3的值為1。 乘冪運算符。計算數(shù)值或數(shù)值表達(dá)式的乘冪。例如,結(jié)果=數(shù)值 指數(shù)。 算術(shù)運算符的優(yōu)先順序算術(shù)運算符的優(yōu)先順序依次為:乘冪運算符()乘法和除法運算符(*、/,兩者沒有優(yōu)先順序)整除運算符()取模運算符(Mod)加法和減法運算符(+、-,兩者沒有優(yōu)先順序)。若在同一代碼中多次使用同一個算術(shù)運算符,則從左到右運算。使用括號可以改變優(yōu)先順序。連接運算符和表達(dá)式& 連接運算符,用于連接字符串。它能把一些字符串變量連接在一起,形成一個新的字符串。在進(jìn)行連接運算之前,任何非字符串變量或表達(dá)式都轉(zhuǎn)換為字符串。例如,結(jié)果=字符串1&字符串2,其結(jié)果的數(shù)據(jù)類型為String類型。+ 混合連接運算符,它運用很靈活,但會與加法運算符相混,給您的閱讀帶來不便。例如,結(jié)果=表達(dá)式1+表達(dá)式2,其結(jié)果的數(shù)據(jù)類型取決于表達(dá)式的數(shù)據(jù)類型。下面對這兩種連接運算符進(jìn)行測試,測試表達(dá)式為: 結(jié)果=表達(dá)式1+表達(dá)式2當(dāng)兩個表達(dá)式都是數(shù)值數(shù)據(jù)時,用&運算符會將兩個數(shù)值數(shù)據(jù)連接,如5 & 1連接后為51,但用+運算符后,會將兩數(shù)值相加得到其結(jié)果,如5+1進(jìn)行連接后為6。當(dāng)兩個表達(dá)式都是字符串(Sting)時,將對兩個字符串進(jìn)行連接為一個字符串。當(dāng)兩個表達(dá)式為空時,+運算符的結(jié)果為0,而&運算符的結(jié)果為Null值。當(dāng)一個表達(dá)式為數(shù)值類型數(shù)據(jù),另一個表達(dá)式為字符串類型數(shù)據(jù)時,+運算符將產(chǎn)生類型不匹配的錯誤,而&運算符則將兩個表達(dá)式連接。未聲明變量時,當(dāng)一個表達(dá)式為數(shù)字,另一個表達(dá)式為字母時,+運算符和&運算符的結(jié)果均為數(shù)字,如j=7,k=student,i=j+k與i=j&k的結(jié)果均為7。當(dāng)兩個表達(dá)式都為空時,+運算符結(jié)果為0,而&運算符結(jié)果為Null值。提示 您可以在VBE中調(diào)試,看看它們在各種情況下的區(qū)別。比較運算符和表達(dá)式 比較運算符包括(大于)、=(等于)、=(大于或等于)、=(小于或等于)、(不等于),用于數(shù)據(jù)元素的比較,其一般的語法為: 結(jié)果=表達(dá)式1 表達(dá)式2結(jié)果為True(1)、False(0)或者為Null。其中比較運算符可以單獨使用,也可以兩兩結(jié)合使用。如果表達(dá)式1或者表達(dá)式2本身為Null時才會產(chǎn)生Null的結(jié)果。下面結(jié)合上述語法,對這些比較運算產(chǎn)生的結(jié)果為True或False時所需要的條件進(jìn)行說明: 表達(dá)式1大于并且不等于表達(dá)式2時,其結(jié)果為True;否則,為False。= 表達(dá)式1大于或者等于表達(dá)式2時,其結(jié)果為True;否則,為False。= 表達(dá)式1小于或者等于表達(dá)式2時,其結(jié)果為True;否則,為False。 表達(dá)式1不等于表達(dá)式2時,其結(jié)果為True;否則,為False。比較運算符可用于數(shù)值比較或字符串變量比較,也可用于數(shù)值與字符串的比較。如果其中一個表達(dá)式是數(shù)值,另一個是字符串,則數(shù)值表達(dá)式總是“小于”字符串表達(dá)式;如果都是字符串,則最大的字符串就是最長的字符串;如果字符串一樣長,則小寫的大于大寫的。還有一個比較運算符,即Is運算符,可用于判斷兩個對象變量是否指向同一個對象,其語法為: 結(jié)果=對象1 Is 對象2如果對象1和對象2都指向同一個對象,其結(jié)果為True;否則,結(jié)果為False。還可以用Is運算符來判斷一個對象變量是否符合要求,例如,條件判斷語句If objVar Is Nothing Then 表明,如果對象變量objVar沒有對象引用,則為True,執(zhí)行Then后面的語句。 比較運算符的優(yōu)先順序。如果多個比較運算符出現(xiàn)在同一行代碼中,則按從左到右的順序計算。邏輯運算符和表達(dá)式 邏輯運算符允許對一個或多個表達(dá)式進(jìn)行運算,并返回一個邏輯值。VBA的邏輯運算符包括:And(邏輯與)、Or(邏輯或)、Not(邏輯非)、Eqv(與或)、Imp(蘊含)、Xor(異或)。And 執(zhí)行邏輯與運算,即如果表達(dá)式1和表達(dá)式2都是True,則結(jié)果返回True;只要其中一個表達(dá)式為False,其結(jié)果就是False;如果有表達(dá)式為Null,則結(jié)果為Null。其語法為:結(jié)果=表達(dá)式1 And 表達(dá)式2例如,If x1 And y1 Or y10 Then,表示如果x的值大于1,或者y的值小于10,則執(zhí)行Then后面的代碼。又如,語句MsgBox Range(“A1”)=1 Or Range(“B1”)=2表示如果當(dāng)前工作表中的單元格A1中的值為1或者單元格B1中的值為2時,消息框?qū)@示True。Not 對一個表達(dá)式進(jìn)行邏輯非運算,即如果表達(dá)式為True,則Not運算符使該表達(dá)式變成False;如果表達(dá)式為False,則Not運算符使該表達(dá)式變成True;如果表達(dá)式為Null,則Not運算符的結(jié)果仍然是Null。其語法為: 結(jié)果=Not 表達(dá)式例如,If Not IsError(x) Then,如果IsError返回False則執(zhí)行Then后面的代碼,表示x中不包含錯誤。又如,語句Selection.Font.Bold=Not Selection.Font.Bold,其中Bold屬性的值為True或False,使用Not運算符會將值False改為True,將值True改為False,這樣可用于切換所選單元格是否“加粗”。這也是VBA程序編寫時的一個技巧,我們可以運用Not運算符模仿工具欄“加粗”、“斜體”等按鈕的工作模式,如當(dāng)我們點擊“加粗”按鈕時,所選單元格中的字體將加粗顯示,再次單擊“加粗”按鈕,單元格中的字體又正常顯示了。Eqv 執(zhí)行與或運算,即判斷兩個表達(dá)式是否相等,當(dāng)兩個表達(dá)式都是True或者都是False時,結(jié)果返回True;若一個表達(dá)式為True而另一個表達(dá)式為False時,結(jié)果返回False。其語法為: 結(jié)果=表達(dá)式1 Eqv 表達(dá)式2Imp 執(zhí)行邏輯蘊含運算,其語法為: 結(jié)果=表達(dá)式1 Imp 表達(dá)式2當(dāng)兩個表達(dá)式都為True和兩個表達(dá)式都為False時,其結(jié)果為True;當(dāng)表達(dá)式1為True,表達(dá)式2為False時,其結(jié)果為False;當(dāng)表達(dá)式1為False,表達(dá)式2為True時,其結(jié)果為True;當(dāng)表達(dá)式1為False,表達(dá)式2為Null時,其結(jié)果為True;當(dāng)表達(dá)式1為True,表達(dá)式2為Null時,其結(jié)果為Null;當(dāng)表達(dá)式1為Null,表達(dá)式2為True時,其結(jié)果為True;當(dāng)表達(dá)式1為Null,表達(dá)式2為False時,其結(jié)果為Null;當(dāng)兩個表達(dá)式都為Null時,其結(jié)果為Null。上面的表述可能有點繞口,概括地說,不管表達(dá)式1,當(dāng)表達(dá)式2為真時,其結(jié)果為True;當(dāng)兩個表達(dá)式都為False,或者表達(dá)式1為False,表達(dá)式2為Null時,其結(jié)果為True;當(dāng)表達(dá)式1為True,表達(dá)式2為False時,結(jié)果為False;其它情況則為Null。Xor 執(zhí)行邏輯異或運算,用于判斷兩個表達(dá)式是否不同。若兩個表達(dá)式都是True或都是False時,其結(jié)果就是False;如果只有一個表達(dá)式是True,其結(jié)果就是True;如果兩個表達(dá)式中有一個是Null,其結(jié)果是Null。其語法為:結(jié)果=表達(dá)式1 Xor 表達(dá)式2 邏輯運算符的優(yōu)先順序邏輯運算符的優(yōu)先順序依次為:NotAndOrXorEqvImp。如果在同一行代碼中多次使用相同的邏輯運算符,則從左到右進(jìn)行運算。運算符的優(yōu)先順序如果您不了解運算符的優(yōu)先級別(即哪個運算符優(yōu)先運算,哪個運算符最后才運算),您的表達(dá)式可能會出現(xiàn)意想不到的結(jié)果。在前面的小節(jié)中,介紹了同一類運算符的優(yōu)先順序。如果在一行代碼中包括多個運算符,則其進(jìn)行運算的優(yōu)先順序是不相同的。運算符的優(yōu)先級會影響到表達(dá)式的最終結(jié)果。當(dāng)一行代碼中包括幾類運算符時,其優(yōu)先順序為:算術(shù)運算符連接運算符比較運算符邏輯運算符。如果您要改變同類或不同類運算符的優(yōu)先順序,可以使用括號,括號內(nèi)的表達(dá)式總比括號外的優(yōu)先進(jìn)行運算。Like運算符Like運算符用于判斷給定的字符串是否與指定的模式相匹配,其語法為:結(jié)果=字符串 Like 模式其中,字符串為要與模式相比較的字符串,如果字符串與指定的模式相匹配,則結(jié)果為True;否則,其結(jié)果為False。如果字符串或者模式Null,則結(jié)果為Null。在模式中可使用一些特殊字符,其它的字符都能與它們相匹配,這些字符有:?代表任意一個字符;*代表0或多個字符;#代表任意一個數(shù)字(0-9);charlist代表字符列表中的任意一個字符;!charlist代表不在字符列表中的任意一個字符;代表空字符串(“”)。Charlist將模式中的一組字符與字符串中的一個字符進(jìn)行匹配,可以包含任何一種字符,包括數(shù)字;在Charlist中使用連字號(-)產(chǎn)生一組字符來與字符串中的一個字符相匹配,如A-D與字符串相應(yīng)位置的A、B、C或D匹配;在Charlist中可以產(chǎn)生多組字符,如A-D H-J;各組字符必須是按照排列順序出現(xiàn)的;在Charlist的開頭或結(jié)尾使用連字號(-)或以與連字號自身相匹配,例如-H-N與連字號(-)或H到N之間的任何字符相匹配;在Charlist中的一個字符或者一組字符前加上!號,表明與該字符或該組字符之外的所有字符匹配,如!H-N與字符H-N范圍之外的所有字符匹配;而在外使用!號則只匹配其自身。要使用任何特殊字符作為匹配字符,只需將它放在中即可,例如?表明要與一個問號進(jìn)行匹配。下面給出一個例子。打開一個工作簿,選擇菜單“工具宏Visual Basic編輯器”或按Alt+F11組合鍵,打開VBE編輯器。在VBE編輯器中,選擇菜單“插入用戶窗體”,新建一個用戶窗體,點擊控件工具箱中的“文本框”控件和“按鈕”控件,在用戶窗體上放置一個“文本框”和一個“按鈕”,并在用戶窗體中對它們的大小和位置進(jìn)行合理調(diào)整,雙擊剛創(chuàng)建的“按鈕”控件,并輸入下面的代碼:Private Sub CommandButton1_Click() Dim sEnd As String, sPattern As String sEnd = in Office sPattern = F W* & sEnd If TextBox1.Text Like sPattern Then MsgBox 輸入正確 Else MsgBox 輸入錯誤 End IfEnd Sub本代碼中F W*表示字符以F或W開頭的字符串,使用&連接符將其與變量sEnd所代表的字符串“in Office”相連接。如果您在文本框中輸入以字符F或字符W開頭并以“in Office”結(jié)尾的句子,將顯示“輸入正確”消息框,否則將顯示“輸入錯誤”的消息框。在VBE編輯器中點擊運行按鈕或按F5鍵,運行該代碼試試。當(dāng)您在文本框中輸入“Fanjy in Office”后,單擊按鈕,將顯示“輸入正確”消息框。AddressOf運算符AddressOf運算符將過程的地址傳遞給API函數(shù)。其語法為 AddressOf 過程名其中,過程名為需要傳遞給API函數(shù)地址的過程名稱。AddressOf運算符后面必須是用戶定義的函數(shù)名、過程名或?qū)傩悦以撨^程或函數(shù)必須保存在代碼模塊中。賦值運算符在VBA中使用等號(=)作為賦值運算符,它將其右側(cè)的數(shù)據(jù)或者表達(dá)式的結(jié)果賦給左側(cè)的變量,使其在程序代碼中運用。例如,x=666,Range(“A1”).Value=”Dog”。點運算符在VBA中,使用點運算符來引用某個對象。運用點運算符,可以限定所引用的對象的位置,清楚地表明該對象的層次結(jié)構(gòu),還可以指定某對象的方法或?qū)傩浴@?,語句Workbooks(“Book1.xls”).Worksheets(“Sheet1”).Range(“A1”)表明對工作簿Book1中的工作表Sheet1上的單元格A1的引用;又如,語句Msgbox Worksheets(“Sheet1”).Range(“A1”).Value表明顯示當(dāng)前工作簿中工作表Sheet1上單元格A1的值。By fanjy in 2006-7-11運算子優(yōu)先順序 當(dāng)一個運算式中有數(shù)個動作發(fā)生時,各部分的動作會在預(yù)先決定的順序下完成,而此順序就是運算子的優(yōu)先順序。當(dāng)運算式中有超過一種運算子時,會先執(zhí)行算術(shù)運算子,其次是比較運算子,而後才是邏輯運算子。比較運算子的優(yōu)先順序全都是相同的,也就是說依照出現(xiàn)的順序由左到右依序執(zhí)行。而算術(shù)和邏輯運算子則必須依照下列的優(yōu)先順序,依序執(zhí)行:算術(shù)比較邏輯指數(shù)運算()相等(=)Not負(fù)數(shù)(-)不等()And乘法和除法(*、 /)小於()Xor餘數(shù)運算(Mod)小於或相等(=)Imp字串連結(jié)(&)LikeIs若乘法和除法同時存在於運算式中,則計算時的順序就是依照其左右位置來決定。同樣地,若加法和減法同時存在於一個運算式中,計算時的順序就是依照其左右位置來決定。括號則可推翻優(yōu)先順序的等級,並且強(qiáng)迫運算式的某些部分必須優(yōu)先執(zhí)行。括號內(nèi)要比括號外部的先執(zhí)行。然而,括號中運算子的優(yōu)先順序與正常情況是一樣的。字串連結(jié)運算子(&)不是算術(shù)運算子,但是在優(yōu)先順序上它會落在所有算術(shù)運算子之後,且在所有比較運算子之前。Like 的優(yōu)先順序和所有比較運算子相同,但它實際上是屬於模式比對運算子。Is 運算子是一個物件引用比較運算子。它並非比較物件或是它們的值;而是檢查兩個物件是否引用到相同的物件。AddressOf 運算子 一個單項運算符,它將其後面的程序位址傳遞給 API 程序,該 API 程序在引數(shù)資料表對應(yīng)位置中需要一個函數(shù)指標(biāo)。語法AddressOf procedurename必需的 procedurename 指定要傳遞的位址是哪一個程序位址。這個程序必須是發(fā)出呼叫指令的專案中之一個一般模組模組裡的一個程序。請注意當(dāng)一個程序的名稱出現(xiàn)在一個引數(shù)清單中時,通常已經(jīng)進(jìn)行該程序的評估,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院康復(fù)患者管理制度
- 公路橋梁安全檢測方法試題及答案
- 公海客戶資源管理制度
- 安全現(xiàn)場分級管理制度
- 工地廚房獎罰管理制度
- 公司清潔外包管理制度
- 行政組織協(xié)作機(jī)制考題及答案
- 數(shù)據(jù)的生命周期管理流程試題及答案
- 安全操作規(guī)定管理制度
- 學(xué)校防疫學(xué)生管理制度
- 2025年計算機(jī)二級MySQL經(jīng)典試題及答案
- 消防單位招聘心理測試題及答案
- 《研究生就業(yè)指導(dǎo)課件(說課)》
- 2025年武漢鐵路局集團(tuán)招聘(180人)筆試參考題庫附帶答案詳解
- 2025-2030全球及中國免疫磁珠行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 2025統(tǒng)編版(2024)小學(xué)道德與法治一年級下冊《第13課-快樂兒童節(jié)》教學(xué)設(shè)計
- 2025冶金工業(yè)信息標(biāo)準(zhǔn)研究院招聘筆試參考題庫附帶答案詳解
- 三方協(xié)議空白合同
- 擋煙垂壁施工合同
- 社工招聘筆試題目及答案
- JGJ46-2024施工現(xiàn)場臨時用電安全技術(shù)標(biāo)準(zhǔn)宣講課件
評論
0/150
提交評論