




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
7.1VBA程式設(shè)計(jì)基礎(chǔ)
VBA的程序結(jié)構(gòu)7.2面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)7.37.4模塊的基本概念7.5過程調(diào)用和程序調(diào)試7.1.1VBA中的常量和變量1)符號(hào)常量:符號(hào)常量必須先定義,后使用。基本語法格式如下:[Public/Private]Const常量名[As類型]=表達(dá)式語句功能:定義一個(gè)符號(hào)常量,并將指定表達(dá)式的值賦給符號(hào)常量。1、常量7.1VBA程序設(shè)計(jì)基礎(chǔ)語句說明如下:“常量名”指定符號(hào)常量的名稱。符號(hào)常量名可以由字母、數(shù)字和下畫線組成,但只能以字母開頭,也不能含有空格。“表達(dá)式”指定符號(hào)常量的值。該表達(dá)式通常由數(shù)值型、字符型、邏輯型或日期型數(shù)據(jù)以及各種運(yùn)算符組成,但在表達(dá)式中不能出現(xiàn)變量和函數(shù)。public表示這個(gè)常量的作用范圍是整個(gè)數(shù)據(jù)庫(kù)的所有模塊。private則表示這個(gè)常量只在使用該聲明常量語句的模塊中起作用。注意:除自定義的符號(hào)常量外,VBA還提供了許多符號(hào)常量,用戶可以直接使用。對(duì)于代碼比較長(zhǎng),并且在程序中多次使用的常量,通常使用符號(hào)常量代替。運(yùn)行程序時(shí),系統(tǒng)自動(dòng)把程序中的所有符號(hào)常量替換為賦給它的值。2)系統(tǒng)定義常量:系統(tǒng)定義常量有3個(gè)值,分別是True、False和Null。3)固有常量:固有常量是Access或引用對(duì)象庫(kù)的一部分,由Access自動(dòng)定義,并且由程序列與控件提供。用戶若需要使用該常量,可以使用對(duì)象瀏覽器來查看所有對(duì)象庫(kù)中的固有常量列表。在VBA中,常量的數(shù)據(jù)類型有整型、長(zhǎng)整型、單精度型、雙精度型、字節(jié)型、貨幣型、字符型、日期型和邏輯型。一個(gè)整型數(shù)據(jù)就是一個(gè)整型常量,一個(gè)長(zhǎng)整型數(shù)據(jù)就是一個(gè)長(zhǎng)整型常量。例如,12%、-1%是整型常量,32768&、10000000&是長(zhǎng)整型常量,-2.5!、3.14!是單精度實(shí)型常量,3.1415926#是雙精度實(shí)型常量,China、Shanghai是字符型常量,#07/13/200111:45PM#是日期型常量。1)變量名每個(gè)變量都有一個(gè)名稱。變量名指定引用變量時(shí)的名稱。變量名可以由字母、數(shù)字和下劃線組成,但只能以字母開頭,也不能含有空格,并且變量名的長(zhǎng)度不超過255個(gè)字符。2、變量
注意:在變量名中,英文字母的大小寫等價(jià),即Name12和NAME12表示同一個(gè)變量。變量名不能與VBA的保留字重名,即For、Do、End、Sub、Function、While等保留字不能直接作為變量名。給變量命名時(shí),最好做到“見名知意”,選取具有相關(guān)意義的英文單詞、漢語拼音或拼音的首字母作為變量名,以增加程序的可讀性。2)變量的定義
變量在使用之前一般先聲明。【格式】
[Dim/Public/Private]變量名As數(shù)據(jù)類型
注意:使用Dim關(guān)鍵字表示定義本地變量。也就是說,所聲明的變量?jī)H在聲明的過程和函數(shù)中有效。使用Public關(guān)鍵字表示定義公共變量。也就是說,所聲明的變量在所有模塊的所有過程和函數(shù)中都可以使用。使用Private關(guān)鍵字表示定義私有變量。也就是說,所聲明的變量只在當(dāng)前模塊的所有過程和函數(shù)中有效。7.1.2VBA的數(shù)據(jù)類型類型符號(hào)數(shù)據(jù)類型有效值默認(rèn)值Byte
字節(jié)0~2550Integer%整型-32768~327670Boolean是/否True和FalseFalseLong&長(zhǎng)整型-2147483648~21474836470Single!單精度負(fù)數(shù):-3.402823E+38~-1.401298E-450正數(shù):1.401298E-45~3.402823E+38Double#雙精度負(fù)數(shù):-1.79769313486231E+308~-4.9406564841247E-3240正數(shù):4.9406564841247E-324~1.79769313486231E+308Currency@貨幣-22337203685~9223372036850String$文本或備注根據(jù)字符串長(zhǎng)度而定""Date日期/時(shí)間January1,100~December31,99990Variant任何
Empty
在VBA程序設(shè)計(jì)中也需要對(duì)使用的變量的數(shù)據(jù)類型進(jìn)行聲明。7.1.3操作符和表達(dá)式1、算術(shù)表達(dá)式運(yùn)算符含義優(yōu)先級(jí)()括號(hào)高低**或^乘方*、/、\乘、除、整除MOD取模(或取余),取兩數(shù)相除的余數(shù)+、
-加、減
算術(shù)表達(dá)式是由數(shù)值型變量、常量、函數(shù)和數(shù)值操作符組成的,用于對(duì)數(shù)值型數(shù)據(jù)進(jìn)行常規(guī)的算術(shù)運(yùn)算,如表7-2所示。
操作符是表示數(shù)據(jù)之間運(yùn)算方式的運(yùn)算符號(hào),一般根據(jù)所處理數(shù)據(jù)類型的不同可分為算術(shù)運(yùn)算符、字符運(yùn)算符、關(guān)系運(yùn)算符和邏輯運(yùn)算符4種。表達(dá)式是由常量、變量、函數(shù)、操作符及圓括號(hào)組成的算式。表達(dá)式中的操作對(duì)象必須具有相同的數(shù)據(jù)類型,如果表達(dá)式中有不同類型的操作對(duì)象,則必須將它們轉(zhuǎn)換成同種數(shù)據(jù)類型。2、字符表達(dá)式運(yùn)算符用于連接兩個(gè)字符型數(shù)據(jù)。用字符運(yùn)算符連接字符型數(shù)據(jù)組成的表達(dá)式是字符型表達(dá)式。字符型表達(dá)式運(yùn)算后的結(jié)果是一個(gè)字符型數(shù)據(jù)。字符運(yùn)算符包括“+”和“&”兩個(gè)。它們的功能是把運(yùn)算符右邊的字符串連接到左邊字符串的尾部,組成一個(gè)新的字符串。例如,"Visual"&"Basic"的運(yùn)算結(jié)果是VisualBasic。使用字符運(yùn)算符進(jìn)行運(yùn)算時(shí),如果運(yùn)算符兩邊都是字符型數(shù)據(jù),“+”與“&”運(yùn)算的結(jié)果相同。如果運(yùn)算符兩邊不全是字符型數(shù)據(jù),則“+”運(yùn)算符不能進(jìn)行運(yùn)算,“&”運(yùn)算符可以將非字符型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù),再進(jìn)行運(yùn)算。例如,"VBA"+6將顯示數(shù)據(jù)類型不匹配的信息,而"VBA"&6的結(jié)果是VBA6。3、關(guān)系表達(dá)式關(guān)系表達(dá)式用于數(shù)值、字符和日期型數(shù)據(jù)的比較運(yùn)算。關(guān)系表達(dá)式的運(yùn)算優(yōu)先級(jí)相同,如表7-3所示。4、邏輯表達(dá)式邏輯表達(dá)式是由邏輯型變量、常量、函數(shù)和字符運(yùn)算符組成的,用來對(duì)邏輯型數(shù)據(jù)進(jìn)行各種邏輯運(yùn)算,形成各種簡(jiǎn)單的邏輯結(jié)果5、表達(dá)式的優(yōu)先級(jí)將常量和變量用各種運(yùn)算符連接在一起構(gòu)成的式子就叫表達(dá)式。當(dāng)一個(gè)表達(dá)式由多個(gè)運(yùn)算符連接在一起時(shí),如果一個(gè)表達(dá)式中含有多種不同類型的運(yùn)算符,運(yùn)算進(jìn)行的先后順序由運(yùn)算符的優(yōu)先級(jí)決定。可見,運(yùn)算進(jìn)行的先后順序是由運(yùn)算符的優(yōu)先級(jí)決定的。優(yōu)先級(jí)高的運(yùn)算先進(jìn)性,優(yōu)先級(jí)相同的運(yùn)算依照從左向右的順序進(jìn)行。7.1.4輸入、輸出函數(shù)1、輸入函數(shù)【格式】InputBox(<提示信息>[,對(duì)話框標(biāo)題][,默認(rèn)][,X坐標(biāo)][,Y坐標(biāo)])【功能】
該函數(shù)能生成一個(gè)對(duì)話框,并顯示提示,等待用戶輸入正文或單擊按鈕。如果用戶單擊“OK”按鈕或按〈Enter〉鍵,則InputBox函數(shù)返回包含文本框中內(nèi)容的字符串;單擊“Cancel”按鈕,則此函數(shù)返回一個(gè)長(zhǎng)度為0的字符串("")。2、輸出函數(shù)【格式】MsgBox(<提示信息>[,按鈕形式][,[對(duì)話框標(biāo)題]]【功能】
該函數(shù)能產(chǎn)生一個(gè)顯示消息的對(duì)話框,等待用戶單擊按鈕。【舉例】在立即窗口輸入:
A=InputBox("EnterYourName","輸入姓名")
b=InputBox("請(qǐng)輸入數(shù)據(jù)")
c=a+b
MsgBox(c)
MsgBox("字符原樣輸出")MsgBox函數(shù)的返回值是一個(gè)整數(shù),它與選擇的命令按鈕有關(guān)。MsgBox函數(shù)的返回值見表7-5,MsgBox函數(shù)的按鈕設(shè)置值見表7-6。表7-6MsgBox函數(shù)的返回值表7-7MsgBox函數(shù)按鈕設(shè)置值7.2.1VBA程序設(shè)計(jì)基礎(chǔ)
啟動(dòng)Access2010,然后才能進(jìn)入IDE環(huán)境。進(jìn)入VBA的編程環(huán)境有3種方式。(1)直接進(jìn)入VBA
在數(shù)據(jù)庫(kù)中,單擊“數(shù)據(jù)庫(kù)工具”選項(xiàng)卡,在“宏”組中單擊“VisualBasic”按鈕,可進(jìn)入VBA的編程環(huán)境界面。如圖7-21、進(jìn)入VBA的幾種方法7.2VBA程序結(jié)構(gòu)(2)創(chuàng)建模塊進(jìn)入VBA
在數(shù)據(jù)庫(kù)中,單擊“創(chuàng)建”選項(xiàng)卡,在“宏與代碼”組中單擊“VisualBasic”按鈕,可進(jìn)入VBA的編程環(huán)境界面。如圖7-3所示。(3)通過窗體和報(bào)表等大型的設(shè)計(jì)進(jìn)入VBA
通過窗體和報(bào)表等大型的設(shè)計(jì)進(jìn)入VBA有2種方法:在窗體或報(bào)表設(shè)計(jì)視圖中單擊“查看代碼”選項(xiàng)按鈕,進(jìn)入VBA,如圖7-4所示。通過控件的時(shí)間響應(yīng)進(jìn)入VBA,在控件的“屬性表”窗格中,單擊對(duì)象事件的“省略號(hào)”按鈕添加事件過程后,在窗體、報(bào)表或控件的事件過程中進(jìn)入VBA,如圖7-5所示。查看代碼
通過上面的兩種方法均可進(jìn)入VBA的編程環(huán)境界面。VBA編程窗口是由一些常用的工具和多個(gè)窗口組成,如圖7-6所示。下面介紹VBA編輯窗口的界面組成。標(biāo)題欄:顯示應(yīng)用程序名稱和窗口控制按鈕。菜單欄:通過執(zhí)行命令來完成相應(yīng)的功能。工具欄:提供了對(duì)常用功能的快速調(diào)用。VBAIDE共提供了4個(gè)工具欄:“標(biāo)準(zhǔn)”、“編輯”、“用戶窗體”和“調(diào)試”工具欄。工程窗口:以樹狀結(jié)構(gòu)顯示主應(yīng)用程序與窗體、模塊及類模塊的完整結(jié)構(gòu),用戶可在工程窗口中直接選擇窗體或模塊,對(duì)其進(jìn)行編輯。屬性窗口:用于顯示窗體上的某個(gè)控件的可見屬性及其默認(rèn)值,通過該屬性窗口,還可以對(duì)可見屬性的值進(jìn)行直接編輯。代碼窗口:用于編寫模塊的過程代碼。本地窗口:本地窗口顯示當(dāng)前過程中所有變量的當(dāng)前值,它只反映當(dāng)前過程的情況,所以當(dāng)程序的執(zhí)行從一個(gè)過程切換到另一個(gè)過程時(shí),本地窗口的內(nèi)容會(huì)發(fā)生改變。立即窗口:立即窗口用于顯示當(dāng)前過程中的有關(guān)信息。監(jiān)視窗口:監(jiān)視窗口用于查看指定表達(dá)式的值。2、VBA編程環(huán)境7.2.2常用語句(1)賦值語句給變量賦值,就是將指定的數(shù)據(jù)保存到變量中。VBA使用賦值語句給變量賦值。【格式】<變量名>=<表達(dá)式>【功能】將表達(dá)式的值賦給指定的變量。【說明】1)“=”是賦值號(hào),不是等號(hào)。它的功能是將其右側(cè)表達(dá)式的值賦給左側(cè)的變量,因此語句中的變量名與表達(dá)式不能交換位置。2)表達(dá)式指定給變量賦的值。VBA先計(jì)算表達(dá)式的值,再用計(jì)算的結(jié)果給變量賦值。1、VBA的書寫規(guī)則VBA不區(qū)分標(biāo)識(shí)符字母的大小寫,一律認(rèn)為是小寫字母。一行可以書寫多條語句,各語句之間以冒號(hào)“
:
”分開。一條語句可以多行書寫,以空格加下畫線“
_
”來標(biāo)識(shí)下行為續(xù)行。2、VBA常用語句(2)聲明語句聲明語句用于定義常量、變量、數(shù)組和過程。在定義這些內(nèi)容的同時(shí),也定義了它們的使用范圍。【格式】Dim|Static|Private|Public變量名[As類型][,變量[As類型]]【說明】VBA允許使用未定義的變量,默認(rèn)是變體變量。
在模塊通用說明部分,加入OptionExplicit語句可以強(qiáng)迫用戶進(jìn)行變量定義。
變量定義語句及變量作用域:Dim變量As類型 '定義為局部變量,如DimxyzAsinteger
Private變量As類型 '定義為私有變量,如PrivatexyzAsbyte
Public變量As類型 '定義為公有變量,如PublicxyzAssingle
Global變量As類型 '定義為全局變量,如GloblalxyzAsdate
Static變量As類型 '定義為靜態(tài)變量,如StaticxyzAsdouble
一般變量作用域的原則是,哪部分定義就在哪部分起作用,模塊中定義的只在該模塊中那作用。(3)注釋語句【格式1】Rem注釋內(nèi)容【格式2】‘注釋內(nèi)容【功能】注釋語句用來說明程序中某些語句的功能和作用。在VBA中可以使用以上兩種方法標(biāo)示注釋語句,其中單引號(hào)
'
可以定義全局變量,可以位于一行中其他語句的后面,也可單獨(dú)一行;而Rem可以定義全局變量,只能單獨(dú)一行。3、運(yùn)行VBA程序程序代碼存盤后,可以用以下兩種方式執(zhí)行它,程序運(yùn)行結(jié)果將顯示在主窗口中。打開代碼窗口,選擇“運(yùn)行”菜單→“運(yùn)行子過程/用戶窗口”命令。打開代碼窗口,單擊工具欄中的“運(yùn)行子過程/用戶窗口”按鈕。7.2.3程序流程控制順序結(jié)構(gòu)是一種線形結(jié)構(gòu),是最基本的程序結(jié)構(gòu),它是按照命令或語句的排列順序的,依次執(zhí)行。1、順序結(jié)構(gòu)【例7-1】通過鍵盤輸入圓的半徑R,通過計(jì)算圓面積公式S=πR2計(jì)算出圓的面積S,最后輸出該圓的面積S。PrivateSubprg2()DimRAsIntegerR=InputBox("請(qǐng)輸入半徑") '輸入一個(gè)數(shù)值,賦值給變量RS=3.1416*R*R '將計(jì)算結(jié)果存儲(chǔ)到變量S中
Debug.Print"圓的面積S=",S '顯示字符串及變量S的值EndSub7.2.3程序流程控制選擇結(jié)構(gòu)又稱為分支結(jié)構(gòu),是根據(jù)給定的條件是否為真來決定執(zhí)行不同的分支,完成相應(yīng)的操作。2、選擇結(jié)構(gòu)1)簡(jiǎn)單選擇語句【格式】If條件表達(dá)式Then語句1[Else語句2]【功能】如果<條件表達(dá)式>為真(.T.),則執(zhí)行“語句1”;如果沒有Else,執(zhí)行下一句。如果有[Else語句2]選項(xiàng),當(dāng)<條件表達(dá)式>為假時(shí),執(zhí)行“語句2”。P245【例7-2】,【例7-3】【格式1】If條件Then語句組[Else語句]Endif【格式2】If條件Then語句組1Else語句組2Endif【功能】在執(zhí)行時(shí)也是首先判斷條件是否成立。如果成立,則執(zhí)行語句組1;否則,執(zhí)行Else后的語句組2。如果條件不成立,又沒有Else部分,則跳過該語句。其中,語句組1和語句組2可以是多條VBA可執(zhí)行語句。注意:結(jié)構(gòu)化選擇語句的Then后不能放入其他語句,否則會(huì)被當(dāng)做簡(jiǎn)單選擇語句來處理。當(dāng)條件不成立時(shí),可以在Else的后面再用If語句進(jìn)行進(jìn)一步判斷,這時(shí)就形成了選擇語句的嵌套形式。2)結(jié)構(gòu)化的選擇語句結(jié)構(gòu)化的選擇語句由If開頭,Endif結(jié)尾,其語句結(jié)構(gòu)如下。3)多分支選擇語句多分支選擇語句又稱為情況語句【格式】SelectCase測(cè)試條件
Case條件1語句1
Case條件2語句2
…
Case條件n語句n
[CaseElse語句n+1]EndSelect【功能】當(dāng)條件成立時(shí),程序執(zhí)行該Case下面的語句;如果沒有一個(gè)條件成立,則執(zhí)行CaseElse后面的語句n+1。4)選擇結(jié)構(gòu)的嵌套
在IF語句的Then分支和Else分支中可以完整地嵌套另一IF語句或SelectCase語句,同樣SelectCase語句每一個(gè)Case分支中都可嵌套另一IF語句或另一SelectCase語句。選擇結(jié)構(gòu)的嵌套不允許交叉。比如下面的幾個(gè)選例中(a)、(b)嵌套形式正確,(c)嵌套形式錯(cuò)誤,不能交叉。5)與選擇相關(guān)的幾個(gè)函數(shù)IIF函數(shù):IIf(條件式、表達(dá)示1,表達(dá)示2)【說明】條件為真,返回表達(dá)式1的值;為假,返回表達(dá)示2的值例如:y=IIf(a>b,a,b)如果a>b為真,返回a,為假則返回。即返回a,b中較大的值。Switch函數(shù):switch(條件式1,表達(dá)式1[條件式2,表達(dá)式2…])【說明】條件式與表達(dá)式成對(duì)出現(xiàn),如條件式為真,則返回對(duì)應(yīng)表達(dá)式的值例如:y=switch(x>0,1,x=0,0,x<0,-1)如果現(xiàn)在x=10,條件x>0滿足,則y=1。Choose函數(shù):Choose(索引式,選項(xiàng)1[,選項(xiàng)2…[,選項(xiàng)n]])【說明】根據(jù)索引式的值返回選項(xiàng)列表中的某個(gè)值例如:y=choose(x,1,m,7,n)如果x=2,則y=m,即返回第二個(gè)選項(xiàng)的值。3、循環(huán)結(jié)構(gòu)(1)While…Wend循環(huán)語句While…Wend循環(huán)語句是當(dāng)條件成立時(shí)執(zhí)行循環(huán)體,故稱為當(dāng)型循環(huán),其語句結(jié)構(gòu)如下。【格式】While條件循環(huán)體Wend【功能】While…Wend循環(huán)語句是結(jié)構(gòu)化循環(huán)語句,當(dāng)條件成立時(shí)執(zhí)行一次循環(huán)體,然后再進(jìn)行條件判斷;若條件成立,再執(zhí)行一次循環(huán)體。如此反復(fù),直到判斷條件不成立時(shí)結(jié)束循環(huán)語句。在使用該類循環(huán)時(shí),在循環(huán)體中一定要有使循環(huán)條件不成立的語句,否則將是一個(gè)死循環(huán)。P249【例7-7】【格式1】Do[While|Until<條件表達(dá)式>]<循環(huán)代碼>[ExitDo]Loop【格式2】Do<循環(huán)代碼>Loop[While|Until<條件表達(dá)式>]2)DoWhile…Loop語句通過Do執(zhí)行循環(huán)有如下兩種格式。
注意格式1和格式2的區(qū)別:格式2中的循環(huán)代碼至少被執(zhí)行一次,格式1中的循環(huán)可能一次也執(zhí)行不到。P250【例7-8】,【例7-9】3)For…Next循環(huán)語句
For…Next循環(huán)語句常用于循環(huán)次數(shù)已知的程序,其語句結(jié)構(gòu)如下。【格式】For循環(huán)控制變量=初值To終值[Step步長(zhǎng)]
<循環(huán)代碼>Next注意:
其中,“Step步長(zhǎng)”可以省略,步長(zhǎng)默認(rèn)值為1。循環(huán)控制變量的初值和終值的設(shè)置受步長(zhǎng)的約束。當(dāng)步長(zhǎng)為負(fù)數(shù)時(shí),初值必須大于終值才能執(zhí)行循環(huán)體;當(dāng)步長(zhǎng)為正數(shù)時(shí),初值必須小于終值才能執(zhí)行循環(huán)體。P251【例7-10】4)循環(huán)的嵌套如果在一個(gè)循環(huán)內(nèi)完整地包含另一個(gè)循環(huán)結(jié)構(gòu),則稱為多重循環(huán),或循環(huán)嵌套,嵌套的層數(shù)可以根據(jù)需要而定。循環(huán)嵌套要注意以下事項(xiàng)。1)內(nèi)循環(huán)變量與外循環(huán)變量不能同名;2)外循環(huán)必須完全包含內(nèi)循環(huán),不能交叉;3)不能從循環(huán)體外轉(zhuǎn)向循環(huán)體內(nèi),也不能從外循環(huán)轉(zhuǎn)向內(nèi)循環(huán)。
舉例:用For…Next循環(huán)嵌套編寫能在立即窗口輸出5行5列的花“*”,事件代碼如下:PublicSubprg1()DimiAsInteger,jAsIntegerFori=1To5Forj=1To5Debug.Print"*";NextjDebug.PrintNextiEndSub7.2.4數(shù)組1、聲明數(shù)組
數(shù)組是包含相同數(shù)據(jù)類型的一組變量的集合。通過數(shù)組索引下標(biāo)對(duì)數(shù)組中的單個(gè)變量進(jìn)行引用。數(shù)組在內(nèi)存中表現(xiàn)為一個(gè)連續(xù)的內(nèi)存塊,必須用Global或Dim語句來定義。【格式】Public/Private/Static/Dim數(shù)組名([下標(biāo)]To上界)[As數(shù)據(jù)類型]【說明】1)數(shù)組下標(biāo)默認(rèn)為0,上述例子中上界為8,共9個(gè)元素。也可以手工指定數(shù)組下標(biāo),如DimSZ(1To8)AsInteger。2)通常可以通過一個(gè)For循環(huán)處理數(shù)組。3)在模塊的聲明部分使用“OptionBase1”語句,可以將數(shù)組下標(biāo)默認(rèn)值由0改為1。2、二維數(shù)組和多維數(shù)組【格式】Dim數(shù)組名([下標(biāo)]To上界,[[下標(biāo)]To上標(biāo),…])[As數(shù)據(jù)類型]
3、動(dòng)態(tài)數(shù)組【格式】DimArray()然后用ReDim語句配置數(shù)組個(gè)數(shù)。ReDim語句聲明只能用在過程中,它是可執(zhí)行語句,可以改變數(shù)組中元素的個(gè)數(shù),但不能改變數(shù)組的維數(shù)。每次用ReDim語句配置數(shù)組時(shí),原有數(shù)組的值全部清零。P254【例7-11】7.3.1基本概念1、對(duì)象7.3面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)所謂對(duì)象,就是代碼和數(shù)據(jù)的組合,可將它看作為單元。例如,表、窗體或文本框等都是對(duì)象。每個(gè)對(duì)象由類來定義。現(xiàn)實(shí)生活的對(duì)象就是一個(gè)具體的事物。自然界的任何一個(gè)具體的事物都可以看作是一個(gè)對(duì)象。一個(gè)人、一本書、一部電話、一臺(tái)電腦和一架飛機(jī)等都是對(duì)象。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,對(duì)象是一個(gè)具有屬性和方法的實(shí)體,是面向?qū)ο蟪绦蛟O(shè)計(jì)的基本元素。在VBA中,每個(gè)可以操作的實(shí)體都是對(duì)象。例如,窗體、按鈕、文本框、列表框等都是常用的對(duì)象。對(duì)象是VBA應(yīng)用程序的基本單元,VBA提供了各種標(biāo)準(zhǔn)對(duì)象,我們可以在程序中直接使用這些對(duì)象。現(xiàn)實(shí)生活中的對(duì)象可以包含其他對(duì)象。例如,一臺(tái)電腦是一個(gè)對(duì)象,它又包含組成電腦的主機(jī)、顯示器、鍵盤和鼠標(biāo)等對(duì)象。面向?qū)ο蟪绦蛟O(shè)計(jì)中的對(duì)象也可以包含其他對(duì)象,如創(chuàng)建的窗體是一個(gè)對(duì)象,它又包含命令按鈕和標(biāo)簽等對(duì)象。包含其他對(duì)象的對(duì)象稱為容器對(duì)象。所謂屬性,是指定義的對(duì)象特征,如大小、顏色和對(duì)象狀態(tài)等。現(xiàn)實(shí)生活中的每個(gè)對(duì)象都有許多特性,每個(gè)特性都有一個(gè)具體的值。例如,某個(gè)人的姓名是李曉明,性別是男,身高是1.78米,體重是75公斤,出生日期是1988年12月31日。則姓名、性別、身高、體重和出生日期等就是該對(duì)象的特性,李曉明、男、1.78米、75公斤、1988年12月31日等則是描述該對(duì)象特性的具體數(shù)據(jù)。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,對(duì)象的特性稱為對(duì)象的屬性,描述該對(duì)象特性的具體數(shù)據(jù)稱為屬性值。每個(gè)對(duì)象有多個(gè)屬性,每個(gè)屬性有屬性值。以“變色”為例。P255【例7-12】2、對(duì)象的屬性和屬性值事件就是對(duì)象可以識(shí)別和響應(yīng)的操作。它是預(yù)先定義的特定操作。不同對(duì)象能夠識(shí)別不同的事件。例如,電話對(duì)象能識(shí)別拿起電話聽筒這個(gè)操作。當(dāng)需要接聽電話時(shí),拿起電話聽筒就可以接聽對(duì)方的電話。當(dāng)需要打出電話時(shí),拿起電話聽筒就可以撥號(hào)呼叫對(duì)方。因此,拿起電話聽筒這個(gè)操作就是電話對(duì)象的事件。在VBA中,事件也是一種預(yù)先定義好的特定動(dòng)作。如單擊鼠標(biāo)(Click)、雙擊鼠標(biāo)(DblClick)、移動(dòng)鼠標(biāo)(MouseMove)或按鍵盤上的某個(gè)鍵等都是事件,當(dāng)系統(tǒng)裝載對(duì)象(Load)、初始化對(duì)象或遇到導(dǎo)致錯(cuò)誤的代碼時(shí)也會(huì)發(fā)生事件。也就是說,VBA中的事件可以由用戶激發(fā),也可以由程序或系統(tǒng)激發(fā)。3、事件方法就是事件發(fā)生時(shí)對(duì)象所執(zhí)行的操作。方法與對(duì)象緊密聯(lián)系。例如,拿起電話聽筒這個(gè)事件發(fā)生時(shí),電話就執(zhí)行通話的操作,通話就是拿起電話聽筒這個(gè)事件的方法。VBA中的方法是事件發(fā)生時(shí)執(zhí)行的一段內(nèi)部程序,即事件過程代碼。這些代碼指定事件發(fā)生時(shí)對(duì)象需要完成的操作。VBA提供了許多常用的方法,我們可以直接調(diào)用這些方法,但有些方法則需要我們編寫代碼來實(shí)現(xiàn)。某一種類型的對(duì)象具有一些共同的屬性,將這些共同屬性抽象出來就組成一個(gè)類。例如,每個(gè)人都有姓名、性別、身高、體重和出生日期等屬性,將所有人具有的共同屬性抽象出來就組成人類,每個(gè)具體的人都是人類中的一個(gè)對(duì)象。類就像某一種類型對(duì)象的模板,基于類可以生成相同類型的任何一個(gè)對(duì)象,這些對(duì)象具有類的所有屬性。面向?qū)ο蟮某绦蛟O(shè)計(jì)引入類這個(gè)概念后,用戶創(chuàng)建一個(gè)對(duì)象只需從相應(yīng)的類中生成一個(gè)對(duì)象,再設(shè)置具體的屬性值即可,并不需要從最基礎(chǔ)的部分開始設(shè)計(jì)。如創(chuàng)建命令按鈕對(duì)象時(shí),就是直接從VBA的命令按鈕類中創(chuàng)建命令按鈕,再設(shè)置其屬性值。4、方法5、類7.3.2VBA對(duì)象設(shè)計(jì)的操作方法1、使用VBA開發(fā)應(yīng)用程序的基本方法程序設(shè)計(jì)需要根據(jù)不同的問題設(shè)計(jì)不同的解決方案,每個(gè)程序都有自己獨(dú)特的功能。雖然程序的編碼可能是千變?nèi)f化、互不相同的,但是使用面向?qū)ο蟪绦蛟O(shè)計(jì)語言開發(fā)應(yīng)用程序卻是有一定的規(guī)律可循的。1.使用VBA開發(fā)應(yīng)用程序的基本方法VBA充分體現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)。使用VBA開發(fā)應(yīng)用程序的基本步驟如下。1)設(shè)計(jì)應(yīng)用程序的界面。2)設(shè)置對(duì)象的屬性值。3)編寫事件過程代碼。4)運(yùn)行調(diào)試程序。5)保存程序。
說明設(shè)計(jì)應(yīng)用程序界面的主要工作是創(chuàng)建窗體和向窗體設(shè)計(jì)器添加控件。從工具箱中可以看到各種控件的形狀互不相同,從實(shí)例1可以看出,控件屬性的不同值決定控件的大小、位置、顏色、顯示內(nèi)容的不同,因此,掌握控件的功能和屬性對(duì)于設(shè)計(jì)用戶界面是非常必要的。使用VBA開發(fā)應(yīng)用程序的基本方法并不是一成不變的。也可以在添加一個(gè)控件后,緊接著就設(shè)置控件的屬性值和編寫事件過程代碼,再添加下一個(gè)控件,并進(jìn)行相同的操作。不過,按照上述基本方法操作,條理性和規(guī)范性要強(qiáng)一些。VBA還可以將應(yīng)用程序編譯成可執(zhí)行文件,并且編譯生成的可執(zhí)行文件可以脫離VBA開發(fā)環(huán)境直接在Windows中運(yùn)行。面向?qū)ο蟪绦蛟O(shè)計(jì)方法與傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)方法有較大差別。使用結(jié)構(gòu)化程序設(shè)計(jì)方法設(shè)計(jì)前面介紹的系統(tǒng)主界面時(shí),需要自己編寫代碼定義窗口,定義按鈕,需要設(shè)計(jì)程序流程和程序結(jié)構(gòu)。而使用面向?qū)ο蟪绦蛟O(shè)計(jì)方法設(shè)計(jì)該顯示界面時(shí),我們既不需要定義窗體、標(biāo)簽控件和命令按鈕控件,也不需要考慮程序流程和程序結(jié)構(gòu),而是直接使用系統(tǒng)提供的窗體、標(biāo)簽控件和命令按鈕控件,在屏幕上“畫”出窗口、按鈕、標(biāo)簽等不同類型的對(duì)象,為這些對(duì)象設(shè)置屬性,確定標(biāo)簽控件和命令按鈕控件的位置、大小,編寫鼠標(biāo)單擊命令按鈕事件對(duì)應(yīng)的功能代碼。結(jié)構(gòu)化程序設(shè)計(jì)方法的程序運(yùn)行時(shí)按照預(yù)定的流程執(zhí)行。面向?qū)ο蟪绦蛟O(shè)計(jì)方法的程序運(yùn)行時(shí)按照事件發(fā)生的順序執(zhí)行程序代碼,這就是面向?qū)ο蟪绦虻氖录?qū)動(dòng)機(jī)制。掌握各種控件的屬性、事件,正確編寫事件過程代碼和靈活運(yùn)用系統(tǒng)提供的方法,對(duì)使用VBA設(shè)計(jì)應(yīng)用程序是非常必要的。使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法編寫程序時(shí),要按照事件驅(qū)動(dòng)機(jī)制的要求,仔細(xì)分析程序運(yùn)行中可能產(chǎn)生的每一個(gè)事件和對(duì)應(yīng)的方法。如果事件發(fā)生時(shí)需要程序執(zhí)行某些代碼實(shí)現(xiàn)某種功能,則應(yīng)將這些代碼編寫成該事件的過程代碼;如果事件發(fā)生時(shí)不需要執(zhí)行任何代碼,則不必為這些事件編寫過程代碼,程序運(yùn)行時(shí)系統(tǒng)將忽略這些事件,事件發(fā)生時(shí)也不會(huì)有任何反應(yīng)。2、程序的事件驅(qū)動(dòng)機(jī)制3、Access事件事件是一些操作,事件發(fā)生一般是由操作界用面觸發(fā)的,如單擊、雙擊或按下鍵盤上的鍵。此時(shí),該項(xiàng)操作產(chǎn)生消息通知Access系統(tǒng),讓數(shù)據(jù)庫(kù)知道發(fā)生了什么事情,Access系統(tǒng)根據(jù)發(fā)生事件的種類來決定如何處理—執(zhí)行宏或VBA代碼。Access事件只存在于窗體和報(bào)表中,如窗體的打開、關(guān)閉會(huì)產(chǎn)生事件。窗體和報(bào)表都有各自的事件,窗體和報(bào)表中的每個(gè)控件也都有各自的事件。為滿足精確控制系統(tǒng)運(yùn)行的需要,事件非常多。而大部分的事件不需要用戶干預(yù),Access按默認(rèn)的方法處理事件。為了提高系統(tǒng)的功能,可為少量的事件定義自己的處理方法,定義宏或編寫VBA代碼。Access事件分成8類,如表7-8所示。7.3.3VBA對(duì)象設(shè)計(jì)的常見操作1、打開對(duì)象的操作1)打開窗體操作【格式】DoCmd.OpenFormformname[,view][,filtername][,wherecondition][,datamode][,windowmode][,openargs](2)打開報(bào)表操作【格式】DoCmd.OpenReportreportname[,view][,filtername][,wherecondition]【說明】格式中的參數(shù)說明如表7-10所示。例:預(yù)覽名為“學(xué)生基本情況表”的報(bào)表的操作。DoCmd.OpenReport“stuinf”,acViewPreview2、關(guān)閉對(duì)象的操作【格式】DoCmd.Close[objecttype,objectname],[save]3、VBA編程驗(yàn)證數(shù)據(jù)P261【例7-13】4、計(jì)時(shí)事件VB中提供Timer時(shí)間控件可以實(shí)現(xiàn)“定時(shí)”功能。但VBA并沒有直接提供Timer時(shí)間控件,而是通過設(shè)置窗體的“計(jì)時(shí)器間隔(TimerInterval)”屬性與添加“計(jì)時(shí)器觸發(fā)(Timer)”事件來完成類似“定時(shí)”功能。其處理過程是:Timer事件每隔TimerInterval時(shí)間間隔就會(huì)被激發(fā)一次,并運(yùn)行Timer事件過程來響應(yīng)。這樣重復(fù)不斷,即實(shí)現(xiàn)“定時(shí)”處理功能。P262【例7-14】,P263【例7-15】5、鼠標(biāo)和鍵盤事件處理6、用代碼設(shè)置Access選項(xiàng)(1)鼠標(biāo)操作(2)鍵盤操作P266【例7-16】Access系統(tǒng)環(huán)境有許多選項(xiàng)設(shè)定(工具/選項(xiàng)菜單項(xiàng)),值不同會(huì)產(chǎn)生不同的效果。比如當(dāng)程序中執(zhí)行某個(gè)操作查詢(更新、刪除、追加、生成表)時(shí),有些環(huán)境會(huì)彈出一些惱人的提示信息要求確認(rèn)等。所有選項(xiàng)設(shè)定均可在Access環(huán)境下靜態(tài)設(shè)置,也可以在VBA代碼里動(dòng)態(tài)設(shè)置。其語法為:Application.SetOption(OptionName,Setting)P266【例7-17】7.4.1宏、模塊和VBA
7.4模塊的基本概念雖然宏很好用,但它運(yùn)行的速度比較慢,也不能直接運(yùn)行很多Windows程序。尤其是不能自定義一些函數(shù),這樣當(dāng)我們要對(duì)某些數(shù)據(jù)進(jìn)行一些特殊的分析時(shí),它就無能為力了。由于宏具有這些局限性,所以在給數(shù)據(jù)庫(kù)設(shè)計(jì)一些特殊的功能時(shí),需要用到“模塊”對(duì)象來實(shí)現(xiàn),而這些“模塊”都是由VBA語言來實(shí)現(xiàn)的。使用它編寫程序,然后將這些程序編譯成擁有特定功能的“模塊”,以便在Access中調(diào)用。VisualBasic,就是微軟公司推出的可視化BASIC語言,用它來編程非常簡(jiǎn)單。因?yàn)樗?jiǎn)單,而且功能強(qiáng)大,所以微軟公司將它的一部分代碼結(jié)合到Office中,形成我們今天所說的VBA。它的很多語法繼承了VisualBasic,所以我們可以像編寫VisualBasic語言那樣來編寫VBA程序,以實(shí)現(xiàn)某個(gè)功能。當(dāng)這段程序編譯通過以后,將這段程序保存在Access中的一個(gè)模塊里,并通過類似在窗體中激發(fā)宏的操作那樣來啟動(dòng)這個(gè)“模塊”,從而實(shí)現(xiàn)相應(yīng)的功能。“模塊”和“宏”的使用方法差不多。其實(shí)Access中的“宏”也可以存成“模塊”,這樣運(yùn)行起來速度還會(huì)更快呢。“宏”的每個(gè)基本操作在VBA中都有相應(yīng)的等效語句,使用這些語句就可以實(shí)現(xiàn)所有單獨(dú)“宏”命令,所以VBA的功能是非常強(qiáng)大的。如果你要用Access來完成一個(gè)復(fù)雜的桌面數(shù)據(jù)庫(kù)系統(tǒng),你就應(yīng)該掌握VBA,它可以幫助用戶實(shí)現(xiàn)很多功能。但如果你只是偶爾使用一下Access或者只是用Access來做一些簡(jiǎn)單的工作,那么只要簡(jiǎn)單了解一下它就可以了。1.類模塊2.標(biāo)準(zhǔn)模塊類模塊是可以定義新對(duì)象的模塊。新建一個(gè)類模塊,也就是創(chuàng)建了一個(gè)新對(duì)象。模塊中定義的過程將變成該對(duì)象的屬性或方法。類模塊可以獨(dú)立存在,也可以與窗體或報(bào)表同時(shí)出現(xiàn)。標(biāo)準(zhǔn)模塊包括通用過程和常用過程,它們不與任何對(duì)象相關(guān)聯(lián),并且可以在數(shù)據(jù)庫(kù)中的任何位置運(yùn)行。標(biāo)準(zhǔn)模塊一般用于存放供其他對(duì)象使用的公共變量或過程,也可以定義私有變量或私有過程僅供本模塊使用。7.4.2模塊的分類7.4.3創(chuàng)建模塊模塊中包含有各種各樣的函數(shù)與過程。一般的模塊不能調(diào)用,只有類模塊才能在設(shè)計(jì)中調(diào)用。如果想調(diào)用一般模塊中的過程或者函數(shù),可以在該模塊中編寫過程或函數(shù)的時(shí)候,將該過程或函數(shù)定義為公共對(duì)象。下面介紹模塊和過程的創(chuàng)建。在Access中,模塊是Access的一個(gè)對(duì)象,它由過程組成,而過程的代碼必須由程序員或用戶以“手動(dòng)”方式編寫。P268【例7-18】7.4.4創(chuàng)建過程Sub過程是執(zhí)行一系列操作的過程,以關(guān)鍵字Sub開始,并以EndSub結(jié)束。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人工智能與醫(yī)學(xué)的融合創(chuàng)新
- 手術(shù)室恢復(fù)室護(hù)理
- 禹城公務(wù)員試題及答案
- 用藥法律法規(guī)試題及答案
- 銀行運(yùn)管條線面試題目及答案
- 銀行崗位筆試題庫(kù)及答案
- 醫(yī)院安全消防試題及答案
- 2025年蘇教版數(shù)學(xué)六年級(jí)下冊(cè)期末測(cè)試題及答案(典型題)(六)
- 煙臺(tái)歷年公務(wù)員面試題及答案
- 學(xué)校消防測(cè)試題及答案
- 中層干部管理能力提升課件
- 二手房買賣意向合同協(xié)議
- 餐飲員工手冊(cè)和規(guī)章制度
- 初中數(shù)學(xué)90學(xué)時(shí)培訓(xùn)總結(jié)三篇
- 2024年南京市鼓樓區(qū)小升初英語考試題庫(kù)及答案解析
- 2018年年歷表(農(nóng)歷節(jié)日A4打印版)
- 2024年度管理評(píng)審會(huì)
- 2024ABB ConVac真空接觸器安裝說明書
- 衛(wèi)星通信與移動(dòng)通信技術(shù)融合與應(yīng)用
- 醫(yī)院死亡證明培訓(xùn)課件
- 第一套太極功夫扇扇譜
評(píng)論
0/150
提交評(píng)論