版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1第8章模塊與VBA編程
模塊是Access數(shù)據(jù)庫的一個重要對象,它以VBA語言為基礎(chǔ),以函數(shù)過程或子過程為單元的集合方式存儲。
2本章主要內(nèi)容:模塊的基本概念VBA程序設(shè)計基礎(chǔ)創(chuàng)建模塊模塊的調(diào)用及參數(shù)傳遞VBA代碼的運(yùn)行與調(diào)試38.1
VBA編程基礎(chǔ)VBA(VisualBasicforApplications)是廣泛流行的可視化應(yīng)用程序開發(fā)語言VB(VisualBasic)的子集
VB語言開發(fā)系統(tǒng)是獨(dú)立運(yùn)行的開發(fā)環(huán)境,它創(chuàng)建的應(yīng)用程序可以獨(dú)立運(yùn)行在Windows平臺上; 而VBA其編程環(huán)境和VBA程序都必須依賴Office應(yīng)用程序(如Access、Word、Excel等)。48.1.1面向?qū)ο蟪绦蛟O(shè)計基本概念1.對象和類(1)對象
在面向?qū)ο蟮某绦蛟O(shè)計中,對象是基本元素。在VBA中進(jìn)行程序設(shè)計時,界面上的所有事物都可以被稱為對象(2)對象的屬性屬性就是對象的物理性質(zhì)、特征 屬性值可以在創(chuàng)建對象時設(shè)置,也可以在執(zhí)行程序時通過命令的方式修改,其引用方式為:對象名.屬性名稱5(3)對象的方法對象的方法是指對象所固有的、可以完成某種任務(wù)的功能,是對象可以執(zhí)行的動作。調(diào)用格式:對象名.方法名稱(4)對象的事件事件是一種特定操作。在某個對象上發(fā)生或?qū)δ硞€對象發(fā)生。事件可以由用戶觸發(fā),也可以通過系統(tǒng)觸發(fā)。。為了使得對象在某一事件發(fā)生時能夠做出所需要的反應(yīng),就必須針對這一事件編寫相應(yīng)的代碼來完成相應(yīng)的功能。6對象的三要素
屬性、事件和方法構(gòu)成了對象的三要素,其中屬性是對象的靜態(tài)特性,事件和方法是對象的動態(tài)特性。
例如設(shè)有“命令按鈕”控件名為Command1,則描述該控件“高度”、“寬度”等屬性的引用格式為:
Command1.Height,Command1.Width,
“命令按鈕”具有移動方法,其引用格式為:
Command1.Move,
在命令按鈕上單擊鼠標(biāo)時會觸發(fā)“單擊”事件,其事件過程引用格式為:
Command1_Click()。7(5)類類是對一組相似對象的性質(zhì)描述。這些對象具有相同的性質(zhì)、相同種類的屬性以及方法。類是對象的抽象,而對象是類的具體實(shí)例。(6)DoCmd對象
DoCmd對象的主要功能是通過調(diào)用Access內(nèi)置的方法,在VBA中實(shí)現(xiàn)某些特定的操作。例如,利用DoCmd對象的OpenForm方法打開“教師信息維護(hù)”窗體,語句格式為:
DoCmd.OpenForm”教師信息維護(hù)”82.事件過程
在Access數(shù)據(jù)庫系統(tǒng)里,可以通過兩種方式來處理事件響應(yīng):一是使用宏對象來設(shè)置事件屬性;二是為某個事件編寫VBA代碼過程,完成指定動作。這樣的代碼過程稱為事件過程或事件響應(yīng)代碼。98.1.2VBA的編程環(huán)境編寫程序可以利用VisualBasic編輯器(簡稱VBE)。1.啟動VBA編輯器(1)通過事件過程啟動(2)通過模塊對象啟動(3)通過菜單啟動單擊【工具】|【宏】|【VisualBasic編輯器】菜單命令102.認(rèn)識VBE窗口屬性窗口工程資源管理器窗口代碼窗口標(biāo)準(zhǔn)工具欄11屬性窗口對象框?qū)傩粤斜砉こ藤Y源管理器窗口12代碼窗口過程下拉列表框代碼框?qū)ο笙吕斜砜?38.1.3基本數(shù)據(jù)類型數(shù)據(jù)類型關(guān)鍵字類型符占字節(jié)數(shù)取值范圍字符型String$與字符串長度有關(guān)定長字符串:0~65535個字符變長字符串:0~20億個字符字節(jié)型Byte無10~255整型Integer%2-32768~32767長整型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ù)字個數(shù)為0~28貨幣型Currency@8-922337203685477.5808~922337203685477.5807邏輯型Boolean無2True與False日期型Date無801/01/100~12/31/9999對象型Object無4任何對象引用變體型Variant無按需分配
數(shù)據(jù)是程序處理的對象,是程序的必要組成部分。不同類型數(shù)據(jù)的操作方式和取值范圍不同,所占存儲空間的大小也不同。VBA提供了系統(tǒng)定義的標(biāo)準(zhǔn)數(shù)據(jù)類型,并允許用戶根據(jù)需要定義自己的數(shù)據(jù)類型。148.1.4常量、變量與數(shù)組1.常量常量是指不變的數(shù)據(jù)。VBA支持4種類型的常量:直接常量、符號常量、固有常量和系統(tǒng)定義常量。15符號常量符號常量定義的格式為:
Const<常量名>[as<數(shù)據(jù)類型>]=<數(shù)據(jù)>[,...]
說明:格式中尖括號部分為必填內(nèi)容,中括號部分為選填內(nèi)容,[,…]表示之前部分可重復(fù)。例如:ConstPI=3.1415926dayHoursasByte=10163.變量
變量是被命名的內(nèi)存區(qū)域,用以臨時保存程序運(yùn)行過程中需要的數(shù)據(jù)。 變量的命名規(guī)則:
以字母或漢字開頭,后跟字母、漢字、數(shù)字或下劃線組成的序列,長度不能超過255個字符不能使用VB中的關(guān)鍵字不區(qū)分常量或變量名中的大小寫字母顯式聲明變量
Dim<變量名>[As<數(shù)據(jù)類型>][,…]
格式中Dim是一個VBA命令,此處用于定義變量;As是關(guān)鍵字,此處用于指定變量的數(shù)據(jù)類型。
例如:DimxhasInteger174.數(shù)組數(shù)組也是一個被命名的內(nèi)存區(qū)域,數(shù)組中可以包含多個存儲單元,每個存儲單元都被稱為元素,都可存儲數(shù)據(jù),數(shù)組的各元素都應(yīng)存儲相同類型的數(shù)據(jù)。為了識別數(shù)組中不同的元素,數(shù)組元素可以通過下標(biāo)來訪問,數(shù)組下標(biāo)默認(rèn)從0開始。定義數(shù)組。
Dima(9)AsInteger本例定義了一個Integer型數(shù)組,其下標(biāo)默認(rèn)從0開始至9結(jié)束,它的第一個元素被記為a(0),第二個元素被記為a(1),依次類推。即該數(shù)組可存儲10個Integer型數(shù)據(jù)。18二維數(shù)組(略)
前面我們定義的數(shù)組都屬一維數(shù)組,即元素下標(biāo)只有一個。二維數(shù)組元素有兩個下標(biāo),它相當(dāng)于一張由行和列組成的二維表格,第一維下標(biāo)相當(dāng)于行,第二維下標(biāo)相當(dāng)于列。我們這樣定義二維數(shù)組。
Dimb(2,3)AsSingle
二維數(shù)組sStudents擁有兩個下標(biāo),由于默認(rèn)下標(biāo)從0開始,所以它可以被看成一個3行、4列的表格。19動態(tài)數(shù)組(略)
在定義數(shù)組時不指定下標(biāo),而在程序運(yùn)行需要時再指定,即數(shù)組元素的數(shù)量是可動態(tài)改變的,這種數(shù)組被稱作動態(tài)數(shù)組。假定我們想用數(shù)組sAges存儲某班級學(xué)生的年齡,由于各班級的學(xué)生數(shù)量可能不同,因此我們在定義數(shù)組時不便指定數(shù)組大小,當(dāng)班級學(xué)生數(shù)量確定后我們再指定數(shù)組的大?。磾?shù)組下標(biāo)范圍)。注意:在定義常量、變量或數(shù)組時,如果未指定變量類型,系統(tǒng)默認(rèn)為Variant型數(shù)據(jù)。208.1.5運(yùn)算符與表達(dá)式表達(dá)式表達(dá)式是由常量、變量、函數(shù)、運(yùn)算符和圓括號等構(gòu)成。VBA提供了豐富的運(yùn)算符,其中包括算術(shù)運(yùn)算符、連接運(yùn)算符、比較運(yùn)算符和邏輯運(yùn)算符等。參與運(yùn)算的數(shù)據(jù)被稱作操作數(shù)。運(yùn)算符和操作數(shù)據(jù)構(gòu)成表達(dá)式。218.1.6常用標(biāo)準(zhǔn)函數(shù)函數(shù)是VBA內(nèi)置的具有某種功能的特殊程序。它就象一只黑匣子,接收外部輸入的數(shù)據(jù)并向外部返回一個處理結(jié)果。函數(shù)的使用格式為:
函數(shù)名(參數(shù)[,…])
如:Right(“abcdef”,2)
下面的函數(shù)功能恰好與它相反。如:Left("山東交通學(xué)院",2)
228.1.7輸入輸出函數(shù)和過程VBA與用戶之間的直接交互是通過InputBox()函數(shù)、MsgBox()函數(shù)和MsgBox過程進(jìn)行的
例:輸入圓的半徑,然后計算圓的面積。Publicsubmj()constpi=3.1415926dimrasintegerdimsasdoubler=inputbox(“請輸入半徑:”)s=pi*r^2debug.print“面積為:”,sEndsub練習(xí):輸入長方形的長和寬,計算其面積?23VBA語法基礎(chǔ)按照功能不同,VBA語句可以分成三大類:◆聲明語句:如用于變量、符號常量或程序定義的語句;◆執(zhí)行語句:如賦值、程序調(diào)用和實(shí)現(xiàn)流程控制的語句等;◆注釋語句:主要用于為命令行或程序塊進(jìn)行注解說明,此類語句在程序運(yùn)行過程中不會產(chǎn)生任何效果(它不會被執(zhí)行),但在程序設(shè)計過程中適當(dāng)?shù)厥褂米⑨屨Z句有利于提高程序的可讀性。
VBA注釋語句既可以單獨(dú)放置在一行內(nèi),也可以放置在某個語句尾部。248.2VBA的流程控制8.2.1順序控制258.2.2條件語句1.單行結(jié)構(gòu)條件語句格式:If〈條件〉Then〈語句1〉[Else〈語句2〉]endif
功能:如果“條件”成立(其值為True或?yàn)榉?值),則執(zhí)行“語句1”,否則,執(zhí)行“語句2”。例如:Ifx>yThenz=x-yElsez=y–xendif條件語句2語句1TrueFalse26例:輸入學(xué)生的成績并判斷等級,大于等于60分為及格,小于60分為不及格?27例:輸入學(xué)生的成績并判斷等級,小于60分為不及格,60到69分為及格,70到84分為良好,85分以上為優(yōu)秀?282.塊結(jié)構(gòu)條件語句
單行結(jié)構(gòu)條件語句中,如果條件分支執(zhí)行的操作比較復(fù)雜,不能在一行書寫完畢,可以使用塊結(jié)構(gòu)條件語句。塊結(jié)構(gòu)條件語句格式如下:
If〈條件1〉Then
〈語句塊1〉
[ElseIf〈條件2〉Then
〈語句塊2〉]
[ElseIf〈條件3〉Then
〈語句塊3〉]
……
[Else
〈語句塊n〉]
EndIf29課外練習(xí)1.某公司員工工資計算規(guī)則如下:正常工作工資每小時50元,月工作時間少于100小時的扣1000元,月工作時間超過160小時的,超過部分加發(fā)50%的工資;設(shè)計一程序輸入某員工的職工號及工作時間計算該員工的工資。303.多分支結(jié)構(gòu)
在VBA中,使用情況語句實(shí)現(xiàn)多路分支程序設(shè)計,比用If語句更為簡單和結(jié)構(gòu)清晰。其一般格式為:
SelectCase〈測試表達(dá)式〉
Case〈表達(dá)式表列1〉
〈語句塊1〉]
[Case〈表達(dá)式表列2〉
〈語句塊2〉]
…
[CaseElse
〈語句塊n+1〉]
EndSelect
條件1語句塊2語句塊1TF條件2條件n語句塊n語句塊n+1TTFF318.2.3循環(huán)語句輸出5次“ok”?輸出20次”ok”?328.2.3循環(huán)語句
1.Do…Loop循環(huán)格式1:Dowhile條件
[<循環(huán)體>] [ExitDo]Loop338.2.3循環(huán)語句輸出5次ok?PublicSubok()DimnAsIntegern=1DoWhilen<=5Debug.Print"ok",nn=n+1LoopEndSub348.2.3循環(huán)語句求1到5的和?求1到100的和?求1到100的奇數(shù)和?求1到100的偶數(shù)和?358.2.3循環(huán)語句求1到100的奇數(shù)和?PublicSubQHJS()DimnAsIntegerDimsasintegern=1s=0DoWhilen<=99s=s+nn=n+2Loopdebug.printsEndSub368.2.3循環(huán)語句2.For-Next循環(huán)For<循環(huán)變量>=<初值>to<終值>[step<步長>][<循環(huán)體>][Exitfor]Next[<循環(huán)變量>]378.2.3循環(huán)語句2.For-Next循環(huán)【例】計算1+2+3+4+……+99+100的和。[分析]累加數(shù)據(jù)初值為1,終值為100,步長(數(shù)據(jù)間遞變)為1,利用For/Next結(jié)構(gòu)很容易實(shí)現(xiàn)它。程序代碼如下。SubEx8_10()DimnAsInteger,SAsIntegerS=0'S存儲數(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]之間同時滿足除以8余6,除以6余4,除以4余2的整數(shù)之和。從左至右或從有至左讀起來都一樣的數(shù)稱為回文數(shù),如1221,343;求1000-9999之間,回文數(shù)之和。編寫程序,統(tǒng)計200~4000之間的所有滿足各位數(shù)字之積為42,各位數(shù)字之和為12的數(shù)的個數(shù)。40循環(huán)嵌套分析程序的輸出結(jié)果?PublicSubok()Dima,bAsIntegerfora=1to4forb=1to5Debug.Printa,bnextnextEndSub41循環(huán)嵌套用100元兌換成5元、2元、1元的零錢紙幣,共30張,可以有多少種兌換方法?PublicSubok()Dimx,y,zAsIntegern=0forx=0to20fory=0to50forz=0to100if5*x+2*y+1*z=100thenn=n+1endifnextnextnextdebug.print“總共有:”,n,”種兌換方法”EndSub42課外練習(xí)1.[100,5000]之間同時滿足除以8余6,除以6余4,除以4余2的整數(shù)之和。2.一球從100米的高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第15次落地時,共經(jīng)過多少米?3求當(dāng)n=100時下式的和:s=1+(1+2)+(1+2+3)+......+(1+2+3+......+n)。4.有15個學(xué)生一起買小吃,共花錢40元,其中每個大學(xué)生花3元,每個中學(xué)生花2元,每個小學(xué)生花1元,問大、中、小學(xué)生的人數(shù)分配共有多少種不同的解(去掉某類學(xué)生數(shù)為0的解)?5.從左至右或從有至左讀起來都一樣的數(shù)稱為回文數(shù),如1221,343;求1000-9999之間,回文數(shù)之和及個數(shù)。43課外練習(xí)6.求1!+2!+3!+...+9!,9!表示9的階乘。7.求20000以內(nèi)所有完數(shù)之和,"完數(shù)"是指:一個數(shù)如果剛好與它所有的真因子(不包括該數(shù)本身)之和相等,如:6=1+2+3,則6就是一個完數(shù)(難)。8.求出[2,1000]以內(nèi)的素數(shù)數(shù)目(難)。9.求出[2,1000]以內(nèi)的所有素數(shù)之和(難)。44課外練習(xí)1.[100,5000]之間同時滿足除以8余6,除以6余4,除以4余2的整數(shù)之和。從左至右或從有至左讀起來都一樣的數(shù)稱為回文數(shù),如1221,343;求1000-9999之間,回文數(shù)之和。編寫程序,統(tǒng)計200~4000之間的所有滿足各位數(shù)字之積為42,各位數(shù)字之和為12的數(shù)的個數(shù)。458.3創(chuàng)建VBA模塊
8.3.1類模塊與標(biāo)準(zhǔn)模塊模塊是VBA代碼組織形式,可分為以下兩類:
◆類模塊
◆標(biāo)準(zhǔn)模塊。
46模塊管理478.3.2子過程與函數(shù)過程VBA應(yīng)用程序是由事件過程和通用過程組成的,其中通用過程分為Sub過程(子過程)和Function過程(函數(shù)過程)。
1.子過程的定義子過程是一系列由Sub和EndSub語句所包含起來的VBA語句,只執(zhí)行一個或多個操作,而不返回數(shù)值。一般語法格式如下:[Static][Private|Public]Sub子過程名([<形參表列>])
語句塊[ExitSub]語句塊
EndSub482.函數(shù)過程的定義
函數(shù)過程通常情況下稱為函數(shù),是一系列由Function和EndFunction語句所包含起來的VBA語句。Function過程和S
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度古董藝術(shù)品搬運(yùn)承包合同規(guī)范4篇
- 2025年度大型設(shè)備出租及運(yùn)營管理服務(wù)協(xié)議4篇
- 二零二五版高效班組承包合作協(xié)議書3篇
- 二零二五年度水產(chǎn)養(yǎng)殖蟲害防治合作協(xié)議4篇
- 2025版婚介行業(yè)勞務(wù)合同范本-愛情橋梁協(xié)議2篇
- 2025年柴油零售連鎖經(jīng)營合同范本4篇
- 2025版木工安全培訓(xùn)與認(rèn)證合同4篇
- 2025版小區(qū)物業(yè)服務(wù)合同模板(含社區(qū)文化活動)3篇
- 二零二四年度招標(biāo)投標(biāo)廉潔承諾書范本與合同簽訂3篇
- 2025年度廚房改造工程安全性能評估合同協(xié)議3篇
- GB/T 45107-2024表土剝離及其再利用技術(shù)要求
- 2024-2025學(xué)年八年級上學(xué)期1月期末物理試題(含答案)
- 商場電氣設(shè)備維護(hù)勞務(wù)合同
- 2023年國家公務(wù)員錄用考試《行測》真題(行政執(zhí)法)及答案解析
- 2024智慧醫(yī)療數(shù)據(jù)字典標(biāo)準(zhǔn)值域代碼
- 年產(chǎn)12萬噸裝配式智能鋼結(jié)構(gòu)項(xiàng)目可行性研究報告模板-立項(xiàng)備案
- 【獨(dú)家揭秘】2024年企業(yè)微信年費(fèi)全解析:9大行業(yè)收費(fèi)標(biāo)準(zhǔn)一覽
- 醫(yī)療器械經(jīng)銷商會議
- 《±1100kV特高壓直流換流變壓器使用技術(shù)條件》
- 《風(fēng)電場項(xiàng)目經(jīng)濟(jì)評價規(guī)范》(NB-T 31085-2016)
- 五年級上冊脫式計算100題及答案
評論
0/150
提交評論