數(shù)據(jù)庫(kù)原理及應(yīng)用課件:第5章-ACCESS-數(shù)據(jù)庫(kù)-面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言(VBA)_第1頁(yè)
數(shù)據(jù)庫(kù)原理及應(yīng)用課件:第5章-ACCESS-數(shù)據(jù)庫(kù)-面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言(VBA)_第2頁(yè)
數(shù)據(jù)庫(kù)原理及應(yīng)用課件:第5章-ACCESS-數(shù)據(jù)庫(kù)-面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言(VBA)_第3頁(yè)
數(shù)據(jù)庫(kù)原理及應(yīng)用課件:第5章-ACCESS-數(shù)據(jù)庫(kù)-面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言(VBA)_第4頁(yè)
數(shù)據(jù)庫(kù)原理及應(yīng)用課件:第5章-ACCESS-數(shù)據(jù)庫(kù)-面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言(VBA)_第5頁(yè)
已閱讀5頁(yè),還剩76頁(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)介

數(shù)據(jù)庫(kù)原理與應(yīng)用第5章ACCESS數(shù)據(jù)庫(kù)—面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言(VBA)10/17/20241本節(jié)要求理解VBA編程基礎(chǔ)的基本概念。掌握創(chuàng)建和設(shè)計(jì)VBA程序。掌握程序的三種控制結(jié)構(gòu)。掌握VBA中的過(guò)程。了解VBA程序調(diào)試與運(yùn)行。10/17/202425.8面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言—VBA1、VBA編程的基本概念

VBA(VisualBasicforApplications)是在office中開(kāi)發(fā)高級(jí)應(yīng)用所使用的一個(gè)通用程序語(yǔ)言,它可以共享microsoft各種相關(guān)的重要軟件。面向?qū)ο蟮木幊趟枷耄私猓好嫦驅(qū)ο蠹夹g(shù)(OOP)是一種新的軟件開(kāi)發(fā)技術(shù),其概念來(lái)源于程序設(shè)計(jì)。是一種以對(duì)象為基礎(chǔ),以事件或消息來(lái)驅(qū)動(dòng)對(duì)象執(zhí)行處理的程序設(shè)計(jì)技術(shù)。10/17/20243(1)面向?qū)ο蠡靖拍蠲嫦驅(qū)ο蠹夹g(shù)以數(shù)據(jù)為中心而不是以功能為中心來(lái)描述系統(tǒng),數(shù)據(jù)相對(duì)于功能而言更具有穩(wěn)定性。它將數(shù)據(jù)和對(duì)數(shù)據(jù)的操作封裝在一起,作為一個(gè)整體來(lái)處理,采用數(shù)據(jù)抽象和信息隱蔽技術(shù),將這個(gè)整體抽象成一種新的數(shù)據(jù)類型—類。類(Class)—是創(chuàng)建對(duì)象的模板,是一組具有相同屬性和行為的對(duì)象的集合,它在整體上代表一組對(duì)象,它為屬于該類的全部對(duì)象提供了統(tǒng)一屬性和行為兩個(gè)主要部分的抽象描述。10/17/20244對(duì)象(Object)—是類的一個(gè)實(shí)例,是組成一個(gè)系統(tǒng)的基本邏輯單元,是具有某些特征的具體的事物的抽象。每個(gè)對(duì)象都具有屬性和行為。數(shù)據(jù)抽象(DataAbstraction)—指僅表現(xiàn)核心的特性而不描述背景細(xì)節(jié)的行為。繼承(Inheritance)—是可以讓某個(gè)類型的對(duì)象獲得另一個(gè)類型的對(duì)象的屬性的方法。10/17/20245動(dòng)態(tài)綁定(DynamicBinding)—給定的過(guò)程調(diào)用相關(guān)聯(lián)的代碼只有在運(yùn)行期才可知。數(shù)據(jù)封裝(DataEncapsulation)—把數(shù)據(jù)和函數(shù)包裝在一個(gè)單獨(dú)的單元(類)的行為。多態(tài)性(Polymorphism)—事物具有不同形式的能力。消息傳遞(MessagePassing)—一個(gè)面向?qū)ο蟮某绦蛴稍S多對(duì)象組成,這些對(duì)象之間需要相互溝通。10/17/20246事件及事件驅(qū)動(dòng)事件

—是一個(gè)對(duì)象可以辨認(rèn)的動(dòng)作,如單擊鼠標(biāo)或按下某鍵等,并且可以寫某些代碼針對(duì)此動(dòng)作來(lái)作響應(yīng)。事件過(guò)程

—是為響應(yīng)由用戶或程序代碼引發(fā)的事件或由系統(tǒng)觸發(fā)的事件而運(yùn)行的過(guò)程。10/17/20247(2)對(duì)象的引用(掌握)在面向?qū)ο蟪绦蛟O(shè)計(jì)中,經(jīng)常要引用對(duì)象的屬性、事件和方法。VB中一般引用格式如下:[<集合名>!][<對(duì)象名>.]<屬性名>|<方法名>[<參數(shù)名表>]其中:!運(yùn)算符用來(lái)指定隨后出現(xiàn)的是用戶定義項(xiàng),例如,使用!運(yùn)算符可以引用一個(gè)打開(kāi)著的窗體、報(bào)表以及窗體或報(bào)表上的控件。.(點(diǎn))運(yùn)算符通常用來(lái)指出隨后出現(xiàn)的是Access定義的項(xiàng),例如引用窗體、報(bào)表或控件的屬性。10/17/202481、VBA程序設(shè)計(jì)基礎(chǔ)VBA與VB的區(qū)別:VB是以界面為中心的開(kāi)發(fā)方式,重點(diǎn)是在使用者如何進(jìn)行操作;而VBA是以文件為中心的開(kāi)發(fā)方式,重點(diǎn)是在使用者最后看到什么。什么時(shí)候使用宏:對(duì)于簡(jiǎn)單的細(xì)節(jié)工作通常使用宏,例如,打開(kāi)或關(guān)閉窗體、報(bào)表等。另外,在首次打開(kāi)數(shù)據(jù)庫(kù)時(shí)執(zhí)行的一個(gè)或一系列操作也必須用宏來(lái)完成。10/17/20249什么時(shí)候使用VBA?1)使用內(nèi)置函數(shù)或自行創(chuàng)建函數(shù);2)處理錯(cuò)誤消息;3)創(chuàng)建或處理對(duì)象;4)執(zhí)行系統(tǒng)級(jí)的操作;5)一次處理多條記錄;6)將參數(shù)傳給VBA的過(guò)程。10/17/2024101)VBA的編程界面“VisualBasic編輯器”是一個(gè)集程序界面設(shè)計(jì)、代碼編寫、調(diào)試與一體的集成開(kāi)發(fā)環(huán)境。如圖所示標(biāo)題欄:顯示應(yīng)用程序名稱和窗口控制按鈕。菜單欄:通過(guò)選取各菜單項(xiàng)來(lái)完成相應(yīng)的功能。工具欄:提供了對(duì)常用功能的快速調(diào)用,通過(guò)單擊工具欄按鈕,可以完成該按鈕所指定的功能。工程窗口:以樹(shù)狀結(jié)構(gòu)顯示主應(yīng)用程序與模塊及類模塊的完整結(jié)構(gòu),用戶可在工程窗口中直接選擇窗口或模塊,對(duì)其進(jìn)行編輯。屬性窗口:用于顯示窗體上的某個(gè)控件的可見(jiàn)屬性及其默認(rèn)值,通過(guò)該屬性窗口還可以對(duì)可見(jiàn)屬性的值進(jìn)行直接編輯。代碼窗口:用于編寫模塊的過(guò)程代碼。10/17/2024112)VBA的數(shù)據(jù)類型VBA中共定義了12種數(shù)據(jù)類型:字節(jié)型(Byte)1個(gè)字節(jié)邏輯型(Boolean)2個(gè)字節(jié)整型(Integer“%”)2個(gè)字節(jié)長(zhǎng)整型(Long“&”)4個(gè)字節(jié)單精度型(Single“!”)4個(gè)字節(jié)10/17/202412雙精度型(Double“#”)8個(gè)字節(jié)貨幣型(Currency“@”)8個(gè)字節(jié)日期型(Date/Time)8個(gè)字節(jié)字符型(String“$”)所占字節(jié)數(shù)與字符串長(zhǎng)度有關(guān)對(duì)象型(Object)4個(gè)字節(jié)變體型(Variant)根據(jù)分配確定10/17/202413用戶自定義型所占字節(jié)數(shù)與元素個(gè)數(shù)有關(guān),用戶可以使用Type語(yǔ)句定義任何數(shù)據(jù)類型。語(yǔ)法如下:[Private/Public]Type類型名元素名As數(shù)據(jù)類型

…EndType例如:自定義一個(gè)教師的基本信息數(shù)據(jù)類型,其中包括姓名、性別、年齡的信息。10/17/202414PublicTypeTeacherNameAsString*10定義字符串變量存儲(chǔ)一個(gè)名字SexAsString*4定義字符串變量存儲(chǔ)一個(gè)性別AgeAsInteger定義整型變量存儲(chǔ)一個(gè)年齡EndTypeDimTeacherAsTeacher聲明變量10/17/202415引用數(shù)據(jù)Teacher.Name=“張三”Teacher.Sex=“男”Teacher.Age=2610/17/2024163)常量在程序運(yùn)行中其值不變的量叫常量,VB中支持三種類型的常量:符號(hào)常量、固有常量和系統(tǒng)定義常量。符號(hào)常量:需要聲明的常數(shù)都是符號(hào)常量。固有常量:是Access或引用對(duì)象庫(kù)的一部分。系統(tǒng)定義常量:如True和False用于表示邏輯值,Null表示一個(gè)無(wú)效值。10/17/202417符號(hào)常量用戶可以使用自己定義的常量,但在使用之前必須聲明,以便分配內(nèi)存空間。語(yǔ)法如下:

[Public/Private]Const常量名[As數(shù)據(jù)類型]=表達(dá)式

其中Public/Private兩個(gè)關(guān)鍵字分別代表了常量的三個(gè)范圍級(jí)別:過(guò)程級(jí)別和私有模塊級(jí)別用“Private”聲明,公共模塊級(jí)別用“Public”聲明。10/17/202418固有常量固有常量是系統(tǒng)自動(dòng)定義的,可以直接使用。它由應(yīng)用程序列與控件提供。

Access中主要有以下幾類固有常量:操作常量、DAO常量、事件過(guò)程常量、關(guān)鍵字常量、RunCommand方法常量、安全常量、VBA常量和VarType函數(shù)常量。10/17/2024194)變量在程序運(yùn)行過(guò)程中其值可以改變的量叫變量,每個(gè)變量都有一個(gè)名字,程序通過(guò)變量名對(duì)變量進(jìn)行存取操作,VBA中變量不區(qū)分大小寫,可使用兩種方法聲明變量:用Dim語(yǔ)句顯性聲明變量,語(yǔ)法如下:Dim變量名[As類型]例:DimXAsInteger聲明X為整型

另外也可使用隱性聲明,即VB中允許變量不經(jīng)過(guò)聲明就直接使用。10/17/202420變量的作用域 不同級(jí)別的變量有不同的應(yīng)用范圍,通常變量有三個(gè)范圍級(jí)別。過(guò)程級(jí)別在程序中聲明的變量屬于過(guò)程級(jí)別。只有在聲明此變量的過(guò)程中才可以使用的變量稱為局部變量。用戶可以使用Dim或Static關(guān)鍵字來(lái)定義例如:DimaAsintegerStaticbaAssingle10/17/202421私有模塊級(jí)別用戶可以在窗體、報(bào)表和標(biāo)準(zhǔn)模塊頂部的通用聲明區(qū)用Dim或Private定義模塊級(jí)別的變量。由Dim語(yǔ)句在聲明部分所聲明的變量,其范圍默認(rèn)為私有的。私有變量一旦離開(kāi)該程序,這些變量也就消失,別的程序或函數(shù)無(wú)法使用這些變量。公共模塊級(jí)別在模塊的通用聲明區(qū)中以Public聲明的變量。如果一個(gè)變量聲明為公共模塊級(jí),那么它就可以被工程所有過(guò)程調(diào)用。這個(gè)級(jí)的變量,作用范圍最廣、生命周期最長(zhǎng)。10/17/2024222、基本控制結(jié)構(gòu)順序結(jié)構(gòu)

賦值語(yǔ)句賦值語(yǔ)句是程序設(shè)計(jì)中最基本的語(yǔ)句,賦值語(yǔ)句都是順序執(zhí)行的。語(yǔ)句格式:變量名=表達(dá)式選擇結(jié)構(gòu)

VB中提供了多種形式的條件語(yǔ)句實(shí)現(xiàn)選擇結(jié)構(gòu)(或稱分支結(jié)構(gòu)),即對(duì)條件進(jìn)行判斷,根據(jù)判斷結(jié)果,選擇執(zhí)行不同的分支。10/17/2024231)IF條件語(yǔ)句If…Then語(yǔ)句(單分支結(jié)構(gòu))。有兩種形式:塊結(jié)構(gòu)和行結(jié)構(gòu)塊結(jié)構(gòu)形式:If<表達(dá)式>Then

語(yǔ)句塊

EndIf行結(jié)構(gòu)形式:

If<表達(dá)式>Then<語(yǔ)句>說(shuō)明:1)表達(dá)式一般為關(guān)系表達(dá)式、邏輯表達(dá)式,也可以為算術(shù)表達(dá)式,非0為True,0為False。2)語(yǔ)句塊可以是一句或多句,若用行結(jié)構(gòu)來(lái)表示,則只能是一句語(yǔ)句,若多句,語(yǔ)句間需用冒號(hào)隔開(kāi),而且必須在一行上書寫。10/17/202424例:已知兩個(gè)數(shù)x和y,比較它們的大小,使得x大于y。方法一:ifx<ythent=xx=yy=tendif方法二:ifx<ythent=x:x=y:y=t

10/17/202425If…Then…Else語(yǔ)句(雙分支結(jié)構(gòu))。此語(yǔ)句也有兩種形式:塊結(jié)構(gòu)和行結(jié)構(gòu)。塊結(jié)構(gòu)形式:If<表達(dá)式>Then<語(yǔ)句塊1>Else<語(yǔ)句塊2>EndIf行結(jié)構(gòu)形式:

If<表達(dá)式>Then<語(yǔ)句1>Else<語(yǔ)句2>說(shuō)明:雙分支結(jié)構(gòu)能根據(jù)表達(dá)式的判斷結(jié)果來(lái)選擇執(zhí)行的語(yǔ)句塊,當(dāng)表達(dá)式的判斷結(jié)果為真時(shí),則執(zhí)行語(yǔ)句塊1;當(dāng)表達(dá)式的判斷結(jié)果為假時(shí),則執(zhí)行語(yǔ)句塊2。10/17/202426例:求分段函數(shù)的值。代碼如下:IfX<>0thenY=X+1ElseY=X-1EndIf10/17/202427If…Then…ElseIf語(yǔ)句(多分支結(jié)構(gòu))。當(dāng)需要判斷的表達(dá)式多于兩個(gè)時(shí),需要用多分支結(jié)構(gòu)來(lái)完成。代碼如下:If<表達(dá)式1>Then<語(yǔ)句塊1>

ElseIf<表達(dá)式2>Then<語(yǔ)句塊2>…[Else語(yǔ)句塊n+1]EndIf說(shuō)明:1)多分支結(jié)構(gòu)在執(zhí)行時(shí),按著表達(dá)式的先后順序判斷,一旦遇到表達(dá)式的判斷結(jié)果為真時(shí)就執(zhí)行下面的語(yǔ)句塊。2)不管有幾個(gè)分支,程序執(zhí)行了一個(gè)分支后,其余分支不再執(zhí)行。3)ElseIf不能寫成ElseIf。4)當(dāng)多分支中有多個(gè)表達(dá)式同時(shí)滿足,則只執(zhí)行第一個(gè)與之匹配的語(yǔ)句塊。10/17/202428例:計(jì)算個(gè)人所得稅,稅率如表所示:代碼:IfMoney>5000ThenTax=Money*0.2

ElseIfMoney>1000ThenTax=Money*0.15ElseTax=Money*0.1EndIf稅率0.20.150.1收入Money>50005000>Money>1000Money<100010/17/202429If語(yǔ)句的嵌套。If語(yǔ)句的嵌套是指if或else后面的語(yǔ)句塊中又包含if語(yǔ)句。語(yǔ)法如下:

If<表達(dá)式1>ThenIf<表達(dá)式2>Then…EndIf…EndIf說(shuō)明:1)對(duì)于嵌套結(jié)構(gòu),為了增強(qiáng)程序的可讀性,應(yīng)該采用縮進(jìn)形式書寫。2)If語(yǔ)句形式若不在一行上書寫,必須與EndIf配對(duì),多個(gè)If嵌套,EndIf與它最接近的If配對(duì)。10/17/2024302)SelectCase語(yǔ)句它是多分支選擇語(yǔ)句的又一種形式,具有結(jié)構(gòu)清晰易讀的優(yōu)點(diǎn)。其語(yǔ)法如下:

SelectCase變量或表達(dá)式

Case表達(dá)式列表1

語(yǔ)句塊1 Case表達(dá)式列表2

語(yǔ)句塊2…[CaseElse語(yǔ)句塊n+1]EndSelect說(shuō)明:1)變量或表達(dá)式可以是數(shù)值行或字符串表達(dá)式。2)表達(dá)式列表1、2等可以是表達(dá)式、一組用逗號(hào)分隔的枚舉值、表達(dá)式1to表達(dá)式2、Is關(guān)系運(yùn)算符表達(dá)式等。10/17/202431例:根據(jù)X的值(1-4)打印對(duì)應(yīng)英語(yǔ)單詞,超出X范圍則打印“bad”代碼:SelectCaseXCase1Print“One”Case2Print“Two”Case3Print“Three”Case4Print“Best”CaseElsePrint“bad”EndSelect10/17/202432循環(huán)結(jié)構(gòu) 循環(huán)是在指定的條件下多次重復(fù)執(zhí)行一組語(yǔ)句。VB中提供了兩種基本類型的循環(huán)語(yǔ)句:計(jì)數(shù)循環(huán)語(yǔ)句和條件循環(huán)語(yǔ)句。10/17/2024333)For…Next循環(huán)語(yǔ)句知道循環(huán)次數(shù)的計(jì)數(shù)型循環(huán),語(yǔ)法如下:

For循環(huán)變量=初值to終值[Step步長(zhǎng)]

語(yǔ)句塊

[ExitFor]

語(yǔ)句塊

Next循環(huán)變量說(shuō)明:1)循環(huán)變量必須為數(shù)值型。2)步長(zhǎng)一般為正,初值小于終值,若為負(fù),初值大于終值,缺省步長(zhǎng)為1。3)語(yǔ)句塊可以是一句或多句,稱為循環(huán)體。4)ExitFor表示當(dāng)遇到該語(yǔ)句時(shí),退出循環(huán)體,執(zhí)行下一條語(yǔ)句。5)退出循環(huán)后,循環(huán)變量的值保持退出時(shí)的值。6)循環(huán)體內(nèi)不應(yīng)對(duì)循環(huán)變量賦值。10/17/202434例:計(jì)算1到100的奇數(shù)之和Sum。代碼:Fori=1to100step2Sum=Sum+INexti10/17/2024354)Do…Loop循環(huán)不知道循環(huán)次數(shù)的條件型循環(huán)。語(yǔ)法形式有兩種:DoWhile…Loop(當(dāng)型)和Do…LoopWhile(直到型)形式1:

Do[While|Until條件]

語(yǔ)句塊

[ExitDo]

語(yǔ)句塊

Loop10/17/202436形式2:

Do

語(yǔ)句塊

[ExitDo]

語(yǔ)句塊

Loop[While|Until條件]10/17/202437例:計(jì)算1到100的奇數(shù)之和Sum。代碼:n=1Dowhilen<=100Sum=Sum+nn=n+2Loop10/17/2024385)循環(huán)嵌套指在循環(huán)體內(nèi)又包含一個(gè)完整的循環(huán)結(jié)構(gòu)。對(duì)For循環(huán)和Do…Loop循環(huán)結(jié)構(gòu)適用。例如:Fori=初值To終值

Forj=初值To終值

語(yǔ)句塊

NextjNexti說(shuō)明:1)內(nèi)外循環(huán)變量不能重名。2)內(nèi)外循環(huán)不能交叉。10/17/2024396)VBA的其它常用語(yǔ)句GoTo語(yǔ)句用來(lái)無(wú)條件跳轉(zhuǎn)到過(guò)程中的另一條語(yǔ)句上,通常結(jié)合If語(yǔ)句使用,其語(yǔ)法格式如下:

GoTo標(biāo)號(hào)|行號(hào)Exit語(yǔ)句用于退出某控制結(jié)構(gòu)的執(zhí)行10/17/202440End語(yǔ)句用于結(jié)束一個(gè)程序的執(zhí)行,可以放在任何事件過(guò)程中,語(yǔ)法:EndWith語(yǔ)句它的作用是可以對(duì)某個(gè)對(duì)象執(zhí)行一系列的語(yǔ)句,而不用重復(fù)指出對(duì)象的名稱。但不能用一個(gè)With語(yǔ)句設(shè)置多個(gè)不同的對(duì)象。屬性前需要加“.”號(hào)PrivateSub關(guān)閉窗體_Click()OnErrorGoToErr_關(guān)閉窗體_Click

DoCmd.CloseExit_關(guān)閉窗體_Click:ExitSubErr_關(guān)閉窗體_Click:

MsgBox

Err.DescriptionResumeExit_關(guān)閉窗體_ClickEndSub10/17/202441在VBA編程過(guò)程中會(huì)經(jīng)常用到一些操作,例如,打開(kāi)或關(guān)閉某個(gè)窗體和報(bào)表、根據(jù)需要顯示一些提示信息、對(duì)控件輸入數(shù)據(jù)進(jìn)行驗(yàn)證或?qū)崿F(xiàn)一些“定時(shí)”功能(如動(dòng)畫)等,這些功能就可以使用VBA的輸入框、消息框及計(jì)時(shí)事件Timer等來(lái)完成。7)VBA中常用的操作方法10/17/202442

打開(kāi)和關(guān)閉窗體VBA的窗體操作主要有兩個(gè)重要的命令:打開(kāi)窗體Docmd.OpenForm和關(guān)閉窗體Docmd.Close。

打開(kāi)和關(guān)閉報(bào)表報(bào)表的打開(kāi)與關(guān)閉也是Access應(yīng)用程序中的常用操作,與窗體的相同。VBA也就此提供了兩個(gè)操作命令:打開(kāi)報(bào)表Docmd.OpenReport和關(guān)閉報(bào)表Docmd.Close。打開(kāi)和關(guān)閉窗體或報(bào)表10/17/202443

輸入框:輸入框用于在一個(gè)對(duì)話框中顯示提示,等待用戶輸入正文并按下按鈕、返回包含文本框內(nèi)容的數(shù)據(jù)信息。它的功能在VBA中是以函數(shù)的形式調(diào)用使用,其使用格式如下:InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])調(diào)用該函數(shù),當(dāng)中間若干個(gè)參數(shù)省略時(shí),分隔符逗號(hào)“,”不能省略。輸入框和消息框10/17/202444

消息框:消息框用于在對(duì)話框中顯示消息,等待用戶單擊按鈕,并返回一個(gè)整型值告訴用戶單擊哪一個(gè)按鈕。格式為:MsgBox(prompt[,buttons][,title][,helpfile,context])輸入框和消息框10/17/202445使用窗體和數(shù)據(jù)訪問(wèn)頁(yè),每當(dāng)保存記錄數(shù)據(jù)時(shí),所做的更改便會(huì)保存到數(shù)據(jù)源表中。在控件中的數(shù)據(jù)被改變之前或記錄數(shù)據(jù)被更新之前會(huì)發(fā)生BeforeUpdate事件。通過(guò)創(chuàng)建窗體或控件的BeforeUpdate事件過(guò)程,可以實(shí)現(xiàn)對(duì)輸入到窗體控件中的數(shù)據(jù)進(jìn)行各種驗(yàn)證。例如,數(shù)據(jù)類型驗(yàn)證、數(shù)據(jù)范圍驗(yàn)證等。VBA編輯驗(yàn)證數(shù)據(jù)10/17/202446

VBA中提供Timer時(shí)間控件可以實(shí)現(xiàn)“定時(shí)”功能。但VBA并沒(méi)有直接提供Timer時(shí)間控件,而是通過(guò)設(shè)置窗體的“計(jì)時(shí)器間隔(TimerInterval)”屬性與添加“計(jì)時(shí)器觸發(fā)(Timer)”事件來(lái)完成類似“定時(shí)”功能。處理過(guò)程是:Timer事件每隔TimerInterval時(shí)間間隔就會(huì)被激發(fā)一次,并運(yùn)行Timer事件過(guò)程來(lái)響應(yīng)。這樣重復(fù)不斷,即實(shí)現(xiàn)“定時(shí)”處理功能。計(jì)時(shí)事件Timer10/17/202447VBA的程序運(yùn)行錯(cuò)誤處理VBA中提供OnErrorGoTo。語(yǔ)句來(lái)控制當(dāng)有錯(cuò)誤發(fā)生時(shí)程序的處理。OnErrorGoTo指令的一般語(yǔ)句如下:OnErrorGoTo

標(biāo)號(hào)OnErrorResumeNextOnErrorGoTo010/17/2024483、模塊基本概念VBA代碼存放的位置就是模塊。是作為一個(gè)單元保存在一起的VBA定義和過(guò)程的集合。Access2003包含兩種類型的模塊,一種是類模塊,另一種是標(biāo)準(zhǔn)模塊。(1)類模塊:是指包含新對(duì)象定義的模塊。當(dāng)用戶新建一個(gè)類的實(shí)例的同時(shí)也就創(chuàng)建了新的對(duì)象,在模塊定義的任何過(guò)程都會(huì)變成這個(gè)對(duì)象的屬性和方法。10/17/202449類模塊又可分為三種:窗體模塊。是指與特定的窗體相關(guān)聯(lián)的類模塊。報(bào)表模塊。是指與特定的報(bào)表相關(guān)聯(lián)的類模塊,包含響應(yīng)報(bào)表、報(bào)表段、頁(yè)眉和頁(yè)腳所觸發(fā)的事件的代碼,對(duì)報(bào)表模塊的操作與對(duì)窗體模塊的操作相類似。獨(dú)立的類模塊。類模塊可以不依附于窗體和報(bào)表而獨(dú)立存在。這種類型的類模塊可以為自定義對(duì)象創(chuàng)建定義。10/17/202450(2)標(biāo)準(zhǔn)模塊:標(biāo)準(zhǔn)模塊是指存放整個(gè)數(shù)據(jù)庫(kù)可用的函數(shù)和程序的模塊。它包含與任何其他對(duì)象都無(wú)關(guān)的通用過(guò)程,以及可以從數(shù)據(jù)庫(kù)的任何位置運(yùn)行的常規(guī)過(guò)程。獨(dú)立的類模塊和標(biāo)準(zhǔn)模塊的區(qū)別:主要區(qū)別在于范圍和生命周期方面。獨(dú)立的類模塊沒(méi)有相關(guān)的對(duì)象,聲明的任何常量和變量都僅在代碼運(yùn)行的時(shí)候是可用的。10/17/2024514、過(guò)程及過(guò)程調(diào)用在程序設(shè)計(jì)中,為各個(gè)相對(duì)獨(dú)立的功能模塊所編寫的一段程序稱之為過(guò)程。一個(gè)過(guò)程是一個(gè)VBA函數(shù)單元,過(guò)程中包括一系列用于執(zhí)行某個(gè)任務(wù)或是進(jìn)行某種計(jì)算的語(yǔ)句。過(guò)程分為兩種:Sub子程序和Function函數(shù)過(guò)程。每個(gè)過(guò)程都用唯一的名字加以區(qū)分,過(guò)程在其他程序中通過(guò)名字訪問(wèn)。10/17/2024521)Sub子程序

以“Sub”保留字開(kāi)始的子程序過(guò)程,包括事件過(guò)程和通用過(guò)程。子過(guò)程是指那些用來(lái)執(zhí)行一個(gè)操作或多個(gè)操作,而不會(huì)返回任何值的過(guò)程,當(dāng)錄制完宏查看代碼時(shí),所看到的就是子程序。10/17/202453事件過(guò)程(1)窗體事件過(guò)程語(yǔ)法:PrivateSubForm_事件名([參數(shù)列表])

[局部變量和常數(shù)聲明]

語(yǔ)句塊EndSub注意:1、窗體事件過(guò)程名由Form_事件名組成。2、每個(gè)窗體事件過(guò)程名前都有一個(gè)Private前綴,表示該事件過(guò)程不能在它自己的窗體模塊之外被調(diào)用。3、事件過(guò)程有無(wú)參數(shù),完全由VB提供的具體事件本身決定,用戶不可隨意添加。10/17/202454(2)控件事件過(guò)程語(yǔ)法:PrivateSub控件名_事件名([參數(shù)列表])

[局部變量和常數(shù)聲明]

語(yǔ)句塊EndSub注意:其中的控件名必須與窗體中某控件相匹配,否則VB將認(rèn)為它是一個(gè)通用過(guò)程。10/17/202455通用過(guò)程:通用過(guò)程是一個(gè)必須從另一個(gè)過(guò)程顯示調(diào)用的程序段,通用過(guò)程有助于將復(fù)雜的應(yīng)用程序分解成多個(gè)易于管理的邏輯單元,使應(yīng)用程序更簡(jiǎn)潔、更易于維護(hù)。通用過(guò)程分為公有(Public)過(guò)程和私有(Private)過(guò)程兩種,公有過(guò)程可以被應(yīng)用程序中的任一過(guò)程調(diào)用,而私有過(guò)程只能被同一模塊中的過(guò)程調(diào)用。10/17/202456通用過(guò)程語(yǔ)法如下:

[Private|Public][Static]Sub過(guò)程名([參數(shù)列表])

[局部變量和常數(shù)聲明]’用Dim或Static聲明語(yǔ)句塊

[ExitSub]

語(yǔ)句塊

EndSub10/17/202457建立Sub子過(guò)程的方法方法一:S1、打開(kāi)代碼編輯器窗口。S2、選擇“插入”菜單中的“過(guò)程”命令S3、在“添加過(guò)程”對(duì)話框中輸入過(guò)程名,并選擇類型和范圍。S4、在新創(chuàng)建的過(guò)程中輸入內(nèi)容。方法二:S1、在代碼編輯器窗口的對(duì)象中選擇“通用”,在文本編輯器輸入PrivateSub過(guò)程名。S2、按回車鍵,創(chuàng)建Sub過(guò)程樣板,輸入內(nèi)容。10/17/202458例:利用輸入輸出函數(shù)和If結(jié)構(gòu)創(chuàng)建子過(guò)程GetInfoOptionCompareDatabase'使用數(shù)據(jù)庫(kù)次序進(jìn)行字符串比較。PublicSubGetInfo()'聲明過(guò)程名為GetInfo,該Sub過(guò)程沒(méi)有參數(shù)DimanswerAsString'聲明字符串變量answeranswer=InputBox(Prompt:="Whatisyourname?")'將用戶輸入的字符賦值給變量aswerIfanswer=EmptyThen'條件If...Then...Else語(yǔ)句

MsgBoxPrompt:="youdidnotentername"'在屏幕上顯示消息框Else

MsgBoxPrompt:="yournameis"&answer'MsgBox函數(shù)與answer變量連接,在屏幕上顯示消息對(duì)話框EndIfEndSub10/17/202459Sub子過(guò)程的調(diào)用調(diào)用語(yǔ)法:Call過(guò)程名(實(shí)際參數(shù)表)其中,實(shí)際參數(shù)的個(gè)數(shù)、類型和順序,應(yīng)該與被調(diào)用過(guò)程的形式參數(shù)相匹配,有多個(gè)參數(shù)時(shí),用逗號(hào)隔開(kāi)。把過(guò)程名作為一個(gè)語(yǔ)句來(lái)調(diào)用語(yǔ)法:過(guò)程名[實(shí)參1[,實(shí)參2…]]

與第一種方式不同的是去掉了關(guān)鍵字和實(shí)參列表的括號(hào)。10/17/2024602)Function函數(shù)過(guò)程Function函數(shù)過(guò)程也稱為自定義函數(shù)過(guò)程,是實(shí)現(xiàn)某一數(shù)據(jù)處理功能并返回處理結(jié)果的代碼段。函數(shù)過(guò)程也可簡(jiǎn)稱為函數(shù),是可以返回一個(gè)值的過(guò)程。創(chuàng)建Function過(guò)程的方法:在代碼窗口中,利用“工具”菜單中的“添加過(guò)程”命令,插入一個(gè)函數(shù)過(guò)程。在代碼窗口中,把插入點(diǎn)放在所有現(xiàn)有過(guò)程之外,直接輸入函數(shù)來(lái)定義。10/17/202461Function過(guò)程語(yǔ)法如下:

[Private|Public][Static]Function函數(shù)名([參數(shù)列表])[As數(shù)據(jù)類型][局部變量和常數(shù)聲明]’用Dim或Static聲明

[函數(shù)語(yǔ)句塊][函數(shù)名=<表達(dá)式>][ExitFunction][函數(shù)語(yǔ)句塊][函數(shù)名=<表達(dá)式>]EndFunction10/17/202462Function過(guò)程的調(diào)用語(yǔ)法:過(guò)程名([實(shí)參列表])調(diào)用其它模塊中的過(guò)程調(diào)用窗體中的過(guò)程,從窗體模塊的外部調(diào)用窗體中的公有過(guò)程,必須用窗體的名字作為調(diào)用前綴。例如:CallForm.ExamSub([實(shí)參表])調(diào)用標(biāo)準(zhǔn)模塊中的過(guò)程,如果在應(yīng)用程序中,過(guò)程名是唯一的,則調(diào)用時(shí)不必加模塊名。如果有同名的,在其他模塊中調(diào)用時(shí)必須加模塊名。

10/17/202463例:編寫一個(gè)計(jì)算圓周長(zhǎng)的函數(shù)過(guò)程,并利用子過(guò)程調(diào)用該函數(shù),代碼如下所示:PublicFunction計(jì)算(r!)AsSingle'定義名為“計(jì)算”的函數(shù),參數(shù)為半徑r,類型為單精度計(jì)算=2*3.1415926*r'定義函數(shù)表達(dá)式EndFunctionPublicSub調(diào)用()'定義名為“調(diào)用”的子過(guò)程

Dimx!,y!'定義變量

x=InputBox("請(qǐng)輸入半徑")'調(diào)用輸入函數(shù),為變量x輸入數(shù)值

y=計(jì)算(x)'調(diào)用計(jì)算函數(shù),將結(jié)果賦值給變量y

MsgBox("周長(zhǎng)為"&y)'調(diào)用輸出語(yǔ)句,將結(jié)果顯示出來(lái)EndSub10/17/2024643)參數(shù)的傳遞按值傳遞參數(shù)(定義時(shí)加ByVal) 按值傳遞時(shí),是將實(shí)參變量的值賦值到一個(gè)臨時(shí)存儲(chǔ)單元中,如果在調(diào)用過(guò)程中改變了形參的值,不會(huì)影響實(shí)參變量本身,即實(shí)參變量保持調(diào)用前的值不變。按地址傳遞參數(shù) 按地址傳遞參數(shù)時(shí),把實(shí)參地址傳遞給被調(diào)用過(guò)程,形參和實(shí)參共用內(nèi)存的同一地址。調(diào)用過(guò)程中,形參值一旦改變,相應(yīng)實(shí)參的值也跟著改變。10/17/2024655、創(chuàng)建VBA模塊1)VB編碼規(guī)則語(yǔ)言元素:VB的語(yǔ)言基礎(chǔ)是Basic語(yǔ)言,其主要元素包括關(guān)鍵字、函數(shù)、表達(dá)式和語(yǔ)句。VB代碼書寫規(guī)則:程序中不區(qū)分大小寫,系統(tǒng)可對(duì)用戶程序代碼進(jìn)行自動(dòng)轉(zhuǎn)換。保留行號(hào)和標(biāo)號(hào):通常用在Goto語(yǔ)句中。10/17/202466語(yǔ)句書寫規(guī)則:在同一行上可以書寫多行語(yǔ)句,語(yǔ)句間用冒號(hào)(:)分隔;單行語(yǔ)句可以分多行書寫,在本行后加續(xù)行符空格或下劃線;一行允許多達(dá)255個(gè)字符。程序的注釋方式:整行注釋一般以Rem開(kāi)頭,也可以用撇號(hào)’;用撇號(hào)引導(dǎo)的注釋,既可以是單獨(dú)成行,也可以直接放在語(yǔ)句的后面。10/17/2024672)在“代碼窗口”中編程代碼窗口包含了一個(gè)和VB相同的開(kāi)發(fā)調(diào)試系統(tǒng)?!按a窗口”上方有兩個(gè)組合框,左邊是對(duì)象框,右邊是事件過(guò)程框。如圖所示:10/17/2024683)創(chuàng)建VBA模塊

Access中可

溫馨提示

  • 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)論