精簡(jiǎn)-第8章模塊與VBA編程_第1頁(yè)
精簡(jiǎn)-第8章模塊與VBA編程_第2頁(yè)
精簡(jiǎn)-第8章模塊與VBA編程_第3頁(yè)
精簡(jiǎn)-第8章模塊與VBA編程_第4頁(yè)
精簡(jiǎn)-第8章模塊與VBA編程_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1第8章模塊與VBA編程

模塊是Access數(shù)據(jù)庫(kù)的一個(gè)重要對(duì)象,它以VBA語(yǔ)言為基礎(chǔ),以函數(shù)過(guò)程或子過(guò)程為單元的集合方式存儲(chǔ)。

2本章主要內(nèi)容:模塊的基本概念VBA程序設(shè)計(jì)基礎(chǔ)創(chuàng)建模塊模塊的調(diào)用及參數(shù)傳遞VBA代碼的運(yùn)行與調(diào)試38.1

VBA編程基礎(chǔ)VBA(VisualBasicforApplications)是廣泛流行的可視化應(yīng)用程序開(kāi)發(fā)語(yǔ)言VB(VisualBasic)的子集

VB語(yǔ)言開(kāi)發(fā)系統(tǒng)是獨(dú)立運(yùn)行的開(kāi)發(fā)環(huán)境,它創(chuàng)建的應(yīng)用程序可以獨(dú)立運(yùn)行在Windows平臺(tái)上; 而VBA其編程環(huán)境和VBA程序都必須依賴(lài)Office應(yīng)用程序(如Access、Word、Excel等)。48.1.1面向?qū)ο蟪绦蛟O(shè)計(jì)基本概念1.對(duì)象和類(lèi)(1)對(duì)象

在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,對(duì)象是基本元素。在VBA中進(jìn)行程序設(shè)計(jì)時(shí),界面上的所有事物都可以被稱(chēng)為對(duì)象(2)對(duì)象的屬性屬性就是對(duì)象的物理性質(zhì)、特征 屬性值可以在創(chuàng)建對(duì)象時(shí)設(shè)置,也可以在執(zhí)行程序時(shí)通過(guò)命令的方式修改,其引用方式為:對(duì)象名.屬性名稱(chēng)5(3)對(duì)象的方法對(duì)象的方法是指對(duì)象所固有的、可以完成某種任務(wù)的功能,是對(duì)象可以執(zhí)行的動(dòng)作。調(diào)用格式:對(duì)象名.方法名稱(chēng)(4)對(duì)象的事件事件是一種特定操作。在某個(gè)對(duì)象上發(fā)生或?qū)δ硞€(gè)對(duì)象發(fā)生。事件可以由用戶觸發(fā),也可以通過(guò)系統(tǒng)觸發(fā)。。為了使得對(duì)象在某一事件發(fā)生時(shí)能夠做出所需要的反應(yīng),就必須針對(duì)這一事件編寫(xiě)相應(yīng)的代碼來(lái)完成相應(yīng)的功能。6對(duì)象的三要素

屬性、事件和方法構(gòu)成了對(duì)象的三要素,其中屬性是對(duì)象的靜態(tài)特性,事件和方法是對(duì)象的動(dòng)態(tài)特性。

例如設(shè)有“命令按鈕”控件名為Command1,則描述該控件“高度”、“寬度”等屬性的引用格式為:

Command1.Height,Command1.Width,

“命令按鈕”具有移動(dòng)方法,其引用格式為:

Command1.Move,

在命令按鈕上單擊鼠標(biāo)時(shí)會(huì)觸發(fā)“單擊”事件,其事件過(guò)程引用格式為:

Command1_Click()。7(5)類(lèi)類(lèi)是對(duì)一組相似對(duì)象的性質(zhì)描述。這些對(duì)象具有相同的性質(zhì)、相同種類(lèi)的屬性以及方法。類(lèi)是對(duì)象的抽象,而對(duì)象是類(lèi)的具體實(shí)例。(6)DoCmd對(duì)象

DoCmd對(duì)象的主要功能是通過(guò)調(diào)用Access內(nèi)置的方法,在VBA中實(shí)現(xiàn)某些特定的操作。例如,利用DoCmd對(duì)象的OpenForm方法打開(kāi)“教師信息維護(hù)”窗體,語(yǔ)句格式為:

DoCmd.OpenForm”教師信息維護(hù)”82.事件過(guò)程

在Access數(shù)據(jù)庫(kù)系統(tǒng)里,可以通過(guò)兩種方式來(lái)處理事件響應(yīng):一是使用宏對(duì)象來(lái)設(shè)置事件屬性;二是為某個(gè)事件編寫(xiě)VBA代碼過(guò)程,完成指定動(dòng)作。這樣的代碼過(guò)程稱(chēng)為事件過(guò)程或事件響應(yīng)代碼。98.1.2VBA的編程環(huán)境編寫(xiě)程序可以利用VisualBasic編輯器(簡(jiǎn)稱(chēng)VBE)。1.啟動(dòng)VBA編輯器(1)通過(guò)事件過(guò)程啟動(dòng)(2)通過(guò)模塊對(duì)象啟動(dòng)(3)通過(guò)菜單啟動(dòng)單擊【工具】|【宏】|【VisualBasic編輯器】菜單命令102.認(rèn)識(shí)VBE窗口屬性窗口工程資源管理器窗口代碼窗口標(biāo)準(zhǔn)工具欄11屬性窗口對(duì)象框?qū)傩粤斜砉こ藤Y源管理器窗口12代碼窗口過(guò)程下拉列表框代碼框?qū)ο笙吕斜砜?38.1.3基本數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型關(guān)鍵字類(lèi)型符占字節(jié)數(shù)取值范圍字符型String$與字符串長(zhǎng)度有關(guān)定長(zhǎng)字符串:0~65535個(gè)字符變長(zhǎng)字符串:0~20億個(gè)字符字節(jié)型Byte無(wú)10~255整型Integer%2-32768~32767長(zhǎng)整型Long&4-2147483648~2147483647單精度型Single!4負(fù)數(shù):-3.402823E38~-1.401298E-45正數(shù):1.401298E-45~3.402823E38雙精度型Double#8負(fù)數(shù):-1.79769313486231E308~-4.94065645841247E-324正數(shù):4.94065645841247E-324~1.79769313486232E308小數(shù)型Decimal14小數(shù)點(diǎn)右邊的數(shù)字個(gè)數(shù)為0~28貨幣型Currency@8-922337203685477.5808~922337203685477.5807邏輯型Boolean無(wú)2True與False日期型Date無(wú)801/01/100~12/31/9999對(duì)象型Object無(wú)4任何對(duì)象引用變體型Variant無(wú)按需分配

數(shù)據(jù)是程序處理的對(duì)象,是程序的必要組成部分。不同類(lèi)型數(shù)據(jù)的操作方式和取值范圍不同,所占存儲(chǔ)空間的大小也不同。VBA提供了系統(tǒng)定義的標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型,并允許用戶根據(jù)需要定義自己的數(shù)據(jù)類(lèi)型。148.1.4常量、變量與數(shù)組1.常量常量是指不變的數(shù)據(jù)。VBA支持4種類(lèi)型的常量:直接常量、符號(hào)常量、固有常量和系統(tǒng)定義常量。15符號(hào)常量符號(hào)常量定義的格式為:

Const<常量名>[as<數(shù)據(jù)類(lèi)型>]=<數(shù)據(jù)>[,...]

說(shuō)明:格式中尖括號(hào)部分為必填內(nèi)容,中括號(hào)部分為選填內(nèi)容,[,…]表示之前部分可重復(fù)。例如:ConstPI=3.1415926dayHoursasByte=10163.變量

變量是被命名的內(nèi)存區(qū)域,用以臨時(shí)保存程序運(yùn)行過(guò)程中需要的數(shù)據(jù)。 變量的命名規(guī)則:

以字母或漢字開(kāi)頭,后跟字母、漢字、數(shù)字或下劃線組成的序列,長(zhǎng)度不能超過(guò)255個(gè)字符不能使用VB中的關(guān)鍵字不區(qū)分常量或變量名中的大小寫(xiě)字母顯式聲明變量

Dim<變量名>[As<數(shù)據(jù)類(lèi)型>][,…]

格式中Dim是一個(gè)VBA命令,此處用于定義變量;As是關(guān)鍵字,此處用于指定變量的數(shù)據(jù)類(lèi)型。

例如:DimxhasInteger174.數(shù)組數(shù)組也是一個(gè)被命名的內(nèi)存區(qū)域,數(shù)組中可以包含多個(gè)存儲(chǔ)單元,每個(gè)存儲(chǔ)單元都被稱(chēng)為元素,都可存儲(chǔ)數(shù)據(jù),數(shù)組的各元素都應(yīng)存儲(chǔ)相同類(lèi)型的數(shù)據(jù)。為了識(shí)別數(shù)組中不同的元素,數(shù)組元素可以通過(guò)下標(biāo)來(lái)訪問(wèn),數(shù)組下標(biāo)默認(rèn)從0開(kāi)始。定義數(shù)組。

Dima(9)AsInteger本例定義了一個(gè)Integer型數(shù)組,其下標(biāo)默認(rèn)從0開(kāi)始至9結(jié)束,它的第一個(gè)元素被記為a(0),第二個(gè)元素被記為a(1),依次類(lèi)推。即該數(shù)組可存儲(chǔ)10個(gè)Integer型數(shù)據(jù)。18二維數(shù)組(略)

前面我們定義的數(shù)組都屬一維數(shù)組,即元素下標(biāo)只有一個(gè)。二維數(shù)組元素有兩個(gè)下標(biāo),它相當(dāng)于一張由行和列組成的二維表格,第一維下標(biāo)相當(dāng)于行,第二維下標(biāo)相當(dāng)于列。我們這樣定義二維數(shù)組。

Dimb(2,3)AsSingle

二維數(shù)組sStudents擁有兩個(gè)下標(biāo),由于默認(rèn)下標(biāo)從0開(kāi)始,所以它可以被看成一個(gè)3行、4列的表格。19動(dòng)態(tài)數(shù)組(略)

在定義數(shù)組時(shí)不指定下標(biāo),而在程序運(yùn)行需要時(shí)再指定,即數(shù)組元素的數(shù)量是可動(dòng)態(tài)改變的,這種數(shù)組被稱(chēng)作動(dòng)態(tài)數(shù)組。假定我們想用數(shù)組sAges存儲(chǔ)某班級(jí)學(xué)生的年齡,由于各班級(jí)的學(xué)生數(shù)量可能不同,因此我們?cè)诙x數(shù)組時(shí)不便指定數(shù)組大小,當(dāng)班級(jí)學(xué)生數(shù)量確定后我們?cè)僦付〝?shù)組的大?。磾?shù)組下標(biāo)范圍)。注意:在定義常量、變量或數(shù)組時(shí),如果未指定變量類(lèi)型,系統(tǒng)默認(rèn)為Variant型數(shù)據(jù)。208.1.5運(yùn)算符與表達(dá)式表達(dá)式表達(dá)式是由常量、變量、函數(shù)、運(yùn)算符和圓括號(hào)等構(gòu)成。VBA提供了豐富的運(yùn)算符,其中包括算術(shù)運(yùn)算符、連接運(yùn)算符、比較運(yùn)算符和邏輯運(yùn)算符等。參與運(yùn)算的數(shù)據(jù)被稱(chēng)作操作數(shù)。運(yùn)算符和操作數(shù)據(jù)構(gòu)成表達(dá)式。218.1.6常用標(biāo)準(zhǔn)函數(shù)函數(shù)是VBA內(nèi)置的具有某種功能的特殊程序。它就象一只黑匣子,接收外部輸入的數(shù)據(jù)并向外部返回一個(gè)處理結(jié)果。函數(shù)的使用格式為:

函數(shù)名(參數(shù)[,…])

如:Right(“abcdef”,2)

下面的函數(shù)功能恰好與它相反。如:Left("山東交通學(xué)院",2)

228.1.7輸入輸出函數(shù)和過(guò)程VBA與用戶之間的直接交互是通過(guò)InputBox()函數(shù)、MsgBox()函數(shù)和MsgBox過(guò)程進(jìn)行的

例:輸入圓的半徑,然后計(jì)算圓的面積。Publicsubmj()constpi=3.1415926dimrasintegerdimsasdoubler=inputbox(“請(qǐng)輸入半徑:”)s=pi*r^2debug.print“面積為:”,sEndsub練習(xí):輸入長(zhǎng)方形的長(zhǎng)和寬,計(jì)算其面積?23VBA語(yǔ)法基礎(chǔ)按照功能不同,VBA語(yǔ)句可以分成三大類(lèi):◆聲明語(yǔ)句:如用于變量、符號(hào)常量或程序定義的語(yǔ)句;◆執(zhí)行語(yǔ)句:如賦值、程序調(diào)用和實(shí)現(xiàn)流程控制的語(yǔ)句等;◆注釋語(yǔ)句:主要用于為命令行或程序塊進(jìn)行注解說(shuō)明,此類(lèi)語(yǔ)句在程序運(yùn)行過(guò)程中不會(huì)產(chǎn)生任何效果(它不會(huì)被執(zhí)行),但在程序設(shè)計(jì)過(guò)程中適當(dāng)?shù)厥褂米⑨屨Z(yǔ)句有利于提高程序的可讀性。

VBA注釋語(yǔ)句既可以單獨(dú)放置在一行內(nèi),也可以放置在某個(gè)語(yǔ)句尾部。248.2VBA的流程控制8.2.1順序控制258.2.2條件語(yǔ)句1.單行結(jié)構(gòu)條件語(yǔ)句格式:If〈條件〉Then〈語(yǔ)句1〉[Else〈語(yǔ)句2〉]endif

功能:如果“條件”成立(其值為T(mén)rue或?yàn)榉?值),則執(zhí)行“語(yǔ)句1”,否則,執(zhí)行“語(yǔ)句2”。例如:Ifx>yThenz=x-yElsez=y–xendif條件語(yǔ)句2語(yǔ)句1TrueFalse26例:輸入學(xué)生的成績(jī)并判斷等級(jí),大于等于60分為及格,小于60分為不及格?27例:輸入學(xué)生的成績(jī)并判斷等級(jí),小于60分為不及格,60到69分為及格,70到84分為良好,85分以上為優(yōu)秀?282.塊結(jié)構(gòu)條件語(yǔ)句

單行結(jié)構(gòu)條件語(yǔ)句中,如果條件分支執(zhí)行的操作比較復(fù)雜,不能在一行書(shū)寫(xiě)完畢,可以使用塊結(jié)構(gòu)條件語(yǔ)句。塊結(jié)構(gòu)條件語(yǔ)句格式如下:

If〈條件1〉Then

〈語(yǔ)句塊1〉

[ElseIf〈條件2〉Then

〈語(yǔ)句塊2〉]

[ElseIf〈條件3〉Then

〈語(yǔ)句塊3〉]

……

[Else

〈語(yǔ)句塊n〉]

EndIf29課外練習(xí)1.某公司員工工資計(jì)算規(guī)則如下:正常工作工資每小時(shí)50元,月工作時(shí)間少于100小時(shí)的扣1000元,月工作時(shí)間超過(guò)160小時(shí)的,超過(guò)部分加發(fā)50%的工資;設(shè)計(jì)一程序輸入某員工的職工號(hào)及工作時(shí)間計(jì)算該員工的工資。303.多分支結(jié)構(gòu)

在VBA中,使用情況語(yǔ)句實(shí)現(xiàn)多路分支程序設(shè)計(jì),比用If語(yǔ)句更為簡(jiǎn)單和結(jié)構(gòu)清晰。其一般格式為:

SelectCase〈測(cè)試表達(dá)式〉

Case〈表達(dá)式表列1〉

〈語(yǔ)句塊1〉]

[Case〈表達(dá)式表列2〉

〈語(yǔ)句塊2〉]

[CaseElse

〈語(yǔ)句塊n+1〉]

EndSelect

條件1語(yǔ)句塊2語(yǔ)句塊1TF條件2條件n語(yǔ)句塊n語(yǔ)句塊n+1TTFF318.2.3循環(huán)語(yǔ)句輸出5次“ok”?輸出20次”ok”?328.2.3循環(huán)語(yǔ)句

1.Do…Loop循環(huán)格式1:Dowhile條件

[<循環(huán)體>] [ExitDo]Loop338.2.3循環(huán)語(yǔ)句輸出5次ok?PublicSubok()DimnAsIntegern=1DoWhilen<=5Debug.Print"ok",nn=n+1LoopEndSub348.2.3循環(huán)語(yǔ)句求1到5的和?求1到100的和?求1到100的奇數(shù)和?求1到100的偶數(shù)和?358.2.3循環(huán)語(yǔ)句求1到100的奇數(shù)和?PublicSubQHJS()DimnAsIntegerDimsasintegern=1s=0DoWhilen<=99s=s+nn=n+2Loopdebug.printsEndSub368.2.3循環(huán)語(yǔ)句2.For-Next循環(huán)For<循環(huán)變量>=<初值>to<終值>[step<步長(zhǎng)>][<循環(huán)體>][Exitfor]Next[<循環(huán)變量>]378.2.3循環(huán)語(yǔ)句2.For-Next循環(huán)【例】計(jì)算1+2+3+4+……+99+100的和。[分析]累加數(shù)據(jù)初值為1,終值為100,步長(zhǎng)(數(shù)據(jù)間遞變)為1,利用For/Next結(jié)構(gòu)很容易實(shí)現(xiàn)它。程序代碼如下。SubEx8_10()DimnAsInteger,SAsIntegerS=0'S存儲(chǔ)數(shù)據(jù)累加之和

Forn=1To100Step1S=S+nNextDebug.Print"S="&SEndSub38For-Next循環(huán)求1到100的奇數(shù)和?求1到100的偶數(shù)和?求1到10000被5整除但不能被7整除的數(shù)的和?39課外練習(xí)1.[100,5000]之間同時(shí)滿足除以8余6,除以6余4,除以4余2的整數(shù)之和。從左至右或從有至左讀起來(lái)都一樣的數(shù)稱(chēng)為回文數(shù),如1221,343;求1000-9999之間,回文數(shù)之和。編寫(xiě)程序,統(tǒng)計(jì)200~4000之間的所有滿足各位數(shù)字之積為42,各位數(shù)字之和為12的數(shù)的個(gè)數(shù)。40循環(huán)嵌套分析程序的輸出結(jié)果?PublicSubok()Dima,bAsIntegerfora=1to4forb=1to5Debug.Printa,bnextnextEndSub41循環(huán)嵌套用100元兌換成5元、2元、1元的零錢(qián)紙幣,共30張,可以有多少種兌換方法?PublicSubok()Dimx,y,zAsIntegern=0forx=0to20fory=0to50forz=0to100if5*x+2*y+1*z=100thenn=n+1endifnextnextnextdebug.print“總共有:”,n,”種兌換方法”EndSub42課外練習(xí)1.[100,5000]之間同時(shí)滿足除以8余6,除以6余4,除以4余2的整數(shù)之和。2.一球從100米的高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第15次落地時(shí),共經(jīng)過(guò)多少米?3求當(dāng)n=100時(shí)下式的和:s=1+(1+2)+(1+2+3)+......+(1+2+3+......+n)。4.有15個(gè)學(xué)生一起買(mǎi)小吃,共花錢(qián)40元,其中每個(gè)大學(xué)生花3元,每個(gè)中學(xué)生花2元,每個(gè)小學(xué)生花1元,問(wèn)大、中、小學(xué)生的人數(shù)分配共有多少種不同的解(去掉某類(lèi)學(xué)生數(shù)為0的解)?5.從左至右或從有至左讀起來(lái)都一樣的數(shù)稱(chēng)為回文數(shù),如1221,343;求1000-9999之間,回文數(shù)之和及個(gè)數(shù)。43課外練習(xí)6.求1!+2!+3!+...+9!,9!表示9的階乘。7.求20000以?xún)?nèi)所有完數(shù)之和,"完數(shù)"是指:一個(gè)數(shù)如果剛好與它所有的真因子(不包括該數(shù)本身)之和相等,如:6=1+2+3,則6就是一個(gè)完數(shù)(難)。8.求出[2,1000]以?xún)?nèi)的素?cái)?shù)數(shù)目(難)。9.求出[2,1000]以?xún)?nèi)的所有素?cái)?shù)之和(難)。44課外練習(xí)1.[100,5000]之間同時(shí)滿足除以8余6,除以6余4,除以4余2的整數(shù)之和。從左至右或從有至左讀起來(lái)都一樣的數(shù)稱(chēng)為回文數(shù),如1221,343;求1000-9999之間,回文數(shù)之和。編寫(xiě)程序,統(tǒng)計(jì)200~4000之間的所有滿足各位數(shù)字之積為42,各位數(shù)字之和為12的數(shù)的個(gè)數(shù)。458.3創(chuàng)建VBA模塊

8.3.1類(lèi)模塊與標(biāo)準(zhǔn)模塊模塊是VBA代碼組織形式,可分為以下兩類(lèi):

◆類(lèi)模塊

◆標(biāo)準(zhǔn)模塊。

46模塊管理478.3.2子過(guò)程與函數(shù)過(guò)程VBA應(yīng)用程序是由事件過(guò)程和通用過(guò)程組成的,其中通用過(guò)程分為Sub過(guò)程(子過(guò)程)和Function過(guò)程(函數(shù)過(guò)程)。

1.子過(guò)程的定義子過(guò)程是一系列由Sub和EndSub語(yǔ)句所包含起來(lái)的VBA語(yǔ)句,只執(zhí)行一個(gè)或多個(gè)操作,而不返回?cái)?shù)值。一般語(yǔ)法格式如下:[Static][Private|Public]Sub子過(guò)程名([<形參表列>])

語(yǔ)句塊[ExitSub]語(yǔ)句塊

EndSub482.函數(shù)過(guò)程的定義

函數(shù)過(guò)程通常情況下稱(chēng)為函數(shù),是一系列由Function和EndFunction語(yǔ)句所包含起來(lái)的VBA語(yǔ)句。Function過(guò)程和S

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論