第九章模塊與VBA編程基礎(chǔ)_第1頁(yè)
第九章模塊與VBA編程基礎(chǔ)_第2頁(yè)
第九章模塊與VBA編程基礎(chǔ)_第3頁(yè)
第九章模塊與VBA編程基礎(chǔ)_第4頁(yè)
第九章模塊與VBA編程基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩61頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第九章模塊與VBA編程基礎(chǔ)概述本章要涉及到編程。了解編程基礎(chǔ)知識(shí),掌握程序的三種結(jié)構(gòu)在VBA中的實(shí)現(xiàn),能夠讀懂程序并寫(xiě)(填)出程序片段v 模塊基本概念v 創(chuàng)建模塊v VBA設(shè)計(jì)基礎(chǔ)v VBA流程控制v 過(guò)程調(diào)用和參數(shù)傳遞1. 程序錯(cuò)誤處理和調(diào)試9.1模塊基本概念模塊就是一些程序的集合,完成特定的功能。模塊分類(lèi):v 類(lèi)模塊(與Access內(nèi)置對(duì)象關(guān)聯(lián),如窗體、報(bào)表)1. 標(biāo)準(zhǔn)模塊9.2 創(chuàng)建模塊 模塊以過(guò)程為單元組成,一個(gè)模塊包含一個(gè)聲明區(qū)域和若干個(gè)過(guò)程Sub、函數(shù)Function。 過(guò)程創(chuàng)建一般格式public|privatestatic 過(guò)程名(形參表)語(yǔ)句Exit subEnd sub 調(diào)

2、用過(guò)程Call 過(guò)程名(參數(shù)表) Function函數(shù)public|privatestatic 函數(shù)名(形參表)語(yǔ)句End Function 例題9.1編寫(xiě)一個(gè)求圓面積的函數(shù)Area()對(duì)于該例題中出現(xiàn)的語(yǔ)句只要大體了解即可。9.1 【添加過(guò)程】對(duì)話(huà)框【例9.1】編寫(xiě)一個(gè)計(jì)算圓面積的函數(shù)過(guò)程Area()。Public Function Area(r as Single) as SingleIf r=0 ThenMsgBox 圓的半徑必須大于零,vbCritical,警告Area=0 半徑為零,設(shè)置函數(shù)返回值為0Exit Function 結(jié)束函數(shù)過(guò)程運(yùn)行End IfArea=3.14*r*rE

3、nd Function函數(shù)過(guò)程的調(diào)用形式:函數(shù)過(guò)程名()函數(shù)過(guò)程不能使用CALL來(lái)調(diào)用執(zhí)行,需要直接引用函數(shù)名并加括號(hào)來(lái)辨別,可以在查詢(xún)、宏等中調(diào)用使用,函數(shù)過(guò)程的返回值可以直接賦給某個(gè)變量。例如,假如在某個(gè)窗體中要計(jì)算半徑為8的圓面積,并用變量S保存圓面積值,可調(diào)用上面創(chuàng)建的Area()函數(shù)過(guò)程,調(diào)用命令格式為:s=Area(8)。 9.3 VBA編程基礎(chǔ) VBA是一種計(jì)算機(jī)語(yǔ)言。 對(duì)象在Access中指表、查詢(xún)、窗體、報(bào)表、頁(yè)、宏、模塊、DoCmd等 認(rèn)識(shí)VBE窗口 例題9.2新建窗體,放置一個(gè)按鈕,該按鈕的單擊事件響應(yīng)某過(guò)程。對(duì)象組合框事件組合框?qū)?性 窗口工 程 窗口代 碼 窗口立 即

4、 窗口標(biāo)準(zhǔn)工具欄代碼編輯區(qū) VBA語(yǔ)句書(shū)寫(xiě)原則一行一句,如果特別長(zhǎng)可以用_(下劃線(xiàn))隔開(kāi)如果節(jié)省空間,可以用: (冒號(hào))將多條語(yǔ)句寫(xiě)在同行VBE可以自動(dòng)識(shí)別語(yǔ)法錯(cuò)誤,有顏色提示。 注釋?zhuān)o程序員看,對(duì)機(jī)器無(wú)用(單引號(hào)后面就是注釋內(nèi)容)rem后面是注釋內(nèi)容數(shù)據(jù)類(lèi)型Access中提供了若干數(shù)據(jù)類(lèi)型,如下:v 整數(shù)Integerv 長(zhǎng)整數(shù)Longv 單精度數(shù)Singlev 雙精度數(shù)Doublev 貨幣Currencyv 字符串Stringv 布爾型Booleanv 日期型Datev 變體類(lèi)型Variant1. 用戶(hù)自定義類(lèi)型數(shù)據(jù)庫(kù)對(duì)象 Datebase Connection Form Report

5、Control QueryDef TableDef Command RecorderSet常量、變量、數(shù)組常量:不能改變的量。v 直接常量v 符號(hào)常量Const定義的常量v 內(nèi)部常量,Access定義的常量1. 系統(tǒng)常量,True、False、Null、Yes、No、On、Off變量 變量,可以改變的量。 變量命名包含字母、數(shù)字、下劃線(xiàn)、漢字,且不以數(shù)字、下劃線(xiàn)開(kāi)頭,不區(qū)分大小寫(xiě),不能與系統(tǒng)關(guān)鍵字沖突。 聲明變量:在VBA中可以隱式聲明顯式聲明,Dim 變量作用域局部變量、模塊變量、全局變量 數(shù)據(jù)庫(kù)對(duì)象變量的引用方法窗體名稱(chēng)!控件名稱(chēng).屬性名稱(chēng)注意嘆號(hào)和點(diǎn)號(hào)的使用 Function SafeS

6、qr(num) Val_Temp=Abs(num) SafeSqr=Sqr(Val_Tem) End Function 例如: intX1%=1243 定義intX1為一個(gè)整型變量 DouX2#=45665.456 定義douX2為一個(gè)雙精度變量 StrX3$=Access 定義strX3為一個(gè)字符串變量 聲明變量的一般方法是用Dim.AsDataType結(jié)構(gòu),其中As指定變量數(shù)據(jù)類(lèi)型。 Dim語(yǔ)句使用格式為:Dim 變量名As 數(shù)據(jù)類(lèi)型 如果不使用“數(shù)據(jù)類(lèi)型”可選項(xiàng),默認(rèn)定義的變量為Variant數(shù)據(jù)類(lèi)型??梢允褂肈im語(yǔ)句在一行中聲明多個(gè)變量。 例如: Dim strX As String

7、 定義了1個(gè)字符型變量strX Dim intX As Integer,strZ As String 定義了1個(gè)整型變量intX和1個(gè)字符型變量strZ Dim x 定義了1個(gè)變體(Variant)類(lèi)型變量x Dim I,j,k As integer 只有k是integer型,I與j都是Variant型表9.4 3種變量的使用規(guī)則與作用域作用范圍局部變量模塊變量全局變量聲明方式Dim、StaticDim、PrivatePublic聲明位置在子過(guò)程中在窗體/模塊的聲明區(qū)域在標(biāo)準(zhǔn)模塊的聲明區(qū)域能否被本模塊的其他過(guò)程存取不能能能能否被其他模塊的過(guò)程存取不能不能能Access建立的數(shù)據(jù)庫(kù)對(duì)象及其屬性,

8、均可被看成是VBA程序代碼中的變量及其指定的值來(lái)加以引用,與普通變量不同的是要使用規(guī)定的引用格式。例如,窗體和報(bào)表對(duì)象的引用格式為:Forms(或Reports)窗體(或報(bào)表)名稱(chēng)!控件名稱(chēng).屬性名稱(chēng)關(guān)鍵字Forms或Reports分別指示窗體或報(bào)表對(duì)象類(lèi);感嘆號(hào)(!)為分隔符,用于分隔開(kāi)父子對(duì)象;“屬性名稱(chēng)”為可選項(xiàng),若省略,則默認(rèn)為控件的基本屬性Value。注意:如果對(duì)象名稱(chēng)中含有空格或標(biāo)點(diǎn)符號(hào),引用時(shí)要用方括號(hào)把對(duì)象名稱(chēng)括起來(lái)。例如,要在代碼中引用窗體(Myform1)中名為T(mén)xtxh的文本框控件,可使用以下語(yǔ)句:Forms!Myform1!Txtxh=3020503323“若在本窗體的

9、模塊中引用,可以使用Me代替Forms!Myform1。語(yǔ)句變?yōu)椋篗e!Txtxh=3020503323“Forms!Myform1!Txtxh”在程序語(yǔ)句中的作用相當(dāng)于變量,但它指示的是某個(gè)Access對(duì)象。當(dāng)需要多次引用對(duì)象時(shí),可以先聲明一個(gè)Control(控件)數(shù)據(jù)類(lèi)型的對(duì)象變量,然后使用Set關(guān)鍵字建立對(duì)象變量指向的控件對(duì)象。語(yǔ)句使用格式如下:Dim Txtxhbl As Control 定義對(duì)象變量,數(shù)據(jù)類(lèi)型為Control(控件)數(shù)據(jù)類(lèi)型Set Txtxhbl=Forms!Myform1!Txtxh 為對(duì)象變量指定窗體控件對(duì)象以后要引用控件對(duì)象,可轉(zhuǎn)為引用對(duì)象變量。例如:Txtxh

10、bl=3020503323等同于:Forms!Myform1!Txtxh=3020503323借助將變量定義為對(duì)象變量類(lèi)型并使用Set語(yǔ)句為對(duì)象變量指定對(duì)象的方法,可以定義表9.3中所列任何對(duì)象數(shù)據(jù)類(lèi)型的對(duì)象變量,并將數(shù)據(jù)庫(kù)對(duì)象指定為對(duì)象變量名。數(shù)組 數(shù)組是相同類(lèi)型變量的集合 定義數(shù)組Dim 數(shù)組名(下界 to 上界) AS 類(lèi)型默認(rèn)下界為0零 數(shù)組引用通過(guò)數(shù)組明(下標(biāo))方法引用 二維數(shù)組Dim 數(shù)組名(a to b,m to n) AS 類(lèi)型列舉一些關(guān)于數(shù)組定義、引用的例子單獨(dú)考數(shù)組很少,一般與循環(huán)部分結(jié)合! 數(shù)組變量由變量名和數(shù)組下標(biāo)組成,在VBA中不允許隱式說(shuō)明數(shù)組,可用Dim語(yǔ)句來(lái)聲明

11、數(shù)組。數(shù)組聲明方式為: Dim 數(shù)組名(下標(biāo)下界to 下標(biāo)上界) As 數(shù)據(jù)類(lèi)型 下標(biāo)下界的缺省值為0,數(shù)組元素為:數(shù)組名(0)至數(shù)組名(下標(biāo)上界);如果設(shè)置下標(biāo)下界非0,要使用to選項(xiàng)。 在使用數(shù)組時(shí),可以在模塊的通用聲明部分使用Option Base來(lái)指定數(shù)組的默認(rèn)下標(biāo)下界是0或l: Option Base 1 設(shè)置數(shù)組的默認(rèn)下標(biāo)下界為l Option Base 0 語(yǔ)句的默認(rèn)形式 數(shù)組有兩種類(lèi)型:固定大小的數(shù)組和動(dòng)態(tài)數(shù)組。前者總保持同樣的大小,而后者在程序中可根據(jù)需要?jiǎng)討B(tài)地改變數(shù)組的大小。 (1)固定大小的數(shù)組例如:Dim IntArray(l0) As Integer這條語(yǔ)句聲明了一個(gè)

12、有11個(gè)整型數(shù)組元素的數(shù)組,數(shù)組元素從IntArray(0)至IntArray(l0),每個(gè)數(shù)組元素為一個(gè)整型變量,這里指定數(shù)組元素下標(biāo)上界來(lái)定義數(shù)組。VBA中允許指定數(shù)組下標(biāo)范圍時(shí)使用To,如下例所示:Dim IntArray(-2 to 3) As Integer該語(yǔ)句定義一個(gè)有6個(gè)整型數(shù)組元素的數(shù)組,數(shù)組元素下標(biāo)從-2到3。如果要定義多維數(shù)組,聲明方式為:Dim 數(shù)組名(數(shù)組第1維下標(biāo)上界,數(shù)組第2維下標(biāo)上界) As 數(shù)據(jù)類(lèi)型例如:Dim IntArray(3,5) As Integer語(yǔ)句定義了一個(gè)二維數(shù)組,第一維有4個(gè)元素,第二維有6個(gè)元素。類(lèi)似的聲明也可以用在二維以上的數(shù)組中。例如

13、:Dim MultArray(3,1 to 5,0 to 5) As Long語(yǔ)句定義了一個(gè)三維數(shù)組,第一維有4個(gè)元素,第二維有5個(gè)元素,第三維有6個(gè)元素,其中數(shù)組元素的總數(shù)為三個(gè)維數(shù)的乘積:456=120。(2)動(dòng)態(tài)數(shù)組在VBA中,還允許用戶(hù)定義動(dòng)態(tài)數(shù)組。很多情況下,不能明確知道數(shù)組中應(yīng)該有多少元素,可使用動(dòng)態(tài)數(shù)組。動(dòng)態(tài)數(shù)組中元素的個(gè)數(shù)是不定的,在程序運(yùn)行中可以改變其大小。動(dòng)態(tài)數(shù)組的定義方法是:先使用Dim來(lái)聲明數(shù)組,但不指定數(shù)組元素的個(gè)數(shù),而在以后使用時(shí)再用ReDim來(lái)指定數(shù)組元素個(gè)數(shù),稱(chēng)為數(shù)組重定義。在對(duì)數(shù)組重定義時(shí),可以使用ReDim后加保留字Preserve來(lái)保留以前的值,否則使用R

14、eDim后,數(shù)組元素的值會(huì)被重新初始化為默認(rèn)值?!纠?.4】定義動(dòng)態(tài)數(shù)組IntArray,設(shè)默認(rèn)下界為1,并用循環(huán)賦值。Dim IntArray() As Integer 聲明動(dòng)態(tài)數(shù)組ReDim IntArray(5) 數(shù)組重定義,分配5個(gè)元素For I = 1 To 5 使用循環(huán)給數(shù)組元素賦值IntArray(I) = INext IRem數(shù)組重定義,調(diào)整數(shù)組的大小,并抹去其中元素的值。ReDim IntArray(10) 重新設(shè)置為10個(gè)元素,IntArray(1)至IntArray(5)的值不保留For I = 11 To 20 使用循環(huán)給數(shù)組元素重新賦值IntArray(I) = IN

15、ext IRem數(shù)組重定義,調(diào)整數(shù)組的大小,使用保留字Preserve來(lái)保留以前的值。ReDim Preserve IntArray(15) 重新設(shè)置為15個(gè)元素,IntArray(1)至IntArray(10)的值保留For I = 11 To 15 使用循環(huán)給未賦值數(shù)組元素賦值IntArray(I) = INext IRedim語(yǔ)句只能出現(xiàn)在過(guò)程中,可以改變數(shù)組的大小和上下界,但不能改變數(shù)組的維數(shù)。執(zhí)行不帶Preserve關(guān)鍵字的Redim語(yǔ)句時(shí),數(shù)組中存儲(chǔ)的數(shù)據(jù)會(huì)全部丟失。VBA將重新設(shè)置其中元素的值。對(duì)于Variant變量類(lèi)型的數(shù)組,設(shè)為Empty;對(duì)于Numeric類(lèi)型的數(shù)組,設(shè)為0

16、;對(duì)于String類(lèi)型的數(shù)組則設(shè)為空字符串;對(duì)象數(shù)組則設(shè)為Nothing。使用Preserve關(guān)鍵字,可以改變數(shù)組中最后一維的邊界,但不能改變這一維中的數(shù)據(jù)。例如:Redim IntArray(10,10,10)Redim Preserve IntArray(10,10,15)也就是說(shuō),在使用Preserve關(guān)鍵字時(shí),只能通過(guò)改變數(shù)組的上界來(lái)重新設(shè)置數(shù)組的大小,改變數(shù)組的下界將會(huì)導(dǎo)致一個(gè)錯(cuò)誤。如果改變后的數(shù)組比原來(lái)小,那么多出來(lái)的數(shù)據(jù)將會(huì)丟失。(3)數(shù)組的使用數(shù)組聲明后,數(shù)組中的每個(gè)元素都可以當(dāng)作單個(gè)的變量來(lái)使用,其使用方法同相同類(lèi)型的普通變量。數(shù)組元素的引用格式為:數(shù)組名(下標(biāo)值)。其中:如

17、果該數(shù)組為一維數(shù)組,則下標(biāo)值為一個(gè)范圍為數(shù)組下標(biāo)下界,數(shù)組下標(biāo)上界的整數(shù);如果該數(shù)組為多維數(shù)組,則下標(biāo)值為多個(gè)(不大于數(shù)組維數(shù))用逗號(hào)分開(kāi)的整數(shù)序列,每個(gè)整數(shù)(范圍為數(shù)組該維下標(biāo)下界,數(shù)組該維下標(biāo)上界)表示對(duì)應(yīng)的下標(biāo)值。 例如,可以如下引用前面定義的數(shù)組,設(shè)默認(rèn)下界為1。IntArray(2) 引用一維數(shù)組IntArray的第2個(gè)元素。IntArray(2,2) 引用二維數(shù)組IntArray的第2行第2個(gè)元素。【例9.5】若要存儲(chǔ)一年中每天的支出,可以聲明一個(gè)具有365個(gè)元素的數(shù)組變量,而不是365個(gè)變量,數(shù)組中的每一個(gè)元素都包含一個(gè)值。下列的語(yǔ)句聲明數(shù)組CurArray具有365個(gè)元素,設(shè)默

18、認(rèn)下界為1。Dim CurArray (1 to 365) As Currency 聲明一個(gè)具有365個(gè)元素的一維數(shù)組Dim intI As IntegerFor intI=1 to 365 CurArray(intI) = 10 每個(gè)數(shù)組元素都賦予一個(gè)初始值10Next運(yùn)算符、表達(dá)式運(yùn)算符v 算術(shù)運(yùn)算符+ - * / mod v 字符串運(yùn)算符+ &,推薦使用&v 關(guān)系運(yùn)算符= = like is between.andv 邏輯運(yùn)算符and or not1. 對(duì)象運(yùn)算符! . 【例9.6】算術(shù)運(yùn)算符應(yīng)用示例。 28 計(jì)算2的8次方 2(1/2)或20.5 計(jì)算2的平方根 7/2 標(biāo)準(zhǔn)除法,結(jié)果

19、為3.5 72 整數(shù)除法,結(jié)果為3 10 Mod 4 取模運(yùn)算,結(jié)果為2 10 Mod 2 結(jié)果為0 10 Mod -4 結(jié)果為2 -10 Mod -4 結(jié)果為-2 -8.8 Mod 5 結(jié)果為-4 20 True 結(jié)果為21,邏輯量True轉(zhuǎn)化為數(shù)值-1 20 + False +6 結(jié)果為26,邏輯量False轉(zhuǎn)化為數(shù)值0 【例9.7】“&”運(yùn)算符應(yīng)用示例。 Strx =ABC Strx&是大寫(xiě)英文字母 出錯(cuò) Strx & 是大寫(xiě)英文字母 結(jié)果為“ABC是大寫(xiě)英文字母” Access & 數(shù)據(jù)庫(kù)教程 結(jié)果為“Access數(shù)據(jù)庫(kù)教程” abcd & 1234 結(jié)果為“abcd1234” abc

20、d & 1234 結(jié)果為“abcd1234” 4321 & 1234 結(jié)果為“43211234” 4321 & 1234 結(jié)果為“43211234” 2+3 & = & (2+3) 結(jié)果為“2+3=5” 【例9.8】“+”運(yùn)算符應(yīng)用示例。 4321+1234 結(jié)果為5555 4321+1234 結(jié)果為“43211234” abcd+1234 出錯(cuò) 4321+1234 & 100 結(jié)果為“5555100” 【例9.9】Is關(guān)系運(yùn)算符應(yīng)用示例。 Dim s1,s2 As Control Set s1=Me!text1 Set s2=Me!text1 strx=s1 Is s2 strx值為“Tru

21、e” 【例9.10】關(guān)系運(yùn)算符應(yīng)用示例。 Dim S 定義變量S S=(52) 結(jié)果為T(mén)rue S=(2=5) 結(jié)果為False S=(abcdabc) 結(jié)果為T(mén)rue S=(王力劉力) 結(jié)果為T(mén)rue S=(#2005/10/10#2004/10/12#) 結(jié)果為T(mén)rue 【例9.11】邏輯運(yùn)算符應(yīng)用示例。 Dim S 定義變量S S=(52 And 3=4) 結(jié)果為False S=(52 Or 3=4) 結(jié)果為T(mén)rue S=(abcdabc And 3=4) 結(jié)果為False S=Not(3=4) 結(jié)果為T(mén)rue S=(52 Xor 3=4) 結(jié)果為T(mén)rue S=(52 Xor 4=3)

22、結(jié)果為False S=(25 Eqv 3=4) 結(jié)果為T(mén)rue S=(52 Eqv 3=4) 結(jié)果為False S=(52 Imp 3=4) 結(jié)果為False S=(52 Imp 4=3) 結(jié)果為T(mén)rue表達(dá)式 表達(dá)式就是由常量、變量、運(yùn)算符構(gòu)成的字符串,表達(dá)式具有特定的唯一值。 表達(dá)式運(yùn)算優(yōu)先級(jí)參看表9.9 P222(1)表達(dá)式的組成表達(dá)式由字面值、常量、變量、運(yùn)算符、函數(shù)、標(biāo)識(shí)符、邏輯量和括號(hào)等按一定的規(guī)則組成,表達(dá)式通過(guò)運(yùn)算得出結(jié)果,運(yùn)算結(jié)果的類(lèi)型由操作數(shù)的數(shù)據(jù)和運(yùn)算符共同決定。注意:在VBA中,邏輯量在表達(dá)式中進(jìn)行算術(shù)運(yùn)算時(shí),True值被當(dāng)成-1、False值被當(dāng)成0處理。(2)表達(dá)式

23、的書(shū)寫(xiě)規(guī)則只能使用圓括號(hào)且必須成對(duì)出現(xiàn),可以使用多個(gè)圓括號(hào),但必須配對(duì)。乘號(hào)不能省略。X乘以Y應(yīng)寫(xiě)成X*Y,不能寫(xiě)成XY。表達(dá)式從左至右書(shū)寫(xiě),無(wú)大小寫(xiě)區(qū)分。(3)算術(shù)運(yùn)算表達(dá)式的結(jié)果類(lèi)型在算術(shù)運(yùn)算表達(dá)式中,參與運(yùn)算的操作數(shù)可能具有不同的數(shù)據(jù)精度,VBA規(guī)定運(yùn)算結(jié)果的數(shù)據(jù)類(lèi)型采用精度高的數(shù)據(jù)類(lèi)型。(4)運(yùn)算優(yōu)先級(jí)如果一個(gè)表達(dá)式中含有多種不同類(lèi)型的運(yùn)算符,運(yùn)算進(jìn)行的先后順序由運(yùn)算符的優(yōu)先級(jí)決定。VBA常用運(yùn)算符的優(yōu)先級(jí)劃分如9.9所示。表9.9 運(yùn)算符的優(yōu)先級(jí)高優(yōu)先級(jí) 高 低低算術(shù)運(yùn)算符字符串運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符指數(shù)運(yùn)算()&+=Not負(fù)數(shù)(-)And乘法和除法(*、/)Or整數(shù)除法()取模

24、運(yùn)算(Mod)加法和減法(+、-)關(guān)于運(yùn)算符的優(yōu)先級(jí)作如下說(shuō)明:不同類(lèi)型運(yùn)算符的優(yōu)先級(jí)為:算術(shù)運(yùn)算符字符串運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符圓括號(hào)優(yōu)先級(jí)最高。所有關(guān)系運(yùn)算符的優(yōu)先級(jí)相同。也就是說(shuō),按從左到右順序處理。算術(shù)運(yùn)算符和邏輯運(yùn)算符必須按照表9.9所列優(yōu)先順序處理。函數(shù)v 數(shù)學(xué)函數(shù)絕對(duì)值函數(shù) abs(數(shù)值表達(dá)式)向下取整 Int(數(shù)值表達(dá)式)取整Fix(數(shù)值表達(dá)式)四舍五入Round(數(shù)值表達(dá)式)自然指數(shù)Exp(數(shù)值表達(dá)式)自然對(duì)數(shù)Log(數(shù)值表達(dá)式)開(kāi)平方Sqr(數(shù)值表達(dá)式)正弦函數(shù)Sin(數(shù)值表達(dá)式)余弦函數(shù)Cos(數(shù)值表達(dá)式)正切函數(shù)Tan(數(shù)值表達(dá)式)隨機(jī)函數(shù)Rnd(數(shù)值表達(dá)式)函數(shù) 字

25、符串函數(shù)字符串檢索InStr(起始位置,串1,串2,Compare)在串1中尋找串2的起始位置。-串長(zhǎng)函數(shù)len(字符串),返回串長(zhǎng),漢字算一個(gè)-字符串截取left(str,n)Right(str,n)mid(str,start,n)字符串函數(shù) 生成空格space(n),產(chǎn)生n個(gè)空格 大小寫(xiě)轉(zhuǎn)換Ucase(str)轉(zhuǎn)換成大寫(xiě)Lcase(str)轉(zhuǎn)換成小寫(xiě) 刪除空格Ltrim(str)消除前面空格Rtrim(str)消除后面空格Trim(str)消除前后空格注意:沒(méi)有直接消除中間空格函數(shù)日期、時(shí)間函數(shù) Date() Time() Now() Year(日期)month(日期)Day(日期) Ho

26、ur()minute()second() DateAdd(間隔類(lèi)型,間隔值,基準(zhǔn)日期時(shí)間)DateDiff(間隔類(lèi)型,日期1,日期2)類(lèi)型轉(zhuǎn)換 字符轉(zhuǎn)成ASCII碼ASC(字符串),只轉(zhuǎn)換第一個(gè) ASCII轉(zhuǎn)成字符 Chr(代碼) 數(shù)字轉(zhuǎn)字符 Str(數(shù)值表達(dá)式) 字符轉(zhuǎn)數(shù)字Val(字符串)流程控制語(yǔ)句 聲明語(yǔ)句:命名或定義變量、常量、函數(shù)等 賦值語(yǔ)句:將表達(dá)式值賦給變量變量名=表達(dá)式 Goto語(yǔ)句 不推薦使用9.4.1 聲明語(yǔ)句聲明語(yǔ)句通過(guò)聲明語(yǔ)句可以命名和定義過(guò)程、變量、數(shù)組或常量。當(dāng)聲明一個(gè)過(guò)程、變量或數(shù)組時(shí),也同時(shí)定義了它們的作用范圍,此范圍取決于聲明位置(子過(guò)程、模塊或全局)和使用什

27、么關(guān)鍵字(Dim、Public、Static或Global等)來(lái)聲明它。例如,有如下程序段:Sub Myproc( )Dim SinS as Single,SinR as SingleConst P=3.14159End Sub上述語(yǔ)句聲明定義了一個(gè)名為Myproc的子過(guò)程,Dim語(yǔ)句定義了2個(gè)名稱(chēng)分別為SinS和SinR的單精度數(shù)據(jù)變量,Const語(yǔ)句定義了1個(gè)名為P的符號(hào)常量。當(dāng)這個(gè)子過(guò)程被調(diào)用或運(yùn)行時(shí),所有包含在Sub和End Sub之間的語(yǔ)句都會(huì)被執(zhí)行。 9.4.2 賦值語(yǔ)句賦值語(yǔ)句賦值語(yǔ)句用于指定一個(gè)值或表達(dá)式給變量或常量。使用格式為:Let 變量名= 值或表達(dá)式其中:Let為可選項(xiàng)

28、,在使用賦值語(yǔ)句時(shí),一般省略。例如:Dim SinS as Single,SinR as SingleSinS=1234.567Let SinR=12.3關(guān)于使用賦值語(yǔ)句的說(shuō)明:(1)當(dāng)數(shù)值表達(dá)式與變量精度不同時(shí),系統(tǒng)強(qiáng)制轉(zhuǎn)換成變量的精度。例如:Dim IntN as IntegerIntN=10.6 IntN為整型變量,10.6經(jīng)四舍五入轉(zhuǎn)換后賦值,IntN值為11(2)當(dāng)表達(dá)式是數(shù)字字符串,變量為數(shù)值型,系統(tǒng)自動(dòng)轉(zhuǎn)換成數(shù)值類(lèi)型再賦值,若表達(dá)式含有非數(shù)字字符或空串時(shí),賦值出錯(cuò)。例如:IntN%=123 IntN值為123IntN%=1a2 3 出錯(cuò),類(lèi)型不匹配(3)不能在一個(gè)賦值語(yǔ)句中,同時(shí)

29、給多個(gè)變量賦值。例如:以下語(yǔ)句語(yǔ)法沒(méi)有錯(cuò)誤,但結(jié)果不正確。x%=y%=z%=10(4)實(shí)現(xiàn)累加作用的賦值語(yǔ)句。例如:n=n+1 取變量n中的值加1后再賦給n,與循環(huán)語(yǔ)句結(jié)合,可實(shí)現(xiàn)計(jì)數(shù)說(shuō)明:還有一個(gè)賦值語(yǔ)句是Set語(yǔ)句,它用來(lái)指定一個(gè)對(duì)象給已聲明為對(duì)象類(lèi)型的變量,Set關(guān)鍵字不能省略。 9.4.3 標(biāo)號(hào)和標(biāo)號(hào)和GoTo語(yǔ)句語(yǔ)句GoTo語(yǔ)句用于在程序執(zhí)行過(guò)程中實(shí)現(xiàn)無(wú)條件轉(zhuǎn)移。格式為:GoTo標(biāo)號(hào)程序執(zhí)行過(guò)程中,遇到GoTo語(yǔ)句,會(huì)無(wú)條件地轉(zhuǎn)到其后的“標(biāo)號(hào)”位置,并從該位置繼續(xù)執(zhí)行程序。標(biāo)號(hào)定義時(shí),名字必須從代碼行的第一列開(kāi)始書(shū)寫(xiě),名字后加冒號(hào)“:”。例如:Goto Label1 跳轉(zhuǎn)到標(biāo)號(hào)為“L

30、abel1”的位置執(zhí)行Label1: 定義的“Label1”標(biāo)號(hào)位置說(shuō)明:GoTo語(yǔ)句在早期的Basic語(yǔ)言中曾廣泛應(yīng)用。在VBA中,程序的執(zhí)行流程可用結(jié)構(gòu)化語(yǔ)句控制,除在錯(cuò)誤處理的“On Error GoTo.”結(jié)構(gòu)中使用外,應(yīng)避免使用GoTo語(yǔ)句。 9.4.4 執(zhí)行語(yǔ)句執(zhí)行語(yǔ)句順序結(jié)構(gòu)每條語(yǔ)句執(zhí)行且執(zhí)行一次。選擇(分支)結(jié)構(gòu)根據(jù)條件真假,有些語(yǔ)句可能不執(zhí)行,但執(zhí)行部分只運(yùn)行一次。循環(huán)結(jié)構(gòu)根據(jù)條件真假,有些語(yǔ)句可能執(zhí)行多次,但也有可能一次也不執(zhí)行!分支結(jié)構(gòu) 單分支、雙分支、多分支 單分支if 條件 then 語(yǔ)句塊 雙分支if 條件 then 語(yǔ)句塊1else 語(yǔ)句塊2end if 多分支,

31、即單雙分支的嵌套注意:else總與最近的if配對(duì)使用!當(dāng)嵌套層次太多時(shí),可以考慮使用case語(yǔ)句(1)單分支結(jié)構(gòu)語(yǔ)句格式為:If Then 或 If Then End If功能:當(dāng)條件表達(dá)式為真時(shí),執(zhí)行Then后面的語(yǔ)句塊或語(yǔ)句,否則不做任何操作。說(shuō)明:語(yǔ)句塊可以是一條或多條語(yǔ)句。在使用上邊的單行簡(jiǎn)單格式時(shí),Then后只能是一條語(yǔ)句,或者是多條語(yǔ)句用冒號(hào)分隔,但必須與If語(yǔ)句在一行上。例如:比較兩個(gè)數(shù)值變量x和y的值,用x保存大的值,y保存小的值。語(yǔ)句如下:If xy Thent=x t為中間變量,用于實(shí)現(xiàn)x與y值的交換x=y y=tEnd If或If xy Then t=x: x=y: y=

32、t(2)雙分支結(jié)構(gòu)語(yǔ)句格式為:If Then Else 或If Then ElseEnd If功能:當(dāng)條件表達(dá)式為真時(shí),執(zhí)行Then后面的語(yǔ)句1或語(yǔ)句塊1,否則執(zhí)行Else后面的語(yǔ)句2或語(yǔ)句塊2?!纠?.12】編寫(xiě)計(jì)算如下函數(shù)的程序語(yǔ)句。If x=0 Theny=Sqr(x)Elsey=Abs(x)End If或If x=0 Then y=Sqr(x) Else y=Abs(x)本例亦可用單分支結(jié)構(gòu)語(yǔ)句實(shí)現(xiàn),讀者可寫(xiě)出程序語(yǔ)句。雙分支結(jié)構(gòu)語(yǔ)句只能根據(jù)條件表達(dá)式的真或假來(lái)處理兩個(gè)分支中的一個(gè)。當(dāng)有多種條件時(shí),要使用多分支結(jié)構(gòu)語(yǔ)句。 (3)多分支結(jié)構(gòu)語(yǔ)句格式為:If Then ElseIf The

33、nElseEnd If功能:依次測(cè)試條件表達(dá)式1、條件表達(dá)式2、,當(dāng)遇到條件表達(dá)式為真時(shí),則執(zhí)行該條件下的語(yǔ)句塊。如均不為真,若有Else選項(xiàng),則執(zhí)行Else后的語(yǔ)句塊,否則執(zhí)行End If后面的語(yǔ)句。說(shuō)明:不管條件分支有幾個(gè),程序執(zhí)行了一個(gè)分支后,其余分支不再執(zhí)行。當(dāng)有多個(gè)條件表達(dá)式同時(shí)為真時(shí),只執(zhí)行第一個(gè)與之匹配的語(yǔ)句塊。因此,應(yīng)注意多分支結(jié)構(gòu)中條件表達(dá)式的次序及相交性。另外注意ElseIf中不能有空格。 【例9.13】用窗體實(shí)現(xiàn)如下操作:當(dāng)輸入某同學(xué)期末考試科目的總平均成績(jī)時(shí),顯示該生對(duì)應(yīng)的五級(jí)制總評(píng)結(jié)果。在窗體中添加以下控件:創(chuàng)建2個(gè)標(biāo)簽控件,其標(biāo)題分別設(shè)為:總平均成績(jī)和總評(píng)結(jié)果。創(chuàng)建

34、2個(gè)文本框控件,其名字分別設(shè)為:Zpcj和Zpjg。創(chuàng)建1個(gè)命令按鈕,其標(biāo)題為“評(píng)定”,在其Click事件過(guò)程中,加入如下代碼語(yǔ)句:Private Sub command1_Click( )If Me!Zpcj=90 ThenMe!Zpjg=優(yōu)秀ElseIf Me!Zpcj=80 ThenMe!Zpjg=良好ElseIf Me!Zpcj=70 ThenMe!Zpjg=中等ElseIf Me!Zpcj=60 ThenMe!Zpjg=及格ElseMe!Zpjg=不及格End IfEnd Sub運(yùn)行結(jié)果:當(dāng)在總平均成績(jī)文本框中輸入任何數(shù)值數(shù)據(jù)時(shí),單擊【評(píng)定】按鈕,總評(píng)結(jié)果將顯示在總評(píng)結(jié)果框中。 (4

35、)If語(yǔ)句的嵌套使用:指If或Else后面的語(yǔ)句塊中又包含有If語(yǔ)句。語(yǔ)句格式為:If ThenIf Then End IfEnd If【例9.14】比較3個(gè)數(shù)值變量x、y和z的值,通過(guò)交換,使得xyz。程序語(yǔ)句如下:If xy Thent=x: x=y: y=t 如果xyIf yz Then t=y: y=z: z=t 如果yzIf xy Then t=x: x=y: y=t 此時(shí)的x,y值已不是原先的值End IfEnd IfEnd If注意:嵌套If語(yǔ)句應(yīng)注意書(shū)寫(xiě)格式,為提高程序的可讀性,多采用鋸齒型。注意If與End If的配對(duì)。多個(gè)If嵌套,End If與它最近的If配對(duì)。2.多分支

36、Select Case語(yǔ)句Select Case語(yǔ)句格式為:Select Case 變量或表達(dá)式Case 表達(dá)式1Case 表達(dá)式2Case ElseEnd Select功能:Select語(yǔ)句首先計(jì)算Select Case后的值,然后依次計(jì)算每個(gè)Case子句中表達(dá)式的值,如果的值滿(mǎn)足某個(gè)Case值,則執(zhí)行相應(yīng)的語(yǔ)句塊,如果當(dāng)前Case值不滿(mǎn)足,則進(jìn)行下一個(gè)Case語(yǔ)句的判斷。當(dāng)所有Case語(yǔ)句都不滿(mǎn)足時(shí),執(zhí)行Case Else子句。如果條件表達(dá)式滿(mǎn)足多個(gè)Case語(yǔ)句,則只有第一個(gè)Case語(yǔ)句被執(zhí)行。 說(shuō)明: “變量或表達(dá)式”可以是數(shù)值型或字符串表達(dá)式。Case表達(dá)式與“變量或表達(dá)式”的類(lèi)型必須

37、相同。 Case表達(dá)式可以是下列幾種格式: 單一數(shù)值或一行并列的數(shù)值,之間用逗號(hào)分開(kāi)。 用關(guān)鍵字To分隔開(kāi)的兩個(gè)數(shù)值或表達(dá)式之間的范圍,前一個(gè)值必須比后一個(gè)值要小。字符串的比較是從它們的第一個(gè)字符的ASCII碼值開(kāi)始比較的,直到分出大小為止。 用Is關(guān)系運(yùn)算符表達(dá)式。 例如: Case 1 to 20 Case is20 Case 1 To 5,7,8,10,is20 Case A To Z【例9.15】例9.13中判定學(xué)生總評(píng)成績(jī)的代碼可改寫(xiě)如下:Select Case Val(me!Zpcj)Case is=90me!Zpjg=優(yōu)秀Case 80,81,82 to 89me!Zpjg=良好

38、Case 70 to 79me!Zpjg=中等Case 60 to 69me!Zpjg=及格Case Elseme!Zpjg=不及格End Select又例如:Dim strx as string *1Select Case strxCase A to Z, a to zstry=英文字母Case !,?,.,;stry=標(biāo)點(diǎn)符號(hào)Case Is68stry=字符的ASCII碼值小于68Case Elsestry=其他字符End Select 3.循環(huán)語(yǔ)句(1)Do WhileLoop循環(huán)語(yǔ)句語(yǔ)法格式為:Do While 條件表達(dá)式 Exit Do Loop 功能:Do While循環(huán)語(yǔ)句:當(dāng)條

39、件表達(dá)式結(jié)果為真時(shí),執(zhí)行循環(huán)體,直到條件表達(dá)式結(jié)果為假或執(zhí)行到Exit Do語(yǔ)句而退出循環(huán)體。(2)Do UntilLoop循環(huán)語(yǔ)句語(yǔ)法格式為:Do Until 條件表達(dá)式 Exit Do Loop Do Until循環(huán)語(yǔ)句:當(dāng)條件表達(dá)式結(jié)果為假時(shí),執(zhí)行循環(huán)體,直到條件表達(dá)式結(jié)果為真或執(zhí)行到Exit Do語(yǔ)句而退出循環(huán)體。(3)DoLoop While循環(huán)語(yǔ)句語(yǔ)法格式為:Do Exit Do Loop While 條件表達(dá)式 說(shuō)明:關(guān)鍵字While用于指明當(dāng)條件為真(True)時(shí),執(zhí)行循環(huán)體中的語(yǔ)句。(4)DoLoop Until循環(huán)語(yǔ)句語(yǔ)法格式為:Do Exit Do Loop Until

40、條件表達(dá)式說(shuō)明:關(guān)鍵字Until用于指明當(dāng)條件為真(True)前執(zhí)行循環(huán)體中的語(yǔ)句。對(duì)于(1)和(2)循環(huán)語(yǔ)句先判斷后執(zhí)行,循環(huán)體有可能一次也不執(zhí)行;而對(duì)于(3)和(4)循環(huán)語(yǔ)句為先執(zhí)行后判斷,循環(huán)體至少執(zhí)行一次。在DoLoop循環(huán)體中,可以在任何位置放置任意個(gè)數(shù)的Exit Do語(yǔ)句,隨時(shí)跳出DoLoop循環(huán)。如果Exit Do使用在嵌套的DoLoop語(yǔ)句中,則Exit Do會(huì)將控制權(quán)轉(zhuǎn)移到Exit Do所在位置的外層循環(huán)。當(dāng)省略While或Until條件子句時(shí),循環(huán)體結(jié)構(gòu)變成如下格式:Do Exit Do Loop循環(huán)結(jié)構(gòu)僅由Do. Loop關(guān)鍵字組成,表示無(wú)條件循環(huán),若在循環(huán)體中不加Exi

41、t Do語(yǔ)句,循環(huán)結(jié)構(gòu)為“死循環(huán)”。 【例9.16】把26個(gè)小寫(xiě)英文字母賦給數(shù)組strx。 Dim strx(1 to 26) As String I=1 Do While I=26 strx(I)=Chr(I+96) I=I+1 Loop5)ForNext循環(huán)語(yǔ)句主要用于循環(huán)次數(shù)已知的循環(huán)操作。語(yǔ)句格式為:For 循環(huán)變量=初值 To 終值 step 步長(zhǎng)值Exit For Next 循環(huán)變量功能:循環(huán)變量先被賦初值。判斷循環(huán)變量是否在終值內(nèi),如果是,執(zhí)行循環(huán)體,然后循環(huán)變量加步長(zhǎng)值繼續(xù);如果否,結(jié)束循環(huán),執(zhí)行Next后的語(yǔ)句。說(shuō)明:循環(huán)變量必須為數(shù)值型。step步長(zhǎng)值:可選參數(shù)。如果沒(méi)有指

42、定,則step的步長(zhǎng)值默認(rèn)為1。注意:步長(zhǎng)值可以是任意的正數(shù)或負(fù)數(shù)。一般為正數(shù),初值應(yīng)小于等于終值;若為負(fù)數(shù),初值應(yīng)大于等于終值;步長(zhǎng)值不能為0,否則造成“死循環(huán)”。【例9.17】把26個(gè)大寫(xiě)英文字母賦給數(shù)組strx。Dim strx(1 to 26) As StringI=1For I=1 To 26 strx(I)=Chr(I+64)Next I說(shuō)明:循環(huán)體結(jié)束后,循環(huán)變量的值為循環(huán)終值+步長(zhǎng)值,上例循環(huán)結(jié)束后I值為27。【例9.18】分析下列程序的循環(huán)結(jié)構(gòu):For K=5 To 10 Step 2K=K*2Next K按照公式計(jì)算,循環(huán)次數(shù)為:(10-5+1)/2=3次,但這是錯(cuò)誤的。實(shí)

43、際上,該循環(huán)的循環(huán)次數(shù)為只有1次(循環(huán)變量先后取值5和12,循環(huán)執(zhí)行1次之后,循環(huán)變量值為12,超過(guò)終值10,循環(huán)結(jié)束)?!纠?.19】在立即窗口中顯示有(*)組成的5*5的正方形。Sub Procedure5( ) 輸出5*5的正方形 Const MAX=5 定義常量 Dim Str As String Str= For n=1 to Max Str=Str+* Next nFor n=1 to Max Debug.print Str Next nEnd Sub(6)WhileWend循環(huán)語(yǔ)句 WhileWend循環(huán)與Do WhileLoop結(jié)構(gòu)類(lèi)似,但不能在WhileWend循環(huán)中使用Ex

44、it Do語(yǔ)句。 WhileWend循環(huán)語(yǔ)句格式為: While條件表達(dá)式 Wend9.5過(guò)程調(diào)用 函數(shù)調(diào)用函數(shù)名稱(chēng)(參數(shù)表) 例題9.20計(jì)算圓面積,使用函數(shù)調(diào)用方法 過(guò)程調(diào)用Call 過(guò)程名稱(chēng)(參數(shù)表) 參數(shù)傳遞ByVal傳值方式,單向ByRef傳址方式,雙向舉例子說(shuō)明!【例9.20】在窗體對(duì)象中,使用函數(shù)過(guò)程實(shí)現(xiàn)任意半徑的圓面積計(jì)算,當(dāng)輸入圓半徑值時(shí),計(jì)算并顯示圓面積。在窗體中添加以下控件:創(chuàng)建兩個(gè)標(biāo)簽控件,其標(biāo)題分別設(shè)為:半徑和圓面積。創(chuàng)建兩個(gè)文本框控件,其名字分別設(shè)為:SinR和SinS創(chuàng)建一個(gè)命令按鈕,其標(biāo)題設(shè)為“計(jì)算”,在其Click事件過(guò)程中,加入如下代碼語(yǔ)句:Private Sub comman

溫馨提示

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

評(píng)論

0/150

提交評(píng)論