模塊與VBA編程基礎(chǔ)

上傳人:san****019 文檔編號(hào):21703173 上傳時(shí)間:2021-05-07 格式:PPT 頁數(shù):93 大?。?17.81KB
收藏 版權(quán)申訴 舉報(bào) 下載
模塊與VBA編程基礎(chǔ)_第1頁
第1頁 / 共93頁
模塊與VBA編程基礎(chǔ)_第2頁
第2頁 / 共93頁
模塊與VBA編程基礎(chǔ)_第3頁
第3頁 / 共93頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《模塊與VBA編程基礎(chǔ)》由會(huì)員分享,可在線閱讀,更多相關(guān)《模塊與VBA編程基礎(chǔ)(93頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。

1、第8章 模塊與VBA編程基礎(chǔ) 模塊的基本概念 8.1創(chuàng)建模塊8.2 VBA程序設(shè)計(jì)基礎(chǔ)8.3 VBA流程控制語句8.4 過程調(diào)用和參數(shù)傳遞8.5 VBA程序的調(diào)試8.7 VBA程序運(yùn)行錯(cuò)誤處理8.6 8.1 模塊的基本概念模塊是Access中一個(gè)重要的數(shù)據(jù)庫對(duì)象,模塊中可包含一個(gè)或多個(gè)過程。過程是由一系列VBA代碼組成的。它包含許多VBA語句和方法,以執(zhí)行特定的操作或計(jì)算數(shù)值。簡而言之,模塊是裝著VBA代碼的容器。特點(diǎn):l模塊比宏的功能更強(qiáng)大,運(yùn)行速度更快,能直接運(yùn)行Windows的其他程序。 l使用模塊可以建立用戶自己的函數(shù),完成復(fù)雜的計(jì)算、執(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ù)庫對(duì)象使用的公共過程。標(biāo)準(zhǔn)模塊通常安排一些公共變量或過程供類模塊里的過程調(diào)用。在標(biāo)準(zhǔn)模塊內(nèi)部也可以定義私有變量和私有過程僅供本模塊內(nèi)部使用特點(diǎn):標(biāo)準(zhǔn)模塊中的公共變量和公共過程具有全局特性,其作用在整個(gè)應(yīng)用程序里,生命周期是伴隨著應(yīng)用程序的運(yùn)行而開始、關(guān)閉而結(jié)束。創(chuàng)建方法:選擇模塊對(duì)象,然后單擊新建按鈕或插入菜單選擇模塊。 8.1.2 類模塊類模塊是以類的形式封裝的模塊,是面向?qū)ο缶幊痰膯挝弧n惸K按照形式不同分為兩大類:l系統(tǒng)對(duì)象類模塊l用戶定義

3、類模塊 系統(tǒng)對(duì)象類模塊窗體和報(bào)表都可以含有自己的事件代碼和處理模塊,這些模塊屬于系統(tǒng)對(duì)象類模塊。進(jìn)入相應(yīng)的模塊代碼設(shè)計(jì)區(qū)域的方法:一單擊“代碼”按鈕;二是單擊事件過程。特點(diǎn):類模塊具有局部特性,其作用范圍局限在所屬窗體或報(bào)表內(nèi)部,而生命周期則是伴隨著窗體或報(bào)表的打開而開始、關(guān)閉而結(jié)束。 用戶定義類模塊創(chuàng)建方法:在模塊對(duì)象下:單擊”插入”|“類模塊” 8.2 創(chuàng)建模塊創(chuàng)建模塊就是創(chuàng)建過程過程是模塊的單元組成,由VBA代碼編寫而成。過程是一段可以實(shí)現(xiàn)某個(gè)具體功能的代碼過程分為兩類:Sub子過程和Function函數(shù)過程。一、在模塊中加入過程:創(chuàng)建方法:打開窗體或報(bào)表的事件過程進(jìn)入選中單擊模塊對(duì)象,

4、單擊“新建”一個(gè)模塊包含一個(gè)聲明區(qū)域,且可以包含一個(gè)或多個(gè)子過程或函數(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對(duì)象的RunMacro方法可以執(zhí)行設(shè)計(jì)好的宏調(diào)用格式:Docmd. RunMacro 宏名,宏的運(yùn)行次數(shù),數(shù)值表達(dá)式注意:宏名用雙引號(hào)引起來 8.3 VBA程序設(shè)計(jì)基礎(chǔ)VBA是Microsoft Office內(nèi)置的編程語言,其語法與VB語言兼容。不是一個(gè)獨(dú)立的開發(fā)工具,一般被嵌入到像Word、Excel、Access這樣的宿主軟件中,與其配套使用VBA采用了面向?qū)ο蟮某绦蛟O(shè)計(jì)方法。 8.3.1、程序語句書寫原則1、語句書寫規(guī)則通常一個(gè)語句寫在一行,語句較長一行寫不下時(shí),可以用續(xù)行符(_)將語句連續(xù)寫在下一行可以使用冒號(hào)將幾個(gè)語句分隔寫在一

8、行中 例如模塊2當(dāng)輸入一行語句并按下回車鍵后,代碼以紅色文本顯示表明該語句存在錯(cuò)誤2、注釋語句兩種方式::Rem 注釋語句注釋語句注釋默認(rèn)以綠色文本顯示。還可以利用“編輯”工具欄中的“設(shè)置注釋塊”按鈕和“解除注釋塊”按鈕對(duì)大塊代碼進(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對(duì)象和集合

9、對(duì)象:在采用面向?qū)ο蟪绦蛟O(shè)計(jì)方法的程序中,程序處理的目標(biāo)被抽象成了一個(gè)個(gè)對(duì)象,每個(gè)對(duì)象具有各自的屬性、方法和事件。一個(gè)對(duì)象就是一個(gè)實(shí)體。對(duì)象的方法就是對(duì)象的可以執(zhí)行的行為,一個(gè)對(duì)象都有多種方法。對(duì)象集合:Access數(shù)據(jù)庫窗口左側(cè)的7類對(duì)象列表形成對(duì)象類。7類對(duì)象。 集合表示的是某類對(duì)象所包含的實(shí)例構(gòu)成 Access中除了數(shù)據(jù)庫的7類個(gè)對(duì)象外,還提供一個(gè)重要的對(duì)象:DoCmd。主要功能是通過調(diào)用包含在內(nèi)部的方法實(shí)現(xiàn)VBA編輯中對(duì)Access的操作。 屬性和方法描述了對(duì)象的性質(zhì)和行為格式:對(duì)象.屬性或?qū)ο?行為屬性:用來表示對(duì)象的狀態(tài),如窗體的Name(名稱)屬性、Caption(標(biāo)題)屬性等。

10、 如:Label1.caption方法:用來描述對(duì)象的行為,如窗體有Refresh方法,例如,利用Docmd對(duì)象的方法可以打開報(bào)表“教師信息”,其格式為: Docmd.OpenReport “教師信息” Debug對(duì)象有Print方法等。 Debug對(duì)象:該對(duì)象可在調(diào)試階段用Print方法在立即窗口輸出信息 Debug.print2屬性和方法 3事件和事件過程 事件:是對(duì)象可以識(shí)別的動(dòng)作,通常由系統(tǒng)預(yù)先定義(附錄E列出了Access數(shù)據(jù)庫對(duì)象的事件)事件過程:對(duì)象在識(shí)別了所發(fā)生的事件后執(zhí)行的程序例如,下面的事件過程描述了單擊按鈕之后所發(fā)生的一系列動(dòng)作。Private Sub Command1_

11、Click() Command1.Caption = 首都經(jīng)濟(jì)貿(mào)易大學(xué)End Sub 8.3.3 數(shù)據(jù)類型和數(shù)據(jù)庫對(duì)象Access數(shù)據(jù)庫系統(tǒng)創(chuàng)建表對(duì)象時(shí)所涉及的字段數(shù)據(jù)類型(除了OLE對(duì)象和備注數(shù)據(jù)類型外),在VBA中都有數(shù)據(jù)類型相對(duì)應(yīng)一、標(biāo)準(zhǔn)數(shù)據(jù)類型定義數(shù)據(jù)類型時(shí),也可以用符號(hào)定義Dim a as single dim a!1、布爾型數(shù)據(jù):兩個(gè)值True和False。True=-1 False=02、日期型數(shù)據(jù):前后必須用#號(hào),如#2012/11/233、變體類型數(shù)據(jù):除定長字符串類型及用戶自定義類型外,包含其他任何類型數(shù)據(jù)。VBA中規(guī)定,程序中如果沒有顯式聲明或使用符號(hào)來定義變量的數(shù)據(jù)類型

12、,則默認(rèn)為變體類型 數(shù)據(jù)類型類型標(biāo)識(shí)符號(hà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例:定義一個(gè)學(xué)生信息數(shù)據(jù)類型Type NewStu

13、denttxtNo As String*7 學(xué)號(hào),7位定長字符串txtName As string 姓名,變長字符串txtSex As String*1 性別,1位定長字符串txtAge As Integer 年齡,整型 End Type 當(dāng)需要建立一個(gè)變量用來保存包含不同數(shù)據(jù)類型字段的數(shù)據(jù)表的一條或多條記錄時(shí),用戶自定義數(shù)據(jù)類型就特別有用。一般用戶自定義數(shù)據(jù)類型使用時(shí),首先要在模塊區(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ù)庫對(duì)象(略)8.3.4變量與常量變量是指程序運(yùn)行時(shí)值會(huì)發(fā)生變化的數(shù)據(jù)。程序運(yùn)行時(shí),變量代表的就是內(nèi)存中的某塊臨時(shí)存儲(chǔ)空間 1、變量的命名規(guī)則(1)以字母或漢字開頭,后可跟字母、數(shù)字或下劃線。(2)變量名最長為

15、255個(gè)字符。(3)不區(qū)分變量名的大小寫(4)不能包含空格2、常量是指在程序中可以直接引用的實(shí)際值,其值在程序運(yùn)行中不變。VBA中有三種常量:直接常量、符號(hào)常量、系統(tǒng)常量。 一變量的聲明變 量 聲 明 就 是 定 義 變 量 名 稱 及 類 型 , 使 系 統(tǒng) 為 變 量分 配 存 儲(chǔ) 空 間 。 一 般 , 變 量 在 使 用 前 應(yīng) 該 先 聲 明 。VBA聲 明 變 量 有 兩 種 方 法 :顯式聲明 隱含聲明u顯式聲明:格式為 Dim 變量名 AS 數(shù)據(jù)類型(或者字符)例如 Dim ab As integer , sum As single或 Dim ab%, sum!u隱含聲明沒有直

16、接定義而通過一個(gè)值指定給變量名,或dim定義中省略了AS 數(shù)據(jù)類型,或在變量名稱后沒有附加類型說明字符來指明隱含變量的數(shù)據(jù)類型時(shí),默認(rèn)為Variant數(shù)據(jù)類型。例如:Dim m,n m,n為變體變量 ab=123 ab為變體變量,值是123 建 議 在 程 序 中 顯 式 聲 明 變 量 二、強(qiáng)制聲明在默認(rèn)情況下,VBA允許在代碼中使用未聲明的變量,如果在模塊設(shè)計(jì)窗口的頂部“通用-聲明”區(qū)域中,加入語句:Option Explicit強(qiáng)制要求所有變量必須定義才能使用。這種方法只為當(dāng)前模塊設(shè)置了自動(dòng)變量聲明功能。 如果想為所有模塊都啟用此功能,“工具”菜單“選項(xiàng)”對(duì)話框,在“編輯器”選項(xiàng)卡中選中

17、“要求變量聲明”選項(xiàng)即可。 三、變量的作用域VBA編程中,變量定義的位置和方式不同,則它存在的時(shí)間和起作用的范圍也有所不同。這就是變量的生命周期和作用域。VBA中變量的作用域有3個(gè)層次: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ù)庫對(duì)象變量Access建立的數(shù)據(jù)庫對(duì)象及其屬性均可被看成是VBA程序代碼中的變量及其指定的值來加以引用。引用格式:Forms!窗體名稱!控件名稱.屬性名稱或Reports!報(bào)表名稱!控件名稱.屬性名稱如果對(duì)象名稱中含有空格或標(biāo)點(diǎn)符號(hào),就要用方括號(hào)把名稱括起來。例如:forms!系統(tǒng)登錄!用戶名=“cueb” forms!系統(tǒng)登錄!用 戶名=“cueb”此外還可以用Set關(guān)鍵字來建立控件對(duì)象的變量。當(dāng)需要多次引用對(duì)象時(shí),這種方法很方便。例如:Dim txtName as control 定義控件類型變量Set txtname= Forms!窗體名稱!控

19、件名稱.屬性名稱 txtName=“馮偉” 五、數(shù)組問題:求10個(gè)成績的平均值,并對(duì)它們按照從大到小排序,這10個(gè)數(shù)怎么組織?如果在程序中要對(duì)一組數(shù)據(jù)進(jìn)行處理,通常的解決方法是將這組數(shù)放在數(shù)組中。 放在10個(gè)變量中?放在一個(gè)數(shù)組中? 數(shù)組是一組相同數(shù)據(jù)類型的數(shù)據(jù)的集合 1一維數(shù)組的定義 使用數(shù)組必須先定義數(shù)組,格式為Dim 數(shù)組名(to)As 例如,dim score(1 to 10)as Integer定義了一個(gè)有10個(gè)元素的整型數(shù)組,所有數(shù)組元素具有同一個(gè)標(biāo)識(shí)即數(shù)組名,數(shù)組名后括號(hào)內(nèi)的序號(hào)稱為數(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í)數(shù)組名的命名規(guī)則與變量名的命名規(guī)則相同(2)一般在定義數(shù)組時(shí)應(yīng)給出數(shù)組下標(biāo)的上限和下限。但也可以省略下限,缺省為0。例如,Dim a(10) As Single默認(rèn)情況下,數(shù)組a由11個(gè)元素組成。若希望下標(biāo)從1開始,可在模塊的通用聲明段使用Option Base語句聲明。其使用格式為 Option Base 1 (3)和不能使用變量,必須是常量,常量可以是字面常量或符號(hào)常量,一般是整型常量。(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、動(dòng)態(tài)數(shù)組當(dāng)預(yù)先不知道數(shù)組定義需要多少元素時(shí),可以把數(shù)組定義為動(dòng)態(tài)數(shù)組定義和使用方法:先用dim顯式定義數(shù)組但不指明數(shù)組元素?cái)?shù)目,然后用Redim關(guān)鍵字來決定數(shù)組中包含的元素?cái)?shù)。例:dim newarray() as long Redim newarray(9,9,9) 六、變量標(biāo)識(shí)符命名法則對(duì)于控件對(duì)象定義變量時(shí),可以用小寫字母作為變量名的前綴。例如

22、:文本框用txt,定義一個(gè)文本框變量名為txtName表8.4例出了最常用變量標(biāo)識(shí)符的前綴。為了易于記憶變量名 p212 七、符號(hào)常量(固定不變的值)如果程序中多處用到某個(gè)常量,將其定義成符號(hào)常量可增加代碼的可讀性,也便于維護(hù)。 用關(guān)鍵字Const定義符號(hào)常量:格式:Const 符號(hào)常量名稱=常量值 Const PI =3.1415926符號(hào)常量一般需要大寫,以便與變量區(qū)分在定義符號(hào)常量時(shí),如果前面加上Global或Public關(guān)鍵字,這一符號(hào)常量會(huì)涵蓋全局或模塊級(jí)別范圍。例如:Global Const PI=3.1415926 八、系統(tǒng)常量True False Yes No On Off N

23、ull等單擊“視圖”菜單選擇“對(duì)象瀏覽器”就可以查看Access、VBA等對(duì)象庫中提供的常量。 8.3.5 常用標(biāo)準(zhǔn)函數(shù)VBA提供了大量的內(nèi)置函數(shù),這些函數(shù)極大地豐富了VBA的功能 了解和使用函數(shù),應(yīng)從下面三個(gè)方面:函數(shù)名參數(shù)(指參數(shù)的個(gè)數(shù)、順序和類型 )函數(shù)值(每個(gè)函數(shù)被調(diào)用時(shí)都會(huì)有一個(gè)返回值)常用函數(shù)的使用可以參照附錄A學(xué)習(xí)下面介紹一些常用函數(shù) 一、算術(shù)函數(shù)(完成數(shù)學(xué)計(jì)算功能)1、絕對(duì)值函數(shù):Abs()返回?cái)?shù)值表達(dá)式的絕對(duì)值。如Abs(-3)=32、向下取整函數(shù):Int()向下取整數(shù)的結(jié)果,參數(shù)為負(fù)值時(shí)返回小于等于參數(shù)值的第一個(gè)負(fù)數(shù)。只取整數(shù)部分,不考慮四舍五入3、取整函數(shù):Fix()參數(shù)

24、為正數(shù)時(shí)與Int結(jié)果一樣,參數(shù)為負(fù)數(shù)時(shí)返回大于等參數(shù)值的第一個(gè)負(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è)置檢索的起始位置。如省略,從第一個(gè)字符開始檢索。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ù)。注意:定長字符串,其長度是定義時(shí)的長度,和字符串實(shí)際值無關(guān)。例:dim str as string*10Dim I Str=“123”i=12Len1=Len(“12345”) =

26、5Len2=Len(12) 錯(cuò)誤Len3=Len(i) =2Len4=Len (“考試中心”)=4Len5=Len(str) =10 3、字符串截取函數(shù)Left right midMid(,N2):從字符串左邊第N1個(gè)字符起截取N2個(gè)字符。缺省N2截取所有字符。4、生成空格字符函數(shù):Space()返回?cái)?shù)值表達(dá)式的值指定的空格字符數(shù)5、大小寫轉(zhuǎn)換函數(shù):ucase:小寫轉(zhuǎn)換成大寫Lcase:大寫轉(zhuǎn)換成小寫6、刪除空格函數(shù):LTrim():刪除開始的空格RTrim():刪除尾部的空格Trim():刪除開始和尾部的空格 三、日期/時(shí)間函數(shù)1、獲取系統(tǒng)日期和時(shí)間函數(shù)Date() time() Now()

27、2、截取日期分量函數(shù)Year() Month() Day() Weekday()3、截取時(shí)間分量函數(shù) Hour() Minute() Second()4、日期/時(shí)間增加或減少一個(gè)時(shí)間間隔DateAdd(,)對(duì)表達(dá)式表示的日期按照間隔類型加上或減去指定的時(shí)間間隔值。間隔值正數(shù)為加,負(fù)數(shù)為減間隔類型參照8.6 5、計(jì)算兩個(gè)日期的間隔值函數(shù)DateDiff(,W1,W2)返回日期1和日期2之間按照間隔類型所指定的時(shí)間間隔數(shù)目。W1可選參數(shù),指定一個(gè)星期的第一天是星期幾的常數(shù)W2可選參數(shù),指定一年的第一個(gè)周的常數(shù)(參照表8.7)6、返回日期指定時(shí)間部分函數(shù)DatePart(,W1,W2)返回日期中按照

28、間隔類型所指定的時(shí)間部分值7、返回包含指定年月日的日期函數(shù)DateSerial(表達(dá)式1,表達(dá)式2,表達(dá)式3)返回由表達(dá)式1值為年,表達(dá)式2值為月,表達(dá)式3值為日而組成的日期值。每個(gè)參數(shù)的取值范圍應(yīng)該是可接受的。當(dāng)任何一個(gè)參數(shù)的取值 超出可接受范圍時(shí),它會(huì)適時(shí)進(jìn)位到下一個(gè)較大的時(shí)間單位。 四、類型轉(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)空格表示有一正號(hào)4、字符串轉(zhuǎn)換成數(shù)字函數(shù):Val()將數(shù)字字符

29、串轉(zhuǎn)換成數(shù)值型數(shù)字。注意,數(shù)字串轉(zhuǎn)換成自動(dòng)將字符串中的空格、制表符和換行符去掉,當(dāng)遇到它不能識(shí)別為數(shù)字的第一個(gè)字符時(shí),停止讀入字符串 5、字符串轉(zhuǎn)換日期日期函數(shù):DateValue()將字符串轉(zhuǎn)換成日期值例:D=DateValue(“February 29,2004”),返回#2004-2-29#6、Nz函數(shù):Nz(表達(dá)式或字段屬性值,規(guī)定值當(dāng)一個(gè)表達(dá)式或字段屬性值為Null時(shí),函數(shù)可返回0、零長度字符串(”)或其他指定的值。當(dāng)缺省“規(guī)定值”時(shí),如果表達(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ù)除法():對(duì)兩個(gè)數(shù)做除法運(yùn)算并返回一個(gè)整數(shù)如果操作數(shù)有小數(shù)部分,舍去小數(shù)后再運(yùn)算,如果結(jié)果有小數(shù)也要舍去求模運(yùn)算(Mod):求余數(shù)如果操作數(shù)是小數(shù),四舍五入變成整數(shù)后再運(yùn)算;余數(shù)的符號(hào)跟被除數(shù)相同。 2、關(guān)系運(yùn)算符= = 運(yùn)算結(jié)果為True或False。進(jìn)行算術(shù)運(yùn)算時(shí),True當(dāng)成-1False當(dāng)成03、邏輯運(yùn)算符And(與) Or(或) Not(非)運(yùn)算結(jié)果為True或False4、連接運(yùn)算符&和+&:將兩個(gè)表達(dá)式作字符串連接例:”

31、2+3”&”=”&(2+3) 運(yùn)算結(jié)果為2+3=5+:將兩個(gè)表達(dá)式均為字符串時(shí),才將兩個(gè)表達(dá)式連接成一個(gè)新字符串。例:”2+3”&”=”+(2+3)出錯(cuò)二、表達(dá)式和優(yōu)先級(jí)(參照表8.9)p220 一個(gè)語句就是能夠完成某項(xiàng)操作的一條命令。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í)行時(shí),該語句中的一部分操作即循環(huán)體被重復(fù)執(zhí)行多次,

32、需要使用循環(huán)語句8.4 VBA流程控制語句 8.4 VBA流程控制語句8.4.1 賦值語句是最基本的語句。它的功能是給變量或?qū)ο蟮膶傩再x值。其格式為 例如,Ra = 0.1 給變量賦值Text1.Value = 歡迎使用ACCESS 給控件的屬性賦值“=”為賦值號(hào),表示賦值的動(dòng)作,不要理解為數(shù)學(xué)上的等號(hào)。 程序的順序結(jié)構(gòu)例8-1 創(chuàng)建如圖8-5所示的窗體“計(jì)算圓的面積和周長”。要求在文本框中輸入了圓的半徑后,單擊“計(jì)算”按鈕,在窗體的另外兩個(gè)文本框中分別輸出圓的面積和周長。 “計(jì)算”按鈕的Click事件過程如下。Private Sub command0_Click()定義變量和符號(hào)常量Dim

33、r As Single r為圓的半徑Dim s As Single s為圓的面積Dim l As Single l為圓的周長Const PI = 3.1415926給變量r賦值r = text0計(jì)算圓的面積和周長s = PI * r 2l = 2 * PI * r用文本框輸出結(jié)果 text2 = stext4 = lEnd Sub 條件表達(dá)式語句塊當(dāng)條件為假時(shí)當(dāng)條件為真時(shí)開始結(jié)束 語句塊語句塊基本語句條件表達(dá)式當(dāng)條件為假時(shí)當(dāng)條件為真時(shí) 8.4.2條件語句1、If-Then語句(單分支結(jié)構(gòu))流程圖見P222If Then End If或 者 If Then 例 8.4 自 定 義 過 程 Pro

34、cedure1的 功 能 是 : 如 果 當(dāng) 前 系 統(tǒng) 時(shí) 間超 過 12點(diǎn) , 則 在 立 即 窗 口 顯 示 “ 下 午 好 ! ”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)時(shí)間為12點(diǎn)至18點(diǎn),則在立即窗口顯示“下午好!”,否則顯示“歡迎下次光臨!” 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)編程實(shí)現(xiàn)由X的值計(jì)算表達(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 密碼錯(cuò)誤!, vbOKOnly 顯示消息框 Me!txt用戶名 = 使文本

37、框清空 Me!txt口令 = Me!txt用戶名.SetFocus 使文本框獲得焦點(diǎn),準(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)時(shí)間為8至12點(diǎn)鐘之間,在立即窗口顯示“上午好!”,系統(tǒng)時(shí)間為12點(diǎn)至18點(diǎn),則顯示“下午好!”,其他時(shí)間均顯示“歡迎下次光臨!”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)條件比較多時(shí),用If-End If需要多重嵌套,使用程序變得復(fù)雜。用Select Case-End Select語句就可以方便解決語句格式為Select Case Case 語句塊1 表達(dá)式的值與表達(dá)式列表1相等時(shí)執(zhí)行 Case 語句塊2 表達(dá)式的值與表達(dá)式列表2相等時(shí)執(zhí)行 Case Else 語句塊n+1 上面的情況均不符合時(shí)執(zhí)行End Select 說明:(1

39、)執(zhí)行過程是先計(jì)算Select Case后的變量或表達(dá)式的值,然后從上至下逐個(gè)比較,決定執(zhí)行哪一個(gè)語句塊。如果有多個(gè)Case后的表達(dá)式列表與其相匹配,則只執(zhí)行第一個(gè)Case后的語句塊。(2)Select Case后的變量或表達(dá)式只能是數(shù)值型或字符型表達(dá)式。(3)Case表達(dá)式可以是: 單一數(shù)值: 5 用逗號(hào)分隔的一組枚舉表達(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(索引式,選項(xiàng)1,選項(xiàng)2,選項(xiàng)n)根據(jù)索引式的值來返回選項(xiàng)列表中的某個(gè)值。索引值為1,返回選項(xiàng)1,索引值為2,返回選項(xiàng)2,以此類推。注意:只有索引值在界于1到可選擇項(xiàng)目數(shù)之間,才返回其后的選項(xiàng)值,否則返回?zé)o效值Null 知識(shí)回顧程序流程控制結(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相等時(shí)執(zhí)行 Case 語句塊2 表達(dá)式的值與表達(dá)式列表2相等時(shí)執(zhí)行 Case Else 語句塊n+1 上面的情況均不符合時(shí)執(zhí)行End Select 標(biāo)準(zhǔn)模塊的編譯順序Sub 過程名() Dim 變量名as 數(shù)據(jù)類型 可省略為變量賦值 可省略輸入流程控制結(jié)構(gòu)Debug.print 變量名 可省略End sub Access對(duì)象中的事件過程模塊右擊控件,選擇屬性|事件選擇一種事件的事件過程清楚sub-end sub 中的語句輸入新的語句 習(xí)題:創(chuàng)建一個(gè)窗體

42、,此窗體包括3個(gè)文本框和一個(gè)命令按鈕,要求此窗體實(shí)現(xiàn)下列功能:l其中兩個(gè)文本框可以輸入數(shù)據(jù)l單擊命令按鈕時(shí),在第三個(gè)文本框中顯示前兩個(gè)文本框中較大的值 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ù)初值、終值和步長,可以計(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 在立即窗口中顯示有星號(hào)(*)組成的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)體 條件為真時(shí)執(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時(shí)編寫程序,在立即窗口顯示n為2到10時(shí)對(duì)應(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語句條件為假時(shí)執(zhí)行循環(huán)體,條件為真時(shí)結(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的求和計(jì)算Sub f1()While i = 10s = s + ii = i + 1WendDebug.Print sEnd Sub 8.4.4 GoTo語句無條件轉(zhuǎn)移語句goto 標(biāo)號(hào)標(biāo)號(hào)必須是首先在程序中定義好,否則無法實(shí)現(xiàn)。標(biāo)號(hào)定義格式 標(biāo)號(hà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)行時(shí)變量值都將被保留。 子過程的調(diào)用Call 子過程名()或子過程名例8.18 下面編寫一個(gè)打開指定窗體的子過程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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔

相關(guān)搜索

關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!