模塊與VBA編程基礎(chǔ)
《模塊與VBA編程基礎(chǔ)》由會員分享,可在線閱讀,更多相關(guān)《模塊與VBA編程基礎(chǔ)(93頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第8章 模塊與VBA編程基礎(chǔ) 模塊的基本概念 8.1創(chuàng)建模塊8.2 VBA程序設(shè)計基礎(chǔ)8.3 VBA流程控制語句8.4 過程調(diào)用和參數(shù)傳遞8.5 VBA程序的調(diào)試8.7 VBA程序運(yùn)行錯誤處理8.6 8.1 模塊的基本概念模塊是Access中一個重要的數(shù)據(jù)庫對象,模塊中可包含一個或多個過程。過程是由一系列VBA代碼組成的。它包含許多VBA語句和方法,以執(zhí)行特定的操作或計算數(shù)值。簡而言之,模塊是裝著VBA代碼的容器。特點:l模塊比宏的功能更強(qiáng)大,運(yùn)行速度更快,能直接運(yùn)行Windows的其他程序。 l使用模塊可以建立用戶自己的函數(shù),完成復(fù)雜的計算、執(zhí)行宏所不能完成的任務(wù)。l使用模塊可以開發(fā)十分復(fù)雜
2、的應(yīng)用程序,使數(shù)據(jù)庫系統(tǒng)功能更加完善。 Access中,模塊分為類模塊和標(biāo)準(zhǔn)模塊兩種。 8.1.1 標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊一般用于存放供其他Access數(shù)據(jù)庫對象使用的公共過程。標(biāo)準(zhǔn)模塊通常安排一些公共變量或過程供類模塊里的過程調(diào)用。在標(biāo)準(zhǔn)模塊內(nèi)部也可以定義私有變量和私有過程僅供本模塊內(nèi)部使用特點:標(biāo)準(zhǔn)模塊中的公共變量和公共過程具有全局特性,其作用在整個應(yīng)用程序里,生命周期是伴隨著應(yīng)用程序的運(yùn)行而開始、關(guān)閉而結(jié)束。創(chuàng)建方法:選擇模塊對象,然后單擊新建按鈕或插入菜單選擇模塊。 8.1.2 類模塊類模塊是以類的形式封裝的模塊,是面向?qū)ο缶幊痰膯挝?。類模塊按照形式不同分為兩大類:l系統(tǒng)對象類模塊l用戶定義
3、類模塊 系統(tǒng)對象類模塊窗體和報表都可以含有自己的事件代碼和處理模塊,這些模塊屬于系統(tǒng)對象類模塊。進(jìn)入相應(yīng)的模塊代碼設(shè)計區(qū)域的方法:一單擊“代碼”按鈕;二是單擊事件過程。特點:類模塊具有局部特性,其作用范圍局限在所屬窗體或報表內(nèi)部,而生命周期則是伴隨著窗體或報表的打開而開始、關(guān)閉而結(jié)束。 用戶定義類模塊創(chuàng)建方法:在模塊對象下:單擊”插入”|“類模塊” 8.2 創(chuàng)建模塊創(chuàng)建模塊就是創(chuàng)建過程過程是模塊的單元組成,由VBA代碼編寫而成。過程是一段可以實現(xiàn)某個具體功能的代碼過程分為兩類:Sub子過程和Function函數(shù)過程。一、在模塊中加入過程:創(chuàng)建方法:打開窗體或報表的事件過程進(jìn)入選中單擊模塊對象,
4、單擊“新建”一個模塊包含一個聲明區(qū)域,且可以包含一個或多個子過程或函數(shù)過程。 1、Sub過程(子過程)無返回值。定義格式:Sub 過程名 程序代碼 End Sub過程的調(diào)用:Call 過程名Sub jc()Dim str1, str2, str3str1 = beijing : Rem 給變量str1賦值str2 = shanghai 給變量str2賦值str3 = str1 + str2Debug.Print str3End Sub Debug.Print在立即 窗口中顯示結(jié)果: Rem Dim定義變量立即窗口的顯示:視圖|立即窗口 Public Sub name Private Sub n
5、ame Public 表示 Sub 過程可被所有 Script 中的所有其他過程訪問。 Private 表示 Sub 過程只可被聲明該過程的 Script 中的其他過程訪問。 Name Sub 的名稱,遵循標(biāo)準(zhǔn)變量命名約定。 Integer-數(shù)據(jù)類型Integer 字節(jié)或者整數(shù) 。如果知道變量總是存放整數(shù),則應(yīng)該將其申明為Interger類型或Long 類型。整數(shù)的運(yùn)算速度快,而且占用的內(nèi)存少。 Dim (定義變量) 方法為:Dim 變量 As 變量類型 2、Function過程(又稱函數(shù))有返回值定義格式:Function 過程名 AS(返回值)類型 程序代碼 END Function調(diào)用:
6、直接用函數(shù)名調(diào)用過程test的定義如下:Sub test() Dim n As Integer, k As Long n = InputBox(n=) Debug.Print jc(n) k = jc(n) + jc(n+2) 調(diào)用函數(shù)jc Debug.Print “n!+(n+2)!=; kEnd Sub函數(shù)jc的定義如下:Function jc(n As Integer) As Long 函數(shù)的返回值為Long型 Dim i As Integer, s As Long s = 1 For i = 1 To n s = s * i Next i jc = s 給函數(shù)賦值End Functio
7、n 二、在模塊中執(zhí)行宏在模塊的過程定義中,使用Docmd對象的RunMacro方法可以執(zhí)行設(shè)計好的宏調(diào)用格式:Docmd. RunMacro 宏名,宏的運(yùn)行次數(shù),數(shù)值表達(dá)式注意:宏名用雙引號引起來 8.3 VBA程序設(shè)計基礎(chǔ)VBA是Microsoft Office內(nèi)置的編程語言,其語法與VB語言兼容。不是一個獨立的開發(fā)工具,一般被嵌入到像Word、Excel、Access這樣的宿主軟件中,與其配套使用VBA采用了面向?qū)ο蟮某绦蛟O(shè)計方法。 8.3.1、程序語句書寫原則1、語句書寫規(guī)則通常一個語句寫在一行,語句較長一行寫不下時,可以用續(xù)行符(_)將語句連續(xù)寫在下一行可以使用冒號將幾個語句分隔寫在一
8、行中 例如模塊2當(dāng)輸入一行語句并按下回車鍵后,代碼以紅色文本顯示表明該語句存在錯誤2、注釋語句兩種方式::Rem 注釋語句注釋語句注釋默認(rèn)以綠色文本顯示。還可以利用“編輯”工具欄中的“設(shè)置注釋塊”按鈕和“解除注釋塊”按鈕對大塊代碼進(jìn)行注釋或解除注 釋 例題:定義變量,賦值并添加注釋 Sub ab() Dim str1, str2 str1 = “shanghai“ : Rem 為變量str1賦值 str2 = shi bo hui 為變量str2賦值 Debug.Print str1 + str2 End Sub3、采用縮進(jìn)格式書寫程序顯示出流程中的結(jié)構(gòu) 也可以利用編輯縮進(jìn)或凸出 1對象和集合
9、對象:在采用面向?qū)ο蟪绦蛟O(shè)計方法的程序中,程序處理的目標(biāo)被抽象成了一個個對象,每個對象具有各自的屬性、方法和事件。一個對象就是一個實體。對象的方法就是對象的可以執(zhí)行的行為,一個對象都有多種方法。對象集合:Access數(shù)據(jù)庫窗口左側(cè)的7類對象列表形成對象類。7類對象。 集合表示的是某類對象所包含的實例構(gòu)成 Access中除了數(shù)據(jù)庫的7類個對象外,還提供一個重要的對象:DoCmd。主要功能是通過調(diào)用包含在內(nèi)部的方法實現(xiàn)VBA編輯中對Access的操作。 屬性和方法描述了對象的性質(zhì)和行為格式:對象.屬性或?qū)ο?行為屬性:用來表示對象的狀態(tài),如窗體的Name(名稱)屬性、Caption(標(biāo)題)屬性等。
10、 如:Label1.caption方法:用來描述對象的行為,如窗體有Refresh方法,例如,利用Docmd對象的方法可以打開報表“教師信息”,其格式為: Docmd.OpenReport “教師信息” Debug對象有Print方法等。 Debug對象:該對象可在調(diào)試階段用Print方法在立即窗口輸出信息 Debug.print2屬性和方法 3事件和事件過程 事件:是對象可以識別的動作,通常由系統(tǒng)預(yù)先定義(附錄E列出了Access數(shù)據(jù)庫對象的事件)事件過程:對象在識別了所發(fā)生的事件后執(zhí)行的程序例如,下面的事件過程描述了單擊按鈕之后所發(fā)生的一系列動作。Private Sub Command1_
11、Click() Command1.Caption = 首都經(jīng)濟(jì)貿(mào)易大學(xué)End Sub 8.3.3 數(shù)據(jù)類型和數(shù)據(jù)庫對象Access數(shù)據(jù)庫系統(tǒng)創(chuàng)建表對象時所涉及的字段數(shù)據(jù)類型(除了OLE對象和備注數(shù)據(jù)類型外),在VBA中都有數(shù)據(jù)類型相對應(yīng)一、標(biāo)準(zhǔn)數(shù)據(jù)類型定義數(shù)據(jù)類型時,也可以用符號定義Dim a as single dim a!1、布爾型數(shù)據(jù):兩個值True和False。True=-1 False=02、日期型數(shù)據(jù):前后必須用#號,如#2012/11/233、變體類型數(shù)據(jù):除定長字符串類型及用戶自定義類型外,包含其他任何類型數(shù)據(jù)。VBA中規(guī)定,程序中如果沒有顯式聲明或使用符號來定義變量的數(shù)據(jù)類型
12、,則默認(rèn)為變體類型 數(shù)據(jù)類型類型標(biāo)識符號取值范圍整數(shù)Integer % -32,768 32,767長整數(shù)Long & -2,147,483,648 2,147,483,647單精度數(shù)Single !雙精度數(shù)Double #貨幣Currency 字符串String $ 065500字符布爾型Boolean True 或False日期型Date 100年1月1日9999年12月31日變體類型Variant無 二、用戶自定義的數(shù)據(jù)類型在應(yīng)用過程中利用VBA標(biāo)準(zhǔn)數(shù)據(jù)類型自己定義需要的多種數(shù)據(jù)類型格式:Type 數(shù)據(jù)類型名 As As End Type例:定義一個學(xué)生信息數(shù)據(jù)類型Type NewStu
13、denttxtNo As String*7 學(xué)號,7位定長字符串txtName As string 姓名,變長字符串txtSex As String*1 性別,1位定長字符串txtAge As Integer 年齡,整型 End Type 當(dāng)需要建立一個變量用來保存包含不同數(shù)據(jù)類型字段的數(shù)據(jù)表的一條或多條記錄時,用戶自定義數(shù)據(jù)類型就特別有用。一般用戶自定義數(shù)據(jù)類型使用時,首先要在模塊區(qū)域中定義用戶數(shù)據(jù)類型,然后顯式以Dim,Public或Static關(guān)鍵字來定義此用戶類型變量 用戶定義類型變量的取值:變量名.分量名例:Dim NewStud as NewStudent NewStud.txtn
14、o=“980306” NewStud.txtName=“馮偉” NewStud.txtSex=“女” NewStud.txtAge=20也可以使用With關(guān)鍵字簡化一下程序中的重復(fù)部分。Dim NewStud as NewStudentWith NewStud .txtno=“980306” .txtName=“馮偉” .txtSex=“女” .txtAge=20End With 三、數(shù)據(jù)庫對象(略)8.3.4變量與常量變量是指程序運(yùn)行時值會發(fā)生變化的數(shù)據(jù)。程序運(yùn)行時,變量代表的就是內(nèi)存中的某塊臨時存儲空間 1、變量的命名規(guī)則(1)以字母或漢字開頭,后可跟字母、數(shù)字或下劃線。(2)變量名最長為
15、255個字符。(3)不區(qū)分變量名的大小寫(4)不能包含空格2、常量是指在程序中可以直接引用的實際值,其值在程序運(yùn)行中不變。VBA中有三種常量:直接常量、符號常量、系統(tǒng)常量。 一變量的聲明變 量 聲 明 就 是 定 義 變 量 名 稱 及 類 型 , 使 系 統(tǒng) 為 變 量分 配 存 儲 空 間 。 一 般 , 變 量 在 使 用 前 應(yīng) 該 先 聲 明 。VBA聲 明 變 量 有 兩 種 方 法 :顯式聲明 隱含聲明u顯式聲明:格式為 Dim 變量名 AS 數(shù)據(jù)類型(或者字符)例如 Dim ab As integer , sum As single或 Dim ab%, sum!u隱含聲明沒有直
16、接定義而通過一個值指定給變量名,或dim定義中省略了AS 數(shù)據(jù)類型,或在變量名稱后沒有附加類型說明字符來指明隱含變量的數(shù)據(jù)類型時,默認(rèn)為Variant數(shù)據(jù)類型。例如:Dim m,n m,n為變體變量 ab=123 ab為變體變量,值是123 建 議 在 程 序 中 顯 式 聲 明 變 量 二、強(qiáng)制聲明在默認(rèn)情況下,VBA允許在代碼中使用未聲明的變量,如果在模塊設(shè)計窗口的頂部“通用-聲明”區(qū)域中,加入語句:Option Explicit強(qiáng)制要求所有變量必須定義才能使用。這種方法只為當(dāng)前模塊設(shè)置了自動變量聲明功能。 如果想為所有模塊都啟用此功能,“工具”菜單“選項”對話框,在“編輯器”選項卡中選中
17、“要求變量聲明”選項即可。 三、變量的作用域VBA編程中,變量定義的位置和方式不同,則它存在的時間和起作用的范圍也有所不同。這就是變量的生命周期和作用域。VBA中變量的作用域有3個層次:1、局部范圍:變量定義在模塊的過程內(nèi)部在子過程或函數(shù)內(nèi)部使用Dim、 Static(靜態(tài))As關(guān)鍵字說明的變量就是局部范圍的。2、模塊范圍:變量定義在模塊的所有過程之外的起始位置在模塊的通用說明區(qū),用Dim 、Static、private(私有)As關(guān)鍵自定義的變量作用域都是模塊范圍。3、全局范圍:定義在標(biāo)準(zhǔn)模塊的所有過程之外的起始位置,作用范圍所有類模塊和標(biāo)準(zhǔn)模塊的所有子過程與函數(shù)過程。 在標(biāo)準(zhǔn)模塊的變量定義
18、區(qū)域,用PublicAs關(guān)鍵字說明 四、數(shù)據(jù)庫對象變量Access建立的數(shù)據(jù)庫對象及其屬性均可被看成是VBA程序代碼中的變量及其指定的值來加以引用。引用格式:Forms!窗體名稱!控件名稱.屬性名稱或Reports!報表名稱!控件名稱.屬性名稱如果對象名稱中含有空格或標(biāo)點符號,就要用方括號把名稱括起來。例如:forms!系統(tǒng)登錄!用戶名=“cueb” forms!系統(tǒng)登錄!用 戶名=“cueb”此外還可以用Set關(guān)鍵字來建立控件對象的變量。當(dāng)需要多次引用對象時,這種方法很方便。例如:Dim txtName as control 定義控件類型變量Set txtname= Forms!窗體名稱!控
19、件名稱.屬性名稱 txtName=“馮偉” 五、數(shù)組問題:求10個成績的平均值,并對它們按照從大到小排序,這10個數(shù)怎么組織?如果在程序中要對一組數(shù)據(jù)進(jìn)行處理,通常的解決方法是將這組數(shù)放在數(shù)組中。 放在10個變量中?放在一個數(shù)組中? 數(shù)組是一組相同數(shù)據(jù)類型的數(shù)據(jù)的集合 1一維數(shù)組的定義 使用數(shù)組必須先定義數(shù)組,格式為Dim 數(shù)組名(to)As 例如,dim score(1 to 10)as Integer定義了一個有10個元素的整型數(shù)組,所有數(shù)組元素具有同一個標(biāo)識即數(shù)組名,數(shù)組名后括號內(nèi)的序號稱為數(shù)組元素的下標(biāo)。(1)所有數(shù)組元素在內(nèi)存連續(xù)存放(2)根據(jù)下標(biāo)區(qū)分?jǐn)?shù)組元素 Score(1) sc
20、ore(2)score(3) score(9)Score(10) 關(guān)于數(shù)組的定義,還有下面的說明。(1)定義數(shù)組時數(shù)組名的命名規(guī)則與變量名的命名規(guī)則相同(2)一般在定義數(shù)組時應(yīng)給出數(shù)組下標(biāo)的上限和下限。但也可以省略下限,缺省為0。例如,Dim a(10) As Single默認(rèn)情況下,數(shù)組a由11個元素組成。若希望下標(biāo)從1開始,可在模塊的通用聲明段使用Option Base語句聲明。其使用格式為 Option Base 1 (3)和不能使用變量,必須是常量,常量可以是字面常量或符號常量,一般是整型常量。(4)如果省略As子句,則數(shù)組的類型為Varient變體類型。 2二維數(shù)組的定義 格式為Di
21、m 數(shù)組名(to,to)As 例如,Dim c(1 To 3, 1 To 4)As Singlec(1,1)c(1,2)c(1,3)c(1,4) c(2,1)c(2,2)c(2,3)c(2,4)c(3,1)c(3,2)c(3,3)c(3,4) 3、動態(tài)數(shù)組當(dāng)預(yù)先不知道數(shù)組定義需要多少元素時,可以把數(shù)組定義為動態(tài)數(shù)組定義和使用方法:先用dim顯式定義數(shù)組但不指明數(shù)組元素數(shù)目,然后用Redim關(guān)鍵字來決定數(shù)組中包含的元素數(shù)。例:dim newarray() as long Redim newarray(9,9,9) 六、變量標(biāo)識符命名法則對于控件對象定義變量時,可以用小寫字母作為變量名的前綴。例如
22、:文本框用txt,定義一個文本框變量名為txtName表8.4例出了最常用變量標(biāo)識符的前綴。為了易于記憶變量名 p212 七、符號常量(固定不變的值)如果程序中多處用到某個常量,將其定義成符號常量可增加代碼的可讀性,也便于維護(hù)。 用關(guān)鍵字Const定義符號常量:格式:Const 符號常量名稱=常量值 Const PI =3.1415926符號常量一般需要大寫,以便與變量區(qū)分在定義符號常量時,如果前面加上Global或Public關(guān)鍵字,這一符號常量會涵蓋全局或模塊級別范圍。例如:Global Const PI=3.1415926 八、系統(tǒng)常量True False Yes No On Off N
23、ull等單擊“視圖”菜單選擇“對象瀏覽器”就可以查看Access、VBA等對象庫中提供的常量。 8.3.5 常用標(biāo)準(zhǔn)函數(shù)VBA提供了大量的內(nèi)置函數(shù),這些函數(shù)極大地豐富了VBA的功能 了解和使用函數(shù),應(yīng)從下面三個方面:函數(shù)名參數(shù)(指參數(shù)的個數(shù)、順序和類型 )函數(shù)值(每個函數(shù)被調(diào)用時都會有一個返回值)常用函數(shù)的使用可以參照附錄A學(xué)習(xí)下面介紹一些常用函數(shù) 一、算術(shù)函數(shù)(完成數(shù)學(xué)計算功能)1、絕對值函數(shù):Abs()返回數(shù)值表達(dá)式的絕對值。如Abs(-3)=32、向下取整函數(shù):Int()向下取整數(shù)的結(jié)果,參數(shù)為負(fù)值時返回小于等于參數(shù)值的第一個負(fù)數(shù)。只取整數(shù)部分,不考慮四舍五入3、取整函數(shù):Fix()參數(shù)
24、為正數(shù)時與Int結(jié)果一樣,參數(shù)為負(fù)數(shù)時返回大于等參數(shù)值的第一個負(fù)數(shù)例:Int(-3.25)=-4 Fix(-3.25)=-3 4、四舍五入函數(shù):Round(,)按照指定的小數(shù)進(jìn)行四舍五入。 就是用來指定小數(shù)位數(shù)的。例:Round(3.255,1)=3.35、開平方函數(shù):Sqr()Sqr(9)=36、產(chǎn)生隨機(jī)數(shù)函數(shù):Rnd()數(shù)值表達(dá)式:小于0,每次產(chǎn)生相同的隨機(jī)數(shù)大于0,每次產(chǎn)生新的隨機(jī)數(shù)等于0,產(chǎn)生最近生成的隨機(jī)數(shù)省略參數(shù),默認(rèn)為大于0 二、字符串函數(shù)1、字符串檢索函數(shù):InStr(start,compare)檢索子字符串str2在字符串str1中最早出現(xiàn)的位置,返回一整型數(shù)。Start為可
25、選參數(shù),為數(shù)值式,設(shè)置檢索的起始位置。如省略,從第一個字符開始檢索。Compare也為可選參數(shù),指定字符串的比較方法。值可以是1、2和0(缺省)。0做二進(jìn)制比較,1不區(qū)分大小寫的文本比較,2基于數(shù)據(jù)庫中包含信息的比較。例:str1=“98765” str2=“65”S=Instr(str1,str2)=4S=Instr(3,”aSsiAB”,”a”,1)=5 2、字符串長度檢測函數(shù):Len(或)返回字符串所含字符數(shù)。注意:定長字符串,其長度是定義時的長度,和字符串實際值無關(guān)。例:dim str as string*10Dim I Str=“123”i=12Len1=Len(“12345”) =
26、5Len2=Len(12) 錯誤Len3=Len(i) =2Len4=Len (“考試中心”)=4Len5=Len(str) =10 3、字符串截取函數(shù)Left right midMid(,N2):從字符串左邊第N1個字符起截取N2個字符。缺省N2截取所有字符。4、生成空格字符函數(shù):Space()返回數(shù)值表達(dá)式的值指定的空格字符數(shù)5、大小寫轉(zhuǎn)換函數(shù):ucase:小寫轉(zhuǎn)換成大寫Lcase:大寫轉(zhuǎn)換成小寫6、刪除空格函數(shù):LTrim():刪除開始的空格RTrim():刪除尾部的空格Trim():刪除開始和尾部的空格 三、日期/時間函數(shù)1、獲取系統(tǒng)日期和時間函數(shù)Date() time() Now()
27、2、截取日期分量函數(shù)Year() Month() Day() Weekday()3、截取時間分量函數(shù) Hour() Minute() Second()4、日期/時間增加或減少一個時間間隔DateAdd(,)對表達(dá)式表示的日期按照間隔類型加上或減去指定的時間間隔值。間隔值正數(shù)為加,負(fù)數(shù)為減間隔類型參照8.6 5、計算兩個日期的間隔值函數(shù)DateDiff(,W1,W2)返回日期1和日期2之間按照間隔類型所指定的時間間隔數(shù)目。W1可選參數(shù),指定一個星期的第一天是星期幾的常數(shù)W2可選參數(shù),指定一年的第一個周的常數(shù)(參照表8.7)6、返回日期指定時間部分函數(shù)DatePart(,W1,W2)返回日期中按照
28、間隔類型所指定的時間部分值7、返回包含指定年月日的日期函數(shù)DateSerial(表達(dá)式1,表達(dá)式2,表達(dá)式3)返回由表達(dá)式1值為年,表達(dá)式2值為月,表達(dá)式3值為日而組成的日期值。每個參數(shù)的取值范圍應(yīng)該是可接受的。當(dāng)任何一個參數(shù)的取值 超出可接受范圍時,它會適時進(jìn)位到下一個較大的時間單位。 四、類型轉(zhuǎn)換函數(shù)1、字符串轉(zhuǎn)換字符代碼函數(shù):Asc()返回字符串首字符的ASCII值。2、字符代碼轉(zhuǎn)換成字符函數(shù):Chr()返回與字符代碼相關(guān)的字符。3、數(shù)字轉(zhuǎn)換成字符串函數(shù):Str()將數(shù)值表達(dá)式轉(zhuǎn)換成字符串。表達(dá)式值為正,返回的字符串包含一前導(dǎo)空格表示有一正號4、字符串轉(zhuǎn)換成數(shù)字函數(shù):Val()將數(shù)字字符
29、串轉(zhuǎn)換成數(shù)值型數(shù)字。注意,數(shù)字串轉(zhuǎn)換成自動將字符串中的空格、制表符和換行符去掉,當(dāng)遇到它不能識別為數(shù)字的第一個字符時,停止讀入字符串 5、字符串轉(zhuǎn)換日期日期函數(shù):DateValue()將字符串轉(zhuǎn)換成日期值例:D=DateValue(“February 29,2004”),返回#2004-2-29#6、Nz函數(shù):Nz(表達(dá)式或字段屬性值,規(guī)定值當(dāng)一個表達(dá)式或字段屬性值為Null時,函數(shù)可返回0、零長度字符串(”)或其他指定的值。當(dāng)缺省“規(guī)定值”時,如果表達(dá)式或字段屬性值為數(shù)值型且值為Null,Nz函數(shù)返回0如果表達(dá)式或字段屬性值為字符型且值為Null,Nz函數(shù)返回空字符串。 8.3.6 運(yùn)算符和
30、表達(dá)式一、運(yùn)算符(算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符和連接運(yùn)算符)1、算術(shù)運(yùn)算符乘冪()、乘法(*)、除法(/)、整數(shù)除法()求模運(yùn)算(Mod)、加法、減法。整數(shù)除法():對兩個數(shù)做除法運(yùn)算并返回一個整數(shù)如果操作數(shù)有小數(shù)部分,舍去小數(shù)后再運(yùn)算,如果結(jié)果有小數(shù)也要舍去求模運(yùn)算(Mod):求余數(shù)如果操作數(shù)是小數(shù),四舍五入變成整數(shù)后再運(yùn)算;余數(shù)的符號跟被除數(shù)相同。 2、關(guān)系運(yùn)算符= = 運(yùn)算結(jié)果為True或False。進(jìn)行算術(shù)運(yùn)算時,True當(dāng)成-1False當(dāng)成03、邏輯運(yùn)算符And(與) Or(或) Not(非)運(yùn)算結(jié)果為True或False4、連接運(yùn)算符&和+&:將兩個表達(dá)式作字符串連接例:”
31、2+3”&”=”&(2+3) 運(yùn)算結(jié)果為2+3=5+:將兩個表達(dá)式均為字符串時,才將兩個表達(dá)式連接成一個新字符串。例:”2+3”&”=”+(2+3)出錯二、表達(dá)式和優(yōu)先級(參照表8.9)p220 一個語句就是能夠完成某項操作的一條命令。VBA程序就是有大量語句構(gòu)成的。按照語句所執(zhí)行的功能,VBA的程序語句有賦值語句、聲明語句、控制語句、注釋語句等??刂普Z句分三種結(jié)構(gòu)是順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu) 順序結(jié)構(gòu)是最簡單的一種結(jié)構(gòu),按照語句的排列順序依次執(zhí)行程序中的每一條語句。分支結(jié)構(gòu)又稱選擇結(jié)構(gòu),根據(jù)條件選擇執(zhí)行路徑,需要使用條件語句循環(huán)結(jié)構(gòu):程序執(zhí)行時,該語句中的一部分操作即循環(huán)體被重復(fù)執(zhí)行多次,
32、需要使用循環(huán)語句8.4 VBA流程控制語句 8.4 VBA流程控制語句8.4.1 賦值語句是最基本的語句。它的功能是給變量或?qū)ο蟮膶傩再x值。其格式為 例如,Ra = 0.1 給變量賦值Text1.Value = 歡迎使用ACCESS 給控件的屬性賦值“=”為賦值號,表示賦值的動作,不要理解為數(shù)學(xué)上的等號。 程序的順序結(jié)構(gòu)例8-1 創(chuàng)建如圖8-5所示的窗體“計算圓的面積和周長”。要求在文本框中輸入了圓的半徑后,單擊“計算”按鈕,在窗體的另外兩個文本框中分別輸出圓的面積和周長。 “計算”按鈕的Click事件過程如下。Private Sub command0_Click()定義變量和符號常量Dim
33、r As Single r為圓的半徑Dim s As Single s為圓的面積Dim l As Single l為圓的周長Const PI = 3.1415926給變量r賦值r = text0計算圓的面積和周長s = PI * r 2l = 2 * PI * r用文本框輸出結(jié)果 text2 = stext4 = lEnd Sub 條件表達(dá)式語句塊當(dāng)條件為假時當(dāng)條件為真時開始結(jié)束 語句塊語句塊基本語句條件表達(dá)式當(dāng)條件為假時當(dāng)條件為真時 8.4.2條件語句1、If-Then語句(單分支結(jié)構(gòu))流程圖見P222If Then End If或 者 If Then 例 8.4 自 定 義 過 程 Pro
34、cedure1的 功 能 是 : 如 果 當(dāng) 前 系 統(tǒng) 時 間超 過 12點 , 則 在 立 即 窗 口 顯 示 “ 下 午 好 ! ”Sub Pro1()If Hour(Time()=12 then Debug.print “下 午 好 ! ”End Sub 2、If-Then-Else(雙分支結(jié)構(gòu))語句結(jié)構(gòu): 流程圖見P222If Then Else End If例8.5 修改過程Pro1,新增功能是,如果當(dāng)前系統(tǒng)時間為12點至18點,則在立即窗口顯示“下午好!”,否則顯示“歡迎下次光臨!” Sub Pro1() If Hour(Time() = 12 And Hour(Time() y
35、 Then Debug.Print xElse Debug.Print yEnd If 例8.6試用If-Else語句結(jié)構(gòu)編程實現(xiàn)由X的值計算表達(dá)式Y(jié)的值 x0 Y= 0 x=0 |x| x0 Then y=Sqr(x)Else If x=0 Then y=0 Else y=Abs(x) End IfEnd If程序段2:If x0 Then y=Sqr(x)ElseIf x=0 Then y=0Else y=Abs(x)End If 例8-2 用VBA程序?qū)崿F(xiàn)窗體“系統(tǒng)登錄”。 “確定”按鈕的Click事件過程 Private Sub cmd確定_Click() Dim name As St
36、ring, pass As String Dim r As Integer 存放MsgBox消息框的返回值 name = Me!txt用戶名 pass = Me!txt口令 If pass = 1234 And name = cueb Then 如果用戶名和口令正確,顯示消息框,運(yùn)行學(xué)生管理模塊窗體 MsgBox 歡迎進(jìn)入學(xué)生管理模塊!, vbOKOnly + vbCritical, 歡迎 DoCmd.Close 關(guān)閉系統(tǒng)登錄窗體 DoCmd.OpenForm 學(xué)生管理模塊 打開學(xué)生管理模塊窗體 Else MsgBox 密碼錯誤!, vbOKOnly 顯示消息框 Me!txt用戶名 = 使文本
37、框清空 Me!txt口令 = Me!txt用戶名.SetFocus 使文本框獲得焦點,準(zhǔn)備重新輸入 End IfEnd Sub 3、 If-Then-ElseIf(多分支結(jié)構(gòu))If Then ElseIf Then ElseIF Then Else End If流程圖見P223 例8.7 定義過程Pro3 功能:如果當(dāng)前系統(tǒng)時間為8至12點鐘之間,在立即窗口顯示“上午好!”,系統(tǒng)時間為12點至18點,則顯示“下午好!”,其他時間均顯示“歡迎下次光臨!”Sub Pro3() If Hour(time()=8 and Hour(time()=12 and Hour(time()= 90 and x
38、= 80 and x= 70 and x= 60 and x70 Then Debug.Print 及格 Else Debug.Print 不及格 End IfEnd Sub 4、 Select Case-End Select語句 當(dāng)條件比較多時,用If-End If需要多重嵌套,使用程序變得復(fù)雜。用Select Case-End Select語句就可以方便解決語句格式為Select Case Case 語句塊1 表達(dá)式的值與表達(dá)式列表1相等時執(zhí)行 Case 語句塊2 表達(dá)式的值與表達(dá)式列表2相等時執(zhí)行 Case Else 語句塊n+1 上面的情況均不符合時執(zhí)行End Select 說明:(1
39、)執(zhí)行過程是先計算Select Case后的變量或表達(dá)式的值,然后從上至下逐個比較,決定執(zhí)行哪一個語句塊。如果有多個Case后的表達(dá)式列表與其相匹配,則只執(zhí)行第一個Case后的語句塊。(2)Select Case后的變量或表達(dá)式只能是數(shù)值型或字符型表達(dá)式。(3)Case表達(dá)式可以是: 單一數(shù)值: 5 用逗號分隔的一組枚舉表達(dá)式: 2, 4, 6, 8 表達(dá)式1 To 表達(dá)式2 60 to 100 Is 關(guān)系運(yùn)算符表達(dá)式 Is b,a,b)(2)Switch函數(shù):Switch(條件式1,表達(dá)式1,條件式2,表達(dá)式2,條件式n,表達(dá)式n)例:y=Switch(x0,1,x=0,0,x0,-1)(3
40、)Choose函數(shù):Choose(索引式,選項1,選項2,選項n)根據(jù)索引式的值來返回選項列表中的某個值。索引值為1,返回選項1,索引值為2,返回選項2,以此類推。注意:只有索引值在界于1到可選擇項目數(shù)之間,才返回其后的選項值,否則返回?zé)o效值Null 知識回顧程序流程控制結(jié)構(gòu):l順序結(jié)構(gòu)l分支結(jié)構(gòu)l循環(huán)結(jié)構(gòu)分支結(jié)構(gòu):l單分支結(jié)構(gòu)l雙分支結(jié)構(gòu) l多分支結(jié)構(gòu) 單分支結(jié)構(gòu)If-Then語句If Then End If 雙分支結(jié)構(gòu)If-Then-Else語句結(jié)構(gòu):If Then Else End If 多分支結(jié)構(gòu)1、If-Then-ElseIfl語句結(jié)構(gòu):If Then ElseIf Then Els
41、e End If 2、Select Case-End Select語句格式為Select Case Case 語句塊1 表達(dá)式的值與表達(dá)式列表1相等時執(zhí)行 Case 語句塊2 表達(dá)式的值與表達(dá)式列表2相等時執(zhí)行 Case Else 語句塊n+1 上面的情況均不符合時執(zhí)行End Select 標(biāo)準(zhǔn)模塊的編譯順序Sub 過程名() Dim 變量名as 數(shù)據(jù)類型 可省略為變量賦值 可省略輸入流程控制結(jié)構(gòu)Debug.print 變量名 可省略End sub Access對象中的事件過程模塊右擊控件,選擇屬性|事件選擇一種事件的事件過程清楚sub-end sub 中的語句輸入新的語句 習(xí)題:創(chuàng)建一個窗體
42、,此窗體包括3個文本框和一個命令按鈕,要求此窗體實現(xiàn)下列功能:l其中兩個文本框可以輸入數(shù)據(jù)l單擊命令按鈕時,在第三個文本框中顯示前兩個文本框中較大的值 8.4.3 循環(huán)語句重復(fù)執(zhí)行一行或幾行程序代碼。VBA支持以下循環(huán)語句結(jié)構(gòu):For-Next 、Do While-Loop和While-Wend1.For-Next語句語句格式為For to Step 條件語句序列 Exit For Next 說明:(1)循環(huán)控制變量的類型必須是數(shù)值型。(2)步長可以是正數(shù),也可以是負(fù)數(shù)。如果步長為1,Step短語可以省略。如果步長值為0,該循環(huán)執(zhí)行無數(shù)次,造成“死循環(huán)”(3)根據(jù)初值、終值和步長,可以計算出循
43、環(huán)的次數(shù),循環(huán)次數(shù)=(終值-初值+1)/步長 因此For語句一般用于循環(huán)次數(shù)已知的情況。(4)使用Exit For語句可以提前退出循環(huán)。例8.12 分析下列程序段的循環(huán)結(jié)構(gòu)For K=5 to 10 Step 2 K=2*KNext K 例8.13 編程用For語句求1-100之間奇數(shù)的和Public Sub gc2() Dim s, i As Integer s=0 For i = 1 To 100 Step 2 s = s + i Next i Debug.Print sEnd Sub 例8.14 在立即窗口中顯示有星號(*)組成的55的正方形Sub Pro5() Dim Str As S
44、tring For n = 1 To 5 Step 1 Str = Str + * Next n For n = 1 To 5 Step 1 Debug.Print Str Next nEnd Sub 另一種編譯方法:Sub Pro5() const MAX=5 Dim Str As String str=“” For n=1 to MAX Str=Str+”* ” Next n For n=1 to MAX Debug.Print Str Next nEnd Sub 2. Do WhileLoop循環(huán)語句 Do While 循環(huán)體 條件為真時執(zhí)行循環(huán)體 條件語句序列 Exit Do 結(jié)束條件
45、語句序列Loop 例題8.15 用Do WhileLoop語句求1+2+3+100之和Dim s, i As Integers = 0: i = 1Do While i =2時編寫程序,在立即窗口顯示n為2到10時對應(yīng)的序列值 Sub Pro6() n=1 f1=0 f2=1Do while n10 f=f1+f2 debug.print f f1=f2 f2=f n=n+1Loop End sub 3.Do UntilLoop語句條件為假時執(zhí)行循環(huán)體,條件為真時結(jié)束循環(huán)Do Until 循環(huán)體 條件語句序列 Exit Do 結(jié)束條件語句序列Loop 例題8-17 用Do UntilLoop語
46、句求1+2+3+10之和。Dim s, i As Integers = 0: i = 1Do until i10 s = s + i i = i + 1LoopDebug.Print s 4.DoLoop While語句Do 循環(huán)體 條件語句序列 Exit Do 結(jié)束條件語句序列Loop While 先執(zhí)行循環(huán)體,再判斷條件 問題:下面的程序執(zhí)行結(jié)果是什么?控制循環(huán)執(zhí)行的判斷被執(zhí)行了幾次?Dim s, i As Integers = 0: i = 1Do s = s + i i = i + 1Loop While i = 10Debug.Print s 5.DoLoop Until語句Do 循
47、環(huán)體 條件語句序列 Exit Do 結(jié)束條件語句序列Loop Until 6.While-Wend語句 While-Wend語句與Do While-Loop結(jié)構(gòu)類似,其語句格式為:While 條件式循環(huán)體Wend注意:在While-Wend語句中不能使用Exit Do語句來提早結(jié)束循環(huán)體。 例題8-18:使用WhileWend語句完成1+2+10的求和計算Sub f1()While i = 10s = s + ii = i + 1WendDebug.Print sEnd Sub 8.4.4 GoTo語句無條件轉(zhuǎn)移語句goto 標(biāo)號標(biāo)號必須是首先在程序中定義好,否則無法實現(xiàn)。標(biāo)號定義格式 標(biāo)號:
48、Dim i,sum as Integer i=1 sum=0Loop: if(i=100) sum=sum+i i=i+1 goto loop 8.5 過程調(diào)用和參數(shù)傳遞8.5.1 過程調(diào)用1、子過程的定義和調(diào)用格式:public|Privatestaticsub 過程名(形參) exit sub End subPublic:使過程適用于所有模塊中的所有其他過程Private:使該子過程只適用于同一模塊中的其他過程Static:只要模塊是打開的,運(yùn)行時變量值都將被保留。 子過程的調(diào)用Call 子過程名()或子過程名例8.18 下面編寫一個打開指定窗體的子過程openforms()Sub openforms(strformname as string)If strformname=“” then Msgbox “打開窗體名稱不能為空!”,vbcritical,”警告”End if Docmd.openform strformnameEnd sub 調(diào)用子過程:Call openforms(“學(xué)生管理”)或openforms”學(xué)生管理” 2、函數(shù)過程的定義和調(diào)用Public|PrivateStatic Function 函數(shù)過程名()as 數(shù)據(jù)類型 函數(shù)過程名= Exit Function 函數(shù)過程語句 =End Function調(diào)用過程:函數(shù)過程名()
- 溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024《增值稅法》全文學(xué)習(xí)解讀(規(guī)范增值稅的征收和繳納保護(hù)納稅人的合法權(quán)益)
- 2024《文物保護(hù)法》全文解讀學(xué)習(xí)(加強(qiáng)對文物的保護(hù)促進(jìn)科學(xué)研究工作)
- 銷售技巧培訓(xùn)課件:接近客戶的套路總結(jié)
- 20種成交的銷售話術(shù)和技巧
- 銷售技巧:接近客戶的8種套路
- 銷售套路總結(jié)
- 房產(chǎn)銷售中的常見問題及解決方法
- 銷售技巧:值得默念的成交話術(shù)
- 銷售資料:讓人舒服的35種說話方式
- 汽車銷售績效管理規(guī)范
- 銷售技巧培訓(xùn)課件:絕對成交的銷售話術(shù)
- 頂尖銷售技巧總結(jié)
- 銷售技巧:電話營銷十大定律
- 銷售逼單最好的二十三種技巧
- 銷售最常遇到的10大麻煩