Access數(shù)據(jù)庫(kù)基礎(chǔ)與應(yīng)用教程人民郵電出版社ch.ppt
《Access數(shù)據(jù)庫(kù)基礎(chǔ)與應(yīng)用教程人民郵電出版社ch.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《Access數(shù)據(jù)庫(kù)基礎(chǔ)與應(yīng)用教程人民郵電出版社ch.ppt(234頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第9章,,為了能解決一些實(shí)際開發(fā)活動(dòng)中的復(fù)雜的數(shù)據(jù)庫(kù)應(yīng)用問題,Access數(shù)據(jù)庫(kù)系統(tǒng)提供了“模塊”對(duì)象來(lái)解決此類難題。本章主要介紹Access數(shù)據(jù)庫(kù)的模塊的基本概念及VBA語(yǔ)言的程序設(shè)計(jì)。,模塊與VBA程序設(shè)計(jì),第9章模塊與VBA程序設(shè)計(jì),本章主要內(nèi)容,退出,9.1模塊概述9.2VBA程序設(shè)計(jì)概述9.3VBA編程環(huán)境——VBE窗口9.4VBA編程基礎(chǔ)9.5VBA程序語(yǔ)句9.6VBA中的常用操作方法9.7VBA程序調(diào)試和錯(cuò)誤處理,9.1模塊概述,模塊是Access數(shù)據(jù)庫(kù)中的一個(gè)數(shù)據(jù)庫(kù)對(duì)象,它以VBA(VisualBasicforApplication)語(yǔ)言為基礎(chǔ)編寫。通俗來(lái)說,模塊是Access數(shù)據(jù)庫(kù)中用于保存VBA程序代碼的容器。模塊基本上是由聲明、語(yǔ)句和(Sub和Function)過程組成的集合,它們作為一個(gè)已命名的單元存儲(chǔ)在一起,對(duì)VBA程序代碼進(jìn)行組織。Access有兩種類型的模塊:標(biāo)準(zhǔn)模塊和類模塊。,9.1.1模塊類型,1.標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊包含與任何其他對(duì)象都無(wú)關(guān)的常規(guī)過程,以及可以從數(shù)據(jù)庫(kù)任何位置運(yùn)行的經(jīng)常使用的過程。在標(biāo)準(zhǔn)模塊中,可以放置希望供整個(gè)數(shù)據(jù)庫(kù)的其他過程使用的Sub過程和Function過程。標(biāo)準(zhǔn)模塊中的公共變量或公共過程具有全局特性,其作用范圍在整個(gè)應(yīng)用程序里,生命周期是伴隨著應(yīng)用程序的運(yùn)行而開始、關(guān)閉而結(jié)束。,9.1.1模塊類型(續(xù)),類模塊是可以包含新對(duì)象的定義的模塊。一個(gè)類的每個(gè)實(shí)例都新建一個(gè)對(duì)象。窗體模塊和報(bào)表模塊都是類模塊,它們從屬于各自的窗體和報(bào)表。窗體模塊和報(bào)表模塊通常都含有事件過程,而過程的運(yùn)行用于響應(yīng)窗體或報(bào)表上的事件。窗體模塊和報(bào)表模塊中的過程可以調(diào)用標(biāo)準(zhǔn)模塊中已經(jīng)定義好的過程。為窗體或報(bào)表創(chuàng)建第一個(gè)事件過程時(shí),Access將自動(dòng)創(chuàng)建與之關(guān)聯(lián)的窗體模塊或報(bào)表模塊。窗體模塊和報(bào)表模塊具有局部特性,其作用范圍局限在所屬窗體或報(bào)表內(nèi)部,而生命周期則是伴隨著窗體或報(bào)表的打開而開始、關(guān)閉而結(jié)束。,9.1.2模塊的組成,模塊是裝著VBA代碼的容器。一個(gè)模塊包含一個(gè)聲明區(qū)域,包含一個(gè)或多個(gè)過程。如圖9-1所示。過程是模塊的單元組成,用VBA代碼編寫而成。過程分為Sub過程和Function過程兩種類型。,1.聲明區(qū)域,聲明部分主要包括:Option聲明、變量或常量或自定義數(shù)據(jù)類型的聲明。模塊中可以使用的Option聲明語(yǔ)句包括:(1)OptionBase1聲明模塊中數(shù)組下標(biāo)的默認(rèn)下界為1,不聲明則默認(rèn)下界為0。(2)OptionCompareDatabase聲明模塊中需要字符串比較時(shí),將根據(jù)數(shù)據(jù)庫(kù)的區(qū)域ID確定的排序級(jí)別進(jìn)行比較;不聲明則按字符ASClI碼進(jìn)行比較。(3)OptionExplicit強(qiáng)制模塊用到的變量必須先進(jìn)行聲明。此外,有關(guān)變量或常量的聲明的語(yǔ)句格式將在9.4節(jié)介紹。,2.Sub過程,,Sub過程又稱為子過程。執(zhí)行一系列操作,無(wú)返回值。Sub過程的定義格式如下:Sub過程名(形參列表)[VBA程序代碼]EndSubVBA提供了一個(gè)關(guān)鍵字Call,可以調(diào)用該子過程。此外,可以引用該過程名來(lái)調(diào)用該子過程,此時(shí),過程名后不能帶有一對(duì)圓括號(hào)。,3.Function過程,,Function過程又稱為函數(shù)過程。執(zhí)行一系列操作,有返回值。Function過程的定義格式如下:Function過程名(形參列表)[VBA程序代碼]EndFunction函數(shù)過程不能使用Call來(lái)調(diào)用執(zhí)行,需要直接引用函數(shù)過程名并必須后帶一對(duì)圓括號(hào)。,9.2VBA程序設(shè)計(jì)概述,,VB(VisualBasic)是一種面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言,微軟公司將其引用到其他常用的應(yīng)用程序中,例如,在Office的成員Word、Excel、Access中,這種夾在應(yīng)用程序中的VisualBasic版本稱之為VBA(VisualBasicforApplication)。VBA是VB的子集。Access中使用的編程語(yǔ)言是VBA語(yǔ)言。當(dāng)某些操作不能用其他Access對(duì)象實(shí)現(xiàn)或?qū)崿F(xiàn)起來(lái)很困難時(shí),就可以在模塊中編寫VBA程序代碼,以完成這些復(fù)雜任務(wù)。,,Access內(nèi)部提供了功能強(qiáng)大的向?qū)C(jī)制,能處理基本的數(shù)據(jù)庫(kù)操作。在此基礎(chǔ)上再編寫適當(dāng)?shù)某绦虼a,可以極大的改善程序功能。VBA是面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。面向?qū)ο蟪绦蛟O(shè)計(jì)是一種以對(duì)象為基礎(chǔ),以事件來(lái)驅(qū)動(dòng)對(duì)象的程序設(shè)計(jì)方法。,9.2.1對(duì)象和對(duì)象名,,對(duì)象是VBA應(yīng)用程序的基礎(chǔ)構(gòu)件。在開發(fā)一個(gè)Access數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)時(shí),必須先建立各種對(duì)象,然后圍繞對(duì)象進(jìn)行程序設(shè)計(jì)。在Access中,表、查詢、窗體、報(bào)表等是對(duì)象,字段、窗體和報(bào)表中的控件(如標(biāo)簽、文本框、按鈕等)也是對(duì)象。每個(gè)對(duì)象均有名稱,稱為對(duì)象名。每個(gè)對(duì)象都有其屬性、方法、事件等。對(duì)象有效的名稱必須符合Access的標(biāo)準(zhǔn)命名規(guī)則,窗體、報(bào)表、字段等對(duì)象的名稱不能超過64個(gè)字符,控件對(duì)象名稱長(zhǎng)度不能超過255個(gè)字符。,9.2.1對(duì)象和對(duì)象名(續(xù)),,對(duì)于未綁定控件,默認(rèn)名稱是控件的類型加上一個(gè)唯一的整數(shù)。例如,對(duì)于新建的文本框控件,其默認(rèn)名稱為:Text0、Text1等,以此類推。對(duì)于綁定控件,如果通過從字段列表中拖放字段來(lái)創(chuàng)建控件,則對(duì)象的默認(rèn)名稱是記錄源中字段的名稱。在“設(shè)計(jì)視圖”(如窗體“設(shè)計(jì)視圖”)窗口中,如果要修改某個(gè)對(duì)象的名稱,可在該對(duì)象“屬性”對(duì)話框中,對(duì)“名稱”屬性賦予新的對(duì)象名稱。注意:同一窗體、報(bào)表或數(shù)據(jù)訪問頁(yè)上的控件的名稱不能相同。但不同窗體、報(bào)表或數(shù)據(jù)訪問頁(yè)上的控件的名稱可以相同。,9.2.1對(duì)象和對(duì)象名(續(xù)),,Access數(shù)據(jù)庫(kù)由表、查詢、窗體、報(bào)表、頁(yè)、宏和模塊對(duì)象列表構(gòu)成,形成不同的類。集合表達(dá)的是某類對(duì)象所包含的實(shí)例構(gòu)成。,9.2.2對(duì)象的屬性,,對(duì)象屬性是描述對(duì)象的特征。對(duì)象的每個(gè)屬性都有一個(gè)默認(rèn)值,這在“屬性”對(duì)話框中可以看到。如果不改變?cè)撝?,?yīng)用程序就使用該默認(rèn)值,如果默認(rèn)值不能滿足要求,就要對(duì)它重新設(shè)置。在VBA代碼中,對(duì)象屬性的引用方式:對(duì)象名.屬性名Access中“對(duì)象”可以是單一對(duì)象,也可以是對(duì)象的集合。例如,Label0.caption中的Label0表示一個(gè)“標(biāo)簽”對(duì)象,Reports.Item(0)表示報(bào)表集合中的第一個(gè)報(bào)表對(duì)象。,9.2.2對(duì)象的屬性(續(xù)),,在可視化的“設(shè)計(jì)視圖”(如窗體“設(shè)計(jì)視圖”)窗口中,若要查看或設(shè)置某一對(duì)象的屬性,可以通過“屬性”對(duì)話框來(lái)進(jìn)行,不過此時(shí)在“屬性”對(duì)話框中列出的屬性名是中文的,如圖9-2所示。但在VBE窗口中,輸入某一對(duì)象名及“.”后彈出的“屬性及方法”列表框中的屬性名或方法名全都是英文的,如圖9-3所示。,英文的,中文的,表9-1窗體常用的格式屬性,,表9-2窗體常用的數(shù)據(jù)屬性,,表9-3文本框常用的屬性,,表9-4命令按鈕常用的屬性,,9.2.3對(duì)象的方法,,對(duì)象的方法就是對(duì)象可以執(zhí)行的行為。如果說,對(duì)象的屬性是靜態(tài)規(guī)格,那么對(duì)象的方法便是動(dòng)態(tài)操作,目的是改變對(duì)象的當(dāng)前狀態(tài)。在VBA代碼中,對(duì)象方法的引用方式:對(duì)象名.方法名例如,將光標(biāo)插入點(diǎn)移入名為Text0文本框內(nèi)的SetFocus方法引用方式為:Text0.SetFocus,9.2.3對(duì)象的方法(續(xù)),,Access應(yīng)用程序的各個(gè)對(duì)象都有一些方法可供調(diào)用。在VBE窗口中,輸入某一對(duì)象名及“.”后彈出的“屬性及方法”列表框中,列出了該對(duì)象可用的的屬性名或方法名。此外,Access還提供一個(gè)重要的對(duì)象:DoCmd對(duì)象。它的主要功能是通過調(diào)用包含在內(nèi)部的方法來(lái)實(shí)現(xiàn)VBA編程中對(duì)Access的操作。例如,利用DoCmd對(duì)象的OpenReport方法來(lái)打開“課程信息”報(bào)表的語(yǔ)句格式為:DoCmd.OpenReport"課程信息",9.2.4對(duì)象的事件,,事件是Access窗體或報(bào)表及其上的控件等對(duì)象可以“辯識(shí)”的動(dòng)作,是對(duì)象對(duì)外部操作的響應(yīng),如在程序執(zhí)行時(shí),單擊命令按鈕會(huì)產(chǎn)生一個(gè)Click事件。事件的發(fā)生通常是用戶操作的結(jié)果。事件在某個(gè)對(duì)象上發(fā)生或?qū)δ硞€(gè)對(duì)象發(fā)生。Access可以響應(yīng)多種類型的事件:鼠標(biāo)單擊、數(shù)據(jù)更改、窗體打開或關(guān)閉及許多其他類型的事件。,9.2.5對(duì)象的事件(續(xù)),,Access數(shù)據(jù)庫(kù)系統(tǒng)里,可以通過兩種方式來(lái)處理窗體、報(bào)表或控件的事件響應(yīng)。一是使用宏對(duì)象來(lái)設(shè)置事件屬性;二是為某個(gè)事件編寫VBA代碼過程,完成指定動(dòng)作,這樣的代碼過程稱為事件過程或事件響應(yīng)代碼。每個(gè)對(duì)象都有一系列預(yù)先定義的事件集。例如,命令按鈕能響應(yīng)單擊、獲取焦點(diǎn)、失去焦點(diǎn)等事件,可以通過屬性對(duì)話框中的“事件”選項(xiàng)卡查看。實(shí)際上,Access窗體、報(bào)表或控件的事件有很多,其中一部分對(duì)象事件如表9-5、表9-6、表9-7、表9-8、表9-9所示。,表9-5窗體對(duì)象的部分事件,,注意:首次打開窗體時(shí),下列事件將按如下順序發(fā)生:Open事件→Load事件→Resize事件→Activate事件→Current事件,表9-6報(bào)表對(duì)象的部分事件,,表9-7命令按鈕對(duì)象的部分事件,,表9-8標(biāo)簽對(duì)象的部分事件,表9-9文本框?qū)ο蟮牟糠质录?,9.2.5事件過程,,事件過程是事件處理程序,與事件一一對(duì)應(yīng)。它是為響應(yīng)由用戶或程序代碼引發(fā)的事件或由系統(tǒng)觸發(fā)的事件而運(yùn)行的過程。過程包含一系列的VBA語(yǔ)句,用以執(zhí)行操作或計(jì)算值。用戶編寫的VBA程序代碼是放置在稱為過程的單元中。例如,需要命令按鈕響應(yīng)Click事件,就把完成Click事件功能的VBA程序語(yǔ)句代碼放置到該命令按鈕的Click事件的事件過程中。,9.2.6事件過程(續(xù)),,事件過程的形式如下:PrivateSub對(duì)象名_事件名()…(事件過程代碼)EndSub,例9-1(事件過程例子),例9-1新建一個(gè)窗體并在其上放置一個(gè)命令按鈕,然后創(chuàng)建命令按鈕的“單擊”事件響應(yīng)過程。當(dāng)運(yùn)行該窗體時(shí),單擊該窗體中的命令按鈕,顯出一個(gè)含有“歡迎光臨!”文字的消息框。,例9-1(續(xù)),圖9-7命令按鈕的“Click”事件過程代碼,9.3VBA編程環(huán)境——VBE窗口,,Access提供了一個(gè)VBA的編程環(huán)境VBE(VisualBasicEditor)窗口,即VisualBasic編輯器窗口,它是編寫和調(diào)試VBA程序代碼的重要環(huán)境。,9.3.1進(jìn)入VBE編程環(huán)境,,Access模塊分成類模塊和標(biāo)準(zhǔn)模塊兩種。1.進(jìn)入類模塊的VBE編程環(huán)境對(duì)于類模塊,在窗體“設(shè)計(jì)視圖”入VBE有如下三種方法:(1)單擊工具欄中的“代碼”按鈕,便打開VBE窗口,進(jìn)入VBE環(huán)境。(2)先打開某對(duì)象的“屬性”對(duì)話框。在該對(duì)話框中單擊選擇“事件”選項(xiàng)卡。在該“事件”選項(xiàng)卡中,選中某個(gè)事件并設(shè)置其屬性為“[事件過程]”選項(xiàng)。單擊“選擇生成器”對(duì)話框中的“代碼生成器”項(xiàng),單擊“確定”按鈕,便打開VBE窗口,進(jìn)入VBE環(huán)境。這是進(jìn)入VBE環(huán)境最通用的最方便的方法之一。(3)右鍵單擊某控件,彈出快捷菜單。單擊該快捷菜單中的“事件生成器…”項(xiàng),顯出“選擇生成器”對(duì)話框。單擊“選擇生成器”對(duì)話框中的“代碼生成器”項(xiàng),單擊“確定”按鈕,便打開VBE窗口,進(jìn)入VBE環(huán)境。此時(shí),系統(tǒng)已經(jīng)為該對(duì)象的默認(rèn)事件自動(dòng)創(chuàng)建了事件過程的模板,例如,命令按鈕的默認(rèn)事件是Click。,9.3.1進(jìn)入VBE編程環(huán)境(續(xù)),,2.進(jìn)入標(biāo)準(zhǔn)模塊的VBE編程環(huán)境對(duì)于標(biāo)準(zhǔn)模塊,進(jìn)入VBE有三種方法:(1)在數(shù)據(jù)庫(kù)窗口對(duì)象列表上選擇“模塊”,單擊工具欄上“新建”按鈕,便打開打開VBE窗口,進(jìn)入VBE環(huán)境。(2)在數(shù)據(jù)庫(kù)對(duì)象窗口,單擊“工具”菜單中“宏”級(jí)聯(lián)菜單中的“VisualBasic編輯器”選項(xiàng),便打開VBE窗口,進(jìn)入VBE環(huán)境。(3)在數(shù)據(jù)庫(kù)窗口對(duì)象列表上選擇“模塊”,雙擊模塊對(duì)象列表中的某個(gè)模塊名,便打開VBE窗口,進(jìn)入VBE環(huán)境,并顯出該模塊已有的代碼。,9.3.2VBE窗口,,9-14VBE窗口中的“視圖”菜單,1.標(biāo)準(zhǔn)工具欄,,視圖MicrosoftOfficeAccess切換Access數(shù)據(jù)庫(kù)窗口。插入模塊用于插入新模塊。運(yùn)行子過程/用戶窗體運(yùn)行模塊程序。中斷中斷正在運(yùn)行的程序。終止運(yùn)行/重新設(shè)計(jì)結(jié)束正在運(yùn)行的程序,重新進(jìn)入模塊設(shè)計(jì)狀態(tài)設(shè)計(jì)模塊設(shè)計(jì)模塊和非設(shè)計(jì)模塊切換。工程資源管理器打開工程資源管理器窗口。屬性窗口打開屬性窗口。對(duì)象瀏覽器打開對(duì)象瀏覽器窗口。,圖9-15VBE窗口中的標(biāo)準(zhǔn)工具欄,2.工程資源管理器窗口,,單擊VBE窗口菜單欄中的“視圖”菜單中的“工程資源管理器”命令,即可打開工程資源管理器窗口。工程資源管理器窗口簡(jiǎn)稱工程窗口。在工程窗口中的列表框當(dāng)中列出了應(yīng)用程序的所有模塊文件。單擊“查看代碼”按鈕可以打開相應(yīng)代碼窗口,單擊“查看對(duì)象”按鈕可以打開相應(yīng)對(duì)象窗口,單擊“切換文件夾”按鈕可以隱藏或顯示對(duì)象分類文件夾。雙擊工程窗口上的一個(gè)模塊或類,相應(yīng)的代碼窗口就會(huì)顯示出來(lái)。,3.屬性窗口,,單擊VBE窗口菜單欄中的“視圖”菜單中的“屬性”命令,即可打開屬性窗口。在屬性窗口中,列出了所選對(duì)象的各個(gè)屬性,分“按字母序”和“按分類序”兩種查看形式??梢灾苯釉趯傩源翱谥芯庉媽?duì)象的屬性,這屬于對(duì)象屬性的“靜態(tài)”設(shè)置方法;可以在代碼窗口內(nèi)用VBA代碼編輯對(duì)象的屬性,這屬于對(duì)象屬性的“動(dòng)態(tài)”設(shè)置方法。注意:為了在屬性窗口中列出Access類對(duì)象,應(yīng)首先打開這些類對(duì)象的“設(shè)計(jì)”視圖。,4.代碼窗口,,單擊VBE窗口菜單欄中的“視圖”菜單中的“代碼窗口”命令,即可打開代碼窗口。可以使用代碼窗口來(lái)編寫、顯示以及編輯VBA程序代碼。實(shí)際操作時(shí),在打開各模塊的代碼窗口后,可以查看不同窗體或模塊中的代碼,并且在它們之間做復(fù)制以及粘貼的動(dòng)作。,5.立即窗口,,單擊VBE窗口菜單欄中的“視圖”菜單中的“立即窗口”命令,即可打開立即窗口。在立即窗口中,可以鍵入或粘貼一行代碼,然后按下ENTER鍵來(lái)執(zhí)行該代碼。但是立即窗口中的代碼是不能存儲(chǔ)的。若在立即窗口鍵入“Print19Mod7”,則在下一行輸出的結(jié)果是5。若在立即窗口鍵入“?19Mod7”,則在下一行輸出的結(jié)果是5。若在立即窗口鍵入“?Mid(“Access”,3,2)”,則在下一行輸出的結(jié)果是ce。,5.立即窗口(續(xù)),,注意,“Print”命令與“?”命令的功能相同,都是在立即窗口輸出結(jié)果值。此外,在VBE代碼中,若使用形如“Debug.Print表達(dá)式”的語(yǔ)句,也將在立即窗口中輸出該表達(dá)式的結(jié)果值。例如,語(yǔ)句Debug.Print3*5,將在立即窗口輸出結(jié)果值是15。,6.本地窗口7.監(jiān)視窗口,,6.本地窗口單擊VBE窗口菜單欄中的“視圖”菜單中的“本地窗口”命令,即可打開本地窗口。在本地窗口中,可自動(dòng)顯示出所有在當(dāng)前過程中的變量聲明及變量值。7.監(jiān)視窗口單擊VBE窗口菜單欄中的“視圖”菜單中的“監(jiān)視窗口”命令,即可打開監(jiān)視窗口。當(dāng)工程中有定義監(jiān)視表達(dá)式定義時(shí),就會(huì)自動(dòng)出現(xiàn)。,9.3.3VBE環(huán)境中編寫VBA代碼,,Access的VBE編輯環(huán)境提供了完整的開發(fā)和調(diào)試工具。其中的代碼窗口頂部包含兩個(gè)組合框,左側(cè)為對(duì)象列表,右側(cè)為過程列表。操作時(shí),從左側(cè)組合框選定一個(gè)對(duì)象后,右側(cè)過程組合框中會(huì)列出該對(duì)象的所有事件過程,再?gòu)脑搶?duì)象事件過程列表選項(xiàng)中選擇某個(gè)事件名稱,系統(tǒng)會(huì)自動(dòng)生成相應(yīng)的事件過程模塊板,用戶添加代碼即可。雙擊工程窗口中任何類或?qū)ο蠖伎梢栽诖a窗口中打開相應(yīng)代碼并進(jìn)行編輯處理。在代碼窗口使用時(shí),系統(tǒng)提供了一些便利的功能:,1.自動(dòng)顯示提示信息,,在代碼窗口中輸入程序代碼時(shí),VBE會(huì)根據(jù)情況顯示不同的生成器提示信息。(1)輸入控件名當(dāng)輸入已有的控件名后接著輸入英文的句號(hào)字符“.”時(shí),VBE自動(dòng)彈出該控件可用的屬性和方法列表。注意,如果不會(huì)彈出該控件的屬性和方法列表,肯定該控件名有錯(cuò)。(2)輸入函數(shù)當(dāng)輸入已有函數(shù)名時(shí),VBE自動(dòng)列出該函數(shù)的使用格式,包括其參數(shù)提示信息。例如,當(dāng)輸入函數(shù)名及左圓括號(hào)“Mid(”時(shí),顯出Mid函數(shù)的參數(shù)提示信息如圖9-17所示,1.自動(dòng)顯示提示信息(續(xù)),,(3)輸入命令對(duì)于輸入命令代碼,在關(guān)閉VBE窗口時(shí),VBE自動(dòng)對(duì)該命令代碼進(jìn)行語(yǔ)法檢查。,2.F1幫助信息,,可以將光標(biāo)停留在某個(gè)語(yǔ)句命令上并按F1鍵,系統(tǒng)會(huì)立刻提供相關(guān)命令的幫助信息。也可以在代碼窗口中,先選擇某個(gè)“屬性”名或選擇“方法”名,然后按F1鍵,系統(tǒng)會(huì)立刻提供該“屬性”或“方法”的功能說明、語(yǔ)法格式及使用范例等幫助信息。例如,先選擇Caption(如圖9-18所示),按F1鍵便顯出Caption的幫助信息,如圖9-19所示。,9.4VBA編程基礎(chǔ),在編寫VBA代碼時(shí),需要用到程序設(shè)計(jì)基礎(chǔ)知識(shí),包括VBA的標(biāo)準(zhǔn)數(shù)據(jù)類型、自定義數(shù)據(jù)類型、常量與變量、運(yùn)算符、表達(dá)式以及常用函數(shù)等內(nèi)容。,9.4.1VBA的標(biāo)準(zhǔn)數(shù)據(jù)類型,VBA的數(shù)據(jù)類型有系統(tǒng)定義和自定義兩種,系統(tǒng)定義的數(shù)據(jù)類型稱為標(biāo)準(zhǔn)數(shù)據(jù)類型。Access數(shù)據(jù)庫(kù)系統(tǒng)創(chuàng)建表對(duì)象時(shí)所涉及到的字段數(shù)據(jù)類型(除了OLE對(duì)象和備注數(shù)據(jù)類型外),在VBA中都有相對(duì)應(yīng)的數(shù)據(jù)類型。VBA的標(biāo)準(zhǔn)數(shù)據(jù)類型如表9-10所示。在表9-10中列出了VBA數(shù)據(jù)類型及其對(duì)應(yīng)的類型關(guān)鍵字、類型符、(用于變量命名的)前綴、所占的存儲(chǔ)空間及取值范圍等內(nèi)容。其中的類型符即是類型聲明字符,它是附加到變量名上的字符,指出變量的數(shù)據(jù)類型,如k$。,表9-10VBA標(biāo)準(zhǔn)數(shù)據(jù)類型,表9-10VBA標(biāo)準(zhǔn)數(shù)據(jù)類型(部分說明),(1)字符串型(String,類型符$)字符串是一個(gè)字符序列,包括除雙引號(hào)和Entrer鍵以外可打印的所有字符。一個(gè)字符串的前后要用英文的雙引號(hào)"括起來(lái),故英文的雙引號(hào)"作為字符串的定界符號(hào)。例如:"2008"、"劉星"和""都是字符串型數(shù)據(jù)。字符串中的空格也是有效字符。字符串長(zhǎng)度是指該字符串所包含的字符個(gè)數(shù)。例如:"2008年"的長(zhǎng)度為5。長(zhǎng)度為0的字符串(即"")稱為空字符串。字符串有兩種,即變長(zhǎng)字符串與定長(zhǎng)字符串。變長(zhǎng)字符串的長(zhǎng)度是不確定的,變長(zhǎng)字符串最多可包含大約20億(2^31)個(gè)字符。定長(zhǎng)字符串的長(zhǎng)度是確定的,定長(zhǎng)字符串可包含1到大約64K(2^16)個(gè)字符。,表9-10VBA標(biāo)準(zhǔn)數(shù)據(jù)類型(部分說明),(2)布爾型數(shù)據(jù)(Boolean)布爾型數(shù)據(jù)只有兩個(gè)值:True或False。布爾型數(shù)據(jù)轉(zhuǎn)換為其他類型數(shù)據(jù)時(shí),True轉(zhuǎn)換為-1,F(xiàn)alse轉(zhuǎn)換為0;其他類型數(shù)據(jù)轉(zhuǎn)換為布爾型時(shí),0轉(zhuǎn)換為False,其他轉(zhuǎn)換為True。,表9-10VBA標(biāo)準(zhǔn)數(shù)據(jù)類型(部分說明),(4)日期型數(shù)據(jù)(Date)任何可以識(shí)別的文本日期數(shù)據(jù)可以賦給日期變量?!叭掌?時(shí)間”類型數(shù)據(jù)必須前后用英文的井號(hào)“#”括住。允許用各種表示日期和時(shí)間的格式。日期可以用“/”、“,”、“-”分隔開,可以是年、月、日,也可以是月、日、年的順序。時(shí)間必須用“:”分隔,順序是:時(shí)、分、秒。例如:#1999-08-1110:25:00pm#、#08/23/2008#、#03-25-200720:30:00#等都是有效的日期型數(shù)據(jù)。在VBA中會(huì)自動(dòng)轉(zhuǎn)換成mm/dd/yyyy(月/日/年)的形式。,表9-14VBA標(biāo)準(zhǔn)數(shù)據(jù)類型(部分說明),(4)變體類型(Variant)Variant數(shù)據(jù)類型是所有沒被顯式聲明(用如Dim、Private、Public或Static等語(yǔ)句)為其他類型變量的數(shù)據(jù)類型。Variant數(shù)據(jù)類型并沒有類型符。變體類型是一種特殊的數(shù)據(jù)類型,除了定長(zhǎng)字符串類型及用戶自定義類型外,可以包含其他任何類型的數(shù)據(jù);變體類型還可以包含Empty、Error、Nothing和Null特殊值。使用時(shí),可以用VarType與TypeName兩個(gè)函數(shù)來(lái)檢查Variant型變量中數(shù)據(jù)的具體對(duì)應(yīng)數(shù)據(jù)類型。VBA中規(guī)定,如果沒有顯式聲明或使用類型說明符來(lái)定義變量的數(shù)據(jù)類型,默認(rèn)為變體類型(Variant)。,9.4.2變量,,變量在程序運(yùn)行期間其值可以發(fā)生變化的量。實(shí)際上,變量是內(nèi)存中的臨時(shí)存儲(chǔ)單元,用于存儲(chǔ)數(shù)據(jù)。由于計(jì)算機(jī)處理數(shù)據(jù)時(shí),必須將數(shù)據(jù)裝入內(nèi)存,因此,在高級(jí)語(yǔ)言編寫的程序中,需要將存放數(shù)據(jù)的內(nèi)存單元命名,通過內(nèi)存單元名(即變量名)來(lái)訪問其中的數(shù)據(jù)。一個(gè)變量有三個(gè)要素:變量名、數(shù)據(jù)類型和變量值。在VBA代碼中,通過變量名來(lái)引用變量。,1.變量的命名,,變量名的命名規(guī)則如下:(1)變量名的命名同字段命名一樣,變量名必須以字母(或漢字)開頭;(2)變量名可以包含字母、數(shù)字或下劃線字符,但不能包含標(biāo)點(diǎn)符號(hào)或空格;(3)變量名的字符個(gè)數(shù)不能超過255個(gè)字符;(4)變量命名不能使用VBA的關(guān)鍵字(如For、To、Next、If、While等)。注意:VBA中的變量命名不區(qū)分字母大小寫,如“a”和“A”代表的是同一個(gè)變量。,9.4.2變量(例),,例如,a、b_1、st_x等可以作為變量名,但1a、b.1、x-1、y5、s/3不可作為變量名。,有一個(gè)空格,2.顯式變量,,變量先聲明(即先定義)后使用是較好的程序設(shè)計(jì)習(xí)慣??梢栽谀K設(shè)計(jì)窗口的頂部說明區(qū)域中,加入OptionExplicit語(yǔ)句來(lái)強(qiáng)制要求所有變量必須先定義才能使用。顯式聲明變量的基本格式:Dim變量名[As類型關(guān)鍵字][,變量名[As類型關(guān)鍵字]][…]其中“As類型關(guān)鍵字”用于指明該變量的數(shù)據(jù)類型。如果省略[As類型關(guān)鍵字]部分,則默認(rèn)定義該變量為Variant數(shù)據(jù)類型。例如:DimiAsIntegerDimjAsLong,nAsSingle,tAsString,fAsBoolean,g注意,變量g是定義成變體類型(即Variant)。,2.顯式變量(續(xù)),,例如:DimiAsIntegerDimjAsLong,nAsSingle,tAsString,fAsBoolean,g注意,變量g是定義成變體類型(即Variant)。DimxmAsString,xhAsString*8注意,xm是變長(zhǎng)的字符串型變量,xh是定長(zhǎng)的8個(gè)字符長(zhǎng)度的字符串型變量。此外,下面這個(gè)聲明語(yǔ)句DimaAsinteger,bAslong,cAssingle也可以用類型符代替類型關(guān)鍵字來(lái)定義變量,即可以改寫為:Dima%,b&,c!,3.隱式變量,,隱式變量(或稱隱含變量)是指沒有直接定義,借助將一個(gè)值指定給變量名的方式來(lái)建立的變量。當(dāng)在變量名稱后沒有附加類型符來(lái)指明隱含變量的數(shù)據(jù)類型時(shí),默認(rèn)為變體類型。例如:m=168.95語(yǔ)句定義一個(gè)變體類型變量m值是168.95。下面語(yǔ)句建立了一個(gè)整型數(shù)據(jù)類型的變量。k%=59,9.4.3變量的作用域與生命周期,,1.變量的作用域(1)局部變量在模塊的過程內(nèi)部聲明的變量稱為局部變量。局部變量?jī)H在過程代碼執(zhí)行時(shí)才可見。在子過程或函數(shù)過程中聲明的或不用Dim…As關(guān)鍵字聲明而直接使用的變量作用域都屬于局部范圍。局部變量?jī)H在該過程范圍中有效。(2)模塊級(jí)變量在模塊中的所有過程之外的起始位置聲明的變量稱為模塊級(jí)變量。在模塊級(jí)變量聲明區(qū)域,用Dim…As關(guān)鍵字聲明的變量的作用域就屬于模塊范圍。模塊級(jí)變量?jī)H在該模塊范圍中有效。(3)全局變量在標(biāo)準(zhǔn)模塊的所有過程之外的起始位置聲明的變量稱為全局變量,在標(biāo)準(zhǔn)模塊的變量聲明區(qū)域,用Public…As關(guān)鍵字聲明的變量的作用域就屬于全局范圍。,9.4.3變量的作用域與生命周期(續(xù)),,2.變量的生命周期變量的生命周期是指變量在運(yùn)行時(shí)有效的持續(xù)時(shí)間。變量的持續(xù)時(shí)間是從變量聲明語(yǔ)句所在的過程第一次運(yùn)行到代碼執(zhí)行完畢并將控制權(quán)交回調(diào)用它的過程為止的時(shí)間。每次子過程或函數(shù)過程被調(diào)用時(shí),以Dim…As語(yǔ)句聲明的局部變量,會(huì)被設(shè)定默認(rèn)值,數(shù)值數(shù)據(jù)類型變量的默認(rèn)值為0,字符串型變量的默認(rèn)值為空字符串(“”),布爾型變量的默認(rèn)值為False。這些局部變量,有著與子過程或函數(shù)過程等長(zhǎng)的持續(xù)時(shí)間。,9.4.4數(shù)組,,數(shù)組是在有規(guī)則的結(jié)構(gòu)中包含一種數(shù)據(jù)類型的一組數(shù)據(jù),也稱作數(shù)組元素變量。數(shù)組變量由變量名和數(shù)組下標(biāo)構(gòu)成,通常用Dim語(yǔ)句來(lái)聲明數(shù)組。,1.一維數(shù)組,,一維數(shù)組定義格式:Dim數(shù)組名([下標(biāo)下界to]下標(biāo)上界)[As類型關(guān)鍵字]說明:(1)下標(biāo):下標(biāo)下界和下標(biāo)上界必須為常數(shù),不允許表達(dá)式或變量。下標(biāo)下界和下標(biāo)上界為整數(shù),不得超過Long數(shù)據(jù)類型的范圍,并且下標(biāo)下界應(yīng)該小于下標(biāo)上界。如果不指定下標(biāo)下界,即省略了“下標(biāo)下界to”部分,則默認(rèn)該數(shù)組的“下標(biāo)下界”為0,該數(shù)組的數(shù)組元素從“數(shù)組名(0)”至“數(shù)組名(下標(biāo)上界)”。,1.一維數(shù)組(續(xù)),,(2)“As類型關(guān)鍵字”用于聲明數(shù)組的數(shù)據(jù)類型。如果省略了“As類型關(guān)鍵字”部分,默認(rèn)為變體類型數(shù)組。如果聲明為數(shù)值型(如字節(jié)型、整型、長(zhǎng)整型、單精度、…),數(shù)組中的全部元素都初始化為0,如果聲明為字符串型,數(shù)組中的全部元素都初始化為空字符串。如果聲明為布爾型,數(shù)組中的全部元素都初始化為False。(3)“數(shù)組名”的命名遵守變量命名規(guī)則。,1.一維數(shù)組(續(xù)),,DimE(1to4)AsSingle聲明了一個(gè)一維數(shù)組,該數(shù)組的名稱為E,類型為Single,占據(jù)4個(gè)單精度變量的空間。該數(shù)組包含4個(gè)數(shù)組元素,數(shù)組下標(biāo)為1~4,即:E(1)、E(2)、E(3)和E(4)。例如:DimF(5)AsInteger聲明了一個(gè)一維數(shù)組,該數(shù)組的名字為F,類型為Integer,占據(jù)6個(gè)整型變量的空間。該數(shù)組包含6個(gè)數(shù)組元素,數(shù)組下標(biāo)為0~5,即:F(0)、F(1)、F(2)、F(3)、F(4)和F(5)。,2.二維數(shù)組,,二維數(shù)組定義格式:Dim數(shù)組名([下標(biāo)下界ito]下標(biāo)上界i,[下標(biāo)下界jto]下標(biāo)上界j)[As類型關(guān)鍵字]如果省略“[下標(biāo)下界ito]”,默認(rèn)該數(shù)組的“下標(biāo)下界i”為0。如果省略“[下標(biāo)下界jto]”,默認(rèn)該數(shù)組的“下標(biāo)下界j”為0。,1.二維數(shù)組(續(xù)),,例如:DimG(2,3)AsLong定義了一個(gè)二維數(shù)組,該數(shù)組的名字為G,類型為L(zhǎng)ong,占據(jù)12個(gè)(3行4列)長(zhǎng)整型變量的空間。該數(shù)組包含12個(gè)數(shù)組元素,如表9-11所示。,3.多維數(shù)組,,VAB也支持多維數(shù)組。可以在數(shù)組下標(biāo)中加入多個(gè)數(shù)值,并以逗號(hào)分隔開,由此來(lái)建立多維數(shù)組,最多可以聲明60維。下面語(yǔ)句聲明了一個(gè)三維數(shù)組W:DimW(5,3,4)AsInteger‘?dāng)?shù)組W有6*4*5=120個(gè)元素,4.動(dòng)態(tài)數(shù)組,,VBA還特別支持動(dòng)態(tài)數(shù)組。定義和使用方法是:先用Dim顯式定義數(shù)組但不指明數(shù)組元素?cái)?shù)目,然后用ReDim關(guān)鍵字來(lái)決定數(shù)組包含的元素?cái)?shù)目來(lái)定義數(shù)組,以建立動(dòng)態(tài)數(shù)組。例如:DimE()AsLong‘定義動(dòng)態(tài)數(shù)組E……ReDimE(9,9,9)‘分配數(shù)組的空間大小….,5.?dāng)?shù)組的下標(biāo)下界,,通常,數(shù)組的默認(rèn)下標(biāo)下界是0,但如果在模塊的聲明部分使用了“OptionBase1”語(yǔ)句,則數(shù)組的默認(rèn)下標(biāo)下界就是1。,9.4.5用戶自定義的數(shù)據(jù)類型,,用戶定義數(shù)據(jù)類型可以是任何用Type語(yǔ)句定義的數(shù)據(jù)類型。用戶自定義類型可包含一個(gè)或多個(gè)某種標(biāo)準(zhǔn)數(shù)據(jù)類型的數(shù)據(jù)元素、數(shù)組或一個(gè)先前定義的用戶自定義數(shù)據(jù)類型。Type語(yǔ)句格式如下:Type[用戶定義數(shù)據(jù)類型名]AsAs….EndType,例9-2(用戶定義的數(shù)據(jù)類型例子),,例9-2創(chuàng)建一個(gè)標(biāo)準(zhǔn)模塊,模塊名為“例9-2標(biāo)準(zhǔn)模塊-聲明自定義數(shù)據(jù)類型XJ”。創(chuàng)建一個(gè)窗體,窗體名為“例9-2用戶自定義數(shù)據(jù)類型XJ應(yīng)用”。(1)標(biāo)準(zhǔn)模塊“例9-2標(biāo)準(zhǔn)模塊-聲明自定義數(shù)據(jù)類型XJ”中的VBA代碼如下:TypeXJ學(xué)號(hào)AsString*8姓名AsString班號(hào)AsLong性別AsString*1EndType,,(2)“例9-2用戶自定義數(shù)據(jù)類型XJ應(yīng)用”窗體類模塊中的VBA代碼如下:PrivateSubCommand0_Click()Rem在標(biāo)準(zhǔn)模塊“例9-2自定義數(shù)據(jù)類型XJ的模塊”中已聲明了用戶自定義數(shù)據(jù)類型XJDimStAsXJ將變量St指定為用戶自定義數(shù)據(jù)類型XJSt.學(xué)號(hào)="08031001"St.姓名="劉娟娟"St.班號(hào)=2St.性別="女"Text0=St.學(xué)號(hào)&“,”&St.姓名&“,”&St.班號(hào)&“,”&St.性別用關(guān)鍵字With…EndWith語(yǔ)句簡(jiǎn)化上述程序中變量St重復(fù)的部分WithSt.學(xué)號(hào)="08031001".姓名="劉娟娟".班號(hào)=2.性別="女"text1=.學(xué)號(hào)&","&.姓名&","&.班號(hào)&","&.性別EndWithEndSub,9.4.6數(shù)據(jù)庫(kù)對(duì)象變量,Access建立的數(shù)據(jù)庫(kù)對(duì)象及其屬性,均可被看成是VBA程序代碼中的變量及其指定的值來(lái)加以引用。Access中窗體與報(bào)表對(duì)象的引用格式分別為:Forms!窗體名稱!控件名稱[.屬性名稱]Reports!報(bào)表名稱!控件名稱[.屬性名稱]關(guān)鍵字Forms表示窗體對(duì)象集合,Reports表示報(bào)表對(duì)象集合。英文的感嘆號(hào)“!”分隔開父子對(duì)象。若省略“屬性名稱”部分,則默認(rèn)為控件的基本屬性Value。如果在本窗體的模塊中引用,可以使用Me代替Forms!窗體名稱,窗體對(duì)象的引用格式變?yōu)椋篗e!控件名稱[.屬性名稱],9.4.6數(shù)據(jù)庫(kù)對(duì)象變量(續(xù)),例如,要在VBA代碼中引用窗體“學(xué)生資料”中名為“學(xué)號(hào)”的文本框控件,可使用下面三個(gè)語(yǔ)句之一:(注:下面這三個(gè)語(yǔ)句的效果是一樣的。)Forms!學(xué)生資料!學(xué)號(hào).Value="08031001"或Forms!學(xué)生資料!學(xué)號(hào)="08031001"或Forms!學(xué)生資料![學(xué)號(hào)]="08031001",省略屬性名稱.Value,用英文方括號(hào)括住文本框控件名“學(xué)號(hào)”,9.4.6數(shù)據(jù)庫(kù)對(duì)象變量(續(xù)),例如,如果在窗體“學(xué)生資料”的模塊中,引用本窗體“學(xué)生資料”中名為“學(xué)號(hào)”的文本框控件,可以使用Me代替Forms!學(xué)生資料,則上例中的三個(gè)語(yǔ)句變?yōu)椋篗e!學(xué)號(hào).Value="08031001"或Me!學(xué)號(hào)="08031001"或Me![學(xué)號(hào)]="08031001",用Me代替Forms!學(xué)生資料,9.4.6數(shù)據(jù)庫(kù)對(duì)象變量(續(xù)),此外,還可以使用Set關(guān)鍵字來(lái)建立控件對(duì)象的變量。當(dāng)需要多次引用對(duì)象時(shí),這樣處理很方便。例如,要多次操作引用窗體“學(xué)生資料”中的控件“姓名”的值時(shí),可以使用以下方式:DimtxtNameAsControl‘定義控件類型變量SettxtName=Forms!學(xué)生資料!姓名txtName="劉娟娟"‘操作對(duì)象變量借助將變量定義為對(duì)象類型并使用Set語(yǔ)句將對(duì)象指派到變量的方法,可以將任何數(shù)據(jù)庫(kù)對(duì)象指定為變量的名稱。當(dāng)指定給對(duì)象一個(gè)變量名時(shí),不是創(chuàng)建而是引用內(nèi)存的對(duì)象。,請(qǐng)?jiān)趐235第7行首im之前補(bǔ)加D,9.4.7常量,,常量是指在程序運(yùn)行過程中,其值不能被改變的量。常量的使用可提高程序代碼的可讀性,并且能使程序代碼更加容易維護(hù)。在VBA中,常量有:直接常量符號(hào)常量系統(tǒng)常量?jī)?nèi)部常量,1.直接常量,,直接常量直接出現(xiàn)在代碼中,即通常的數(shù)值或字符串值,也稱為字面常量,它的表示形式?jīng)Q定它的類型和值。例如:字符型:"中大2009屆畢業(yè)生"數(shù)值型:3.14159、-56、8.432E-15日期型:#2007-01-03#邏輯型:True、False,2.符號(hào)常量,,在VBA編程過程中,符號(hào)常量使用關(guān)鍵字Const來(lái)定義。定義符號(hào)常量的格式:Const常量名=常量值說明:常量名的命名規(guī)則同變量。符號(hào)常量定義時(shí)不需要為常量指明數(shù)據(jù)類型,該符號(hào)常量的數(shù)據(jù)類型由常量值決定,VBA會(huì)自動(dòng)按存儲(chǔ)效率最高的方式來(lái)確定其數(shù)據(jù)類型。符號(hào)常量一般要求大寫命名,以便與變量區(qū)分。例如,ConstPI=3.14159就是把3.14159定義為符號(hào)常量PI,在程序代碼中,就可以在使用圓周率的地方使用PI,方便修改。,3.系統(tǒng)常量,,Access系統(tǒng)內(nèi)部包含有若干個(gè)啟動(dòng)時(shí)就建立的系統(tǒng)常量,有True、False、Yes、No、On、Off和Null等。編碼時(shí)可以直接使用。,4.內(nèi)部常量(也稱固有常量),,VBA提供了一些預(yù)定義的內(nèi)部符號(hào)常量。Access內(nèi)部常量以前綴ac開頭。一般來(lái)說,來(lái)自Access庫(kù)的常量以“ac”開頭,來(lái)自ADO庫(kù)的常量以“ad”開頭,而來(lái)自VisualBasic庫(kù)的常量則以“vb”開頭。例如:acForm、adAddNew、vbCurrency。也可以用“對(duì)象瀏覽器”來(lái)查看所有可用對(duì)象庫(kù)中的固有常量列表。,,在列表“成員”中選擇一個(gè)常量后,它的數(shù)值將出現(xiàn)在“對(duì)象瀏覽器”窗口的底部,如圖9-20所示的“ConstacCmdQueryGroupBy=361”。一個(gè)好的編程習(xí)慣是盡可能的使用常量名字而不使用它們的數(shù)值。用戶不能將這些內(nèi)部常量的名字作為用戶自定義常量或變量的名字。,9.4.9運(yùn)算符,,在VBA編程語(yǔ)言中,提供許多運(yùn)算符來(lái)完成各種形式的運(yùn)算和處理。根據(jù)運(yùn)算不同,可以分成四種類型運(yùn)算符:算術(shù)運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符連接運(yùn)算符,1.算術(shù)運(yùn)算符,,算術(shù)運(yùn)算符用于算術(shù)運(yùn)算,主要有8個(gè)運(yùn)算符,如表9-12所示。,2.關(guān)系運(yùn)算符,,關(guān)系運(yùn)算(也稱比較運(yùn)算)符用于對(duì)兩個(gè)表達(dá)式的值進(jìn)行比較,比較的結(jié)果為邏輯值:True(真)或False(假)。關(guān)系運(yùn)算符有6個(gè),如表9-13所示。,3.邏輯運(yùn)算符,,邏輯運(yùn)算符用于對(duì)兩個(gè)或一個(gè)邏輯量進(jìn)行邏輯運(yùn)算,邏輯運(yùn)算的結(jié)果仍為邏輯值。邏輯運(yùn)算主要有And(“與”)、Or(“或”)和Not(“非”)3個(gè)運(yùn)算符。其中的AND和OR是對(duì)兩個(gè)邏輯量進(jìn)行邏輯運(yùn)算,Not是對(duì)一個(gè)邏輯量進(jìn)行邏輯運(yùn)算。運(yùn)算時(shí),按Not,And,Or優(yōu)先級(jí)執(zhí)行,Not的優(yōu)先級(jí)最高,Or的優(yōu)先級(jí)最低。邏輯運(yùn)算的運(yùn)算法則如表9-14所示。,3.邏輯運(yùn)算符(續(xù)),,邏輯運(yùn)算的運(yùn)算法則如表9-14所示。,3.邏輯運(yùn)算符(續(xù)),,4.字符串連接運(yùn)算符,,字符串連接運(yùn)算符有“&”和“+”兩個(gè)連接運(yùn)算符。字符串連接運(yùn)算符作用是把兩個(gè)字符串連接起來(lái)。注意“+”和“&”的區(qū)別。當(dāng)兩個(gè)被連接的數(shù)據(jù)都是字符串型時(shí),它們的作用相同。當(dāng)字符串型和數(shù)值型連接時(shí),若用“&”連接運(yùn)算符,則會(huì)先把數(shù)值型數(shù)據(jù)都轉(zhuǎn)化成字符串型然后連接;若用“+”連接運(yùn)算符,則會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤,如圖9-21所示。,4.字符串連接運(yùn)算符(續(xù)),,例如:DimMyValue‘變量定義MyValue="電子大學(xué)"&"通訊學(xué)院"返回"電子大學(xué)通訊學(xué)院"MyValue="電子大學(xué)"+"通訊學(xué)院"‘返回"電子大學(xué)通訊學(xué)院"MyValue="電子大學(xué)"&68&"屆畢業(yè)生"‘返回"電子大學(xué)68屆畢業(yè)生"MyValue="電子大學(xué)"+68+"屆畢業(yè)生"‘將返回運(yùn)行時(shí)錯(cuò)誤信息,如圖9-21所示。,9.4.10表達(dá)式和運(yùn)算符的優(yōu)先級(jí),,1.表達(dá)式將常量、變量或函數(shù)等用上述運(yùn)算符連接在一起構(gòu)成的式子就是表達(dá)式。例如,4*3^2/4-7Mod5\2+2>3就是一個(gè)表達(dá)式,該表達(dá)式的運(yùn)算結(jié)果是布爾值True。補(bǔ)充說明:在VBA中,邏輯量在表達(dá)式里進(jìn)行算術(shù)運(yùn)算時(shí),True值被當(dāng)成-1,F(xiàn)alse值被當(dāng)成0處理。例如:表達(dá)式18\5-True+2+False的運(yùn)算結(jié)果是11。其運(yùn)算步驟如下:18\5-True+2+False→3-(-1)+2+0→4+2+0→6,在書寫表達(dá)式時(shí),應(yīng)當(dāng)注意一些規(guī)則:,,(1)每個(gè)符號(hào)占一格,所有符號(hào)必須一個(gè)一個(gè)地并排寫在同一橫線上,不能在右上角或右下角寫方次或下標(biāo)。例如:X3要寫成X^3例如:X1+X2要寫成X1+X2(2)所有運(yùn)算符都不能省略。例如:2X必須寫成2*X例如:3(a+b)要寫成3*(a+b)(3)所有括號(hào)都用圓括號(hào),要成對(duì)出現(xiàn)。例如:5[X+2(Y+Z)]必須寫成5*(X+2*(Y+Z))(4)要把數(shù)學(xué)表達(dá)式中的有些符號(hào),改成VB可以表示的符號(hào)。例如:2∏R可改為2*PI*R例如:數(shù)學(xué)式,,寫成VBA表達(dá)式為:(-b+sqr(b^2-4*a*c))/(2*a),Sqr是平方根函數(shù),2.表達(dá)式中運(yùn)算符優(yōu)先級(jí),,當(dāng)一個(gè)表達(dá)式由多個(gè)運(yùn)算符連接在一起時(shí),運(yùn)算進(jìn)行的先后順序是由運(yùn)算符優(yōu)先級(jí)決定的。優(yōu)先級(jí)高的運(yùn)算先進(jìn)行,優(yōu)先級(jí)相同的運(yùn)算依照從左向右的順序進(jìn)行。VBA中常用運(yùn)算的優(yōu)先級(jí)的劃分如表9-15所示。,,,表9-15運(yùn)算符的優(yōu)先級(jí),例如:算術(shù)表達(dá)式5+2*4^2Mod21\8/2按運(yùn)算符的優(yōu)先級(jí)分成若干運(yùn)算步驟,按乘冪“^”、乘“*”、除“/”、整除“\”、求?!癕od”、加“+”次序進(jìn)行運(yùn)算,運(yùn)算結(jié)果是7。具體運(yùn)算步驟大致如下:5+2*4^2Mod21\8/2→5+2*16Mod21\8/2→5+32Mod21\4→5+32Mod5→5+2→7,9.4.10常用標(biāo)準(zhǔn)函數(shù),,標(biāo)準(zhǔn)函數(shù)的調(diào)用格式:函數(shù)名([][,][,][…])其中,函數(shù)名必不可少,函數(shù)的實(shí)參(即實(shí)際參數(shù))放在函數(shù)名后的圓括號(hào)中,每?jī)蓚€(gè)實(shí)參之間要用英文的逗號(hào)分隔開。實(shí)參可以是常量、變量或表達(dá)式。函數(shù)可以沒有實(shí)參,也可以有一個(gè)或多個(gè)實(shí)參。每個(gè)函數(shù)被調(diào)用時(shí),都會(huì)返回一個(gè)值。函數(shù)的實(shí)參和返回值都有特定的數(shù)據(jù)類型對(duì)應(yīng)。,1.?dāng)?shù)學(xué)函數(shù)(表9-16),,Rnd函數(shù)說明,,Rnd通常與Int函數(shù)配合使用,要生成[a,b]區(qū)間范圍內(nèi)(包括a和b)的隨機(jī)整數(shù),a是下限,b是上限,并且a小于b,可以采用如下表達(dá)式:Int((b-a+1)*Rnd+a)例如,Int(4-1+1*Rnd+1),即Int(4*Rnd+1),可以產(chǎn)生1~4之間(含1和4)的隨機(jī)整數(shù)??梢允?,2,3或4,這由運(yùn)行時(shí)隨機(jī)產(chǎn)生。,Rnd函數(shù)說明,,例如:RandomizeInt(100*Rnd)‘產(chǎn)生[0,99]的隨機(jī)整數(shù)Int(101*Rnd)‘產(chǎn)生[0,100]的隨機(jī)整數(shù)Int(100*Rnd+1)‘產(chǎn)生[1,100]的隨機(jī)整數(shù)Int(200*Rnd+100)‘產(chǎn)生[100,299]的隨機(jī)整數(shù)Int(201*Rnd+100)‘產(chǎn)生[100,300]的隨機(jī)整數(shù)Int(900*Rnd+100)‘產(chǎn)生[100,999]的隨機(jī)整數(shù),2.字符串函數(shù)(表9-17),,字符串長(zhǎng)度檢測(cè)函數(shù)Len示例,,格式:Len(或)返回字符串所含字符數(shù)。注意:定長(zhǎng)字符串,其長(zhǎng)度是定義時(shí)的長(zhǎng)度。DimxAsString*10‘聲明x為10個(gè)字符長(zhǎng)度的定長(zhǎng)字符串變量DimIx="200808"Len1=Len("12345")‘返回5Len2=Len(168)‘出錯(cuò)Len3=Len("計(jì)算機(jī)中心")‘返回5Len4=Len(x)‘返回10,打開“Len函數(shù)示例”窗體看運(yùn)行結(jié)果,字符串截取函數(shù)示例,,例如:str1="option"Str2="計(jì)算機(jī)軟件水平考試"Str=Left(str1,3)‘返回"opt"Str=Left(str2,5)‘返回"計(jì)算機(jī)軟件"Str=Right(str1,2)‘返回"on"Str=Right(str2,2)‘返回"考試"Str=Mid(str1,3,2)‘返回"ti"Str=Mid(str2,1,3)‘返回"計(jì)算機(jī)"Str=Mid(str2,4)‘返回"軟件水平考試",生成n個(gè)重復(fù)字符的String函數(shù)示例,,格式:String(n,字符)注意:如果參數(shù)“字符”是一個(gè)字符串,則僅返回n個(gè)該字符串第1個(gè)字符。如果參數(shù)“字符”是某一字符的ASCII碼,則僅返回n個(gè)該ASCII碼對(duì)應(yīng)的字符例如:str1=String(5,"b")‘返回"bbbbb"str1=String(5,"bcd")‘返回"bbbbb"str1=String(5,98)‘返回"bbbbb",98是b的ASCII碼值,3.日期/時(shí)間函數(shù)p241,,常用的日期/時(shí)間函數(shù)如表9-18所示。獲取系統(tǒng)日期和時(shí)間函數(shù)例子:D=Date‘返回系統(tǒng)日期,如:2009-01-16D=Date()‘返回系統(tǒng)日期,如:2009-01-16T=Time‘返回系統(tǒng)時(shí)間,如:10:45:29T=Time()‘返回系統(tǒng)時(shí)間,如:10:45:29DT=Now‘返回系統(tǒng)日期和時(shí)間如:2009-01-1610:46:02DT=Now()‘返回系統(tǒng)日期和時(shí)間如:2009-01-1610:46:02,4.類型轉(zhuǎn)換函數(shù)p244,,類型轉(zhuǎn)換函數(shù)的功能是將某數(shù)據(jù)類型的數(shù)據(jù)轉(zhuǎn)換成指定數(shù)據(jù)類型的數(shù)據(jù)。Access提供了一些數(shù)據(jù)類型轉(zhuǎn)換函數(shù),如表9-22所示。,說明:(4)Chr函數(shù)Chr()注意:Chr函數(shù)將字符代碼轉(zhuǎn)換字符,即返回與字符代碼相關(guān)的字符。例如:s=Chr("70")‘返回fs=Chr("13")‘返回回車符(5)Str函數(shù)Str()注意:Str函數(shù)將數(shù)值表達(dá)式值轉(zhuǎn)換成字符串。當(dāng)一數(shù)字轉(zhuǎn)成字符串時(shí),總在前頭保留一空格來(lái)表示正負(fù)。表達(dá)式值為正,返回的字符串包含一個(gè)前導(dǎo)空格表示有一個(gè)正號(hào)。例如:s=Str(86)‘返回"86",有一前導(dǎo)空格s=Str(-6)‘返回"-6",,(6)Val函數(shù)Val()Val函數(shù)將數(shù)字字符串轉(zhuǎn)換成數(shù)值型數(shù)字。數(shù)字串轉(zhuǎn)換時(shí)可自動(dòng)將字符串中的空格、制表符和換行符去掉,當(dāng)遇到它不能識(shí)別為數(shù)字的第一個(gè)字符時(shí),停止讀入字符串。例如:s=Val("16")‘返回16s=Val("-345")‘返回-345s=Val("76af89")‘返回76,9.5VBA程序語(yǔ)句,VBA程序是由若干VBA語(yǔ)句構(gòu)成。一個(gè)VBA語(yǔ)句是能夠完成某項(xiàng)操作的一條命令。VBA程序語(yǔ)句按照其功能不同分為以下兩大類型:1.聲明語(yǔ)句聲明語(yǔ)句用于給變量、常量或過程定義命名。2.執(zhí)行語(yǔ)句執(zhí)行語(yǔ)句用于執(zhí)行賦值操作,調(diào)用過程,實(shí)現(xiàn)各種流程控制。執(zhí)行語(yǔ)句又分為如下三種結(jié)構(gòu):(1)順序結(jié)構(gòu):按照語(yǔ)句順序順次執(zhí)行。即程序從左至右、自頂向下執(zhí)行語(yǔ)句。順序結(jié)構(gòu)最簡(jiǎn)單。如賦值語(yǔ)句、過程調(diào)用語(yǔ)句等。(2)選擇結(jié)構(gòu):根據(jù)條件值選擇執(zhí)行路徑。如條件語(yǔ)句。(3)循環(huán)結(jié)構(gòu):重復(fù)執(zhí)行某一段程序語(yǔ)句。如循環(huán)語(yǔ)句。,9.5.1VBA程序語(yǔ)句編寫規(guī)則,(1)通常每個(gè)語(yǔ)句占一行,如果要在一行中編寫多個(gè)語(yǔ)句,則每?jī)蓚€(gè)語(yǔ)句之間必須用英文的冒號(hào)“:”分隔。例如:a=0:i=i+1Text0.Value="你好!":Text0.Enabled=True(2)當(dāng)一條語(yǔ)句很長(zhǎng)時(shí),一行編寫不下,可使用續(xù)行符(一個(gè)空格后面跟隨一個(gè)下劃線“_”),將長(zhǎng)語(yǔ)句分成多行。例如:Msgbox("尊敬的"&name&"先生/女士:歡迎您使用"&_"Access基礎(chǔ)知識(shí)教育的示范數(shù)據(jù)庫(kù)——家庭經(jīng)營(yíng)管理數(shù)據(jù)庫(kù)!")(3)在VBA代碼中,不區(qū)分字母的大小寫,例如,SUM與Sum是等同的。(4)當(dāng)輸入一行語(yǔ)句并按下回車鍵后,如果該行代碼以紅色文本顯示(有時(shí)伴有錯(cuò)誤信息出現(xiàn))時(shí),則表明該行語(yǔ)句代碼存在語(yǔ)法錯(cuò)誤,用戶應(yīng)更正。,9.5.2VBA注釋語(yǔ)句,在VBA程序中,注釋可以通過以下兩種方式實(shí)現(xiàn):(1)使用Rem語(yǔ)句(2)用英文單引號(hào)注釋語(yǔ)句可寫在某個(gè)語(yǔ)句的后面,也可以單獨(dú)占據(jù)一整行,但是,當(dāng)把Rem表示的注釋語(yǔ)句寫在某個(gè)語(yǔ)句的后面的同一行時(shí),必須在該語(yǔ)句與Rem之間用一個(gè)英文的冒號(hào)“:”分隔開。例如:s=3.14*r*r求圓的面積上一句是把英文單引號(hào)注釋語(yǔ)句寫在某個(gè)語(yǔ)句的后面的同一行時(shí)例句r=2:Remr表示圓的半徑Rem上一句是把Rem表示的注釋語(yǔ)句寫在某個(gè)語(yǔ)句的后面的同一行時(shí)例句,此外,可以通過選中兩行或多行代碼后,通過單擊“編輯”工具欄(如圖9-22所示)上的“設(shè)置注釋塊”按鈕或“解除注釋塊”按鈕來(lái)對(duì)該代碼塊添加或刪除注釋符號(hào)“”。,圖9-22“編輯”工具欄,9.5.3VBA聲明語(yǔ)句,聲明語(yǔ)句用于命名和定義常量、變量、數(shù)組和過程。在定義了這些內(nèi)容的同時(shí),也定義了它們的生命周期與作用范圍,這取于定義位置(局部、模塊或全局)和使用的關(guān)鍵字(Dim、Public、Static或Global)。例如,有一程序段如下:SubSample()ConstPI=3.14159DimintIasInteger,lngKasAsLong,Y(3,5)AsDouble…….EndSubConst聲明語(yǔ)句定義了一個(gè)名為PI的符號(hào)常量。Dim聲明語(yǔ)句則定義了一個(gè)名為intI的整型變量、一個(gè)名為lngK的長(zhǎng)整型變量和一個(gè)名為Y的有24個(gè)數(shù)組元素的雙精度型的二維數(shù)組。,9.5.4VBA賦值語(yǔ)句,賦值語(yǔ)句是為變量指定一個(gè)表達(dá)式。通常以符號(hào)(=)連接。賦值語(yǔ)句格式:[Let]變量名=表達(dá)式功能:計(jì)算右端的表達(dá)式,并把計(jì)算結(jié)果(值)賦值給左端的變量。Let為可選項(xiàng),表示賦值,通常省略。符號(hào)“=”被稱為賦值號(hào)。賦值號(hào)“=”左邊的變量也可以是對(duì)象的屬性,但賦值號(hào)“=”左邊不能是常量。例如:I=7^2Mod5‘把右端表達(dá)式的運(yùn)算結(jié)果值4賦給變量Itext1.Value="語(yǔ)言"把字符串"語(yǔ)言"賦給文本框text1的Value屬性P="VBA"&text1.Value把右端表達(dá)式的運(yùn)算結(jié)果值"VBA語(yǔ)言"賦給變量P,9.5.5輸入/輸出的語(yǔ)句,,在VBA程序中,有時(shí)需要接收用戶的數(shù)據(jù)輸入,有時(shí)需要將操作的結(jié)果數(shù)據(jù)輸出告知用戶,為此,VBA提供有相應(yīng)的輸入和輸出功能?!馡nputBox●MsgBox,1.InputBox函數(shù),,InputBox函數(shù)調(diào)用的功能是顯出一個(gè)輸入對(duì)話框,等待用戶在該對(duì)話框的文本框中鍵入文本。當(dāng)用戶單擊“確定”按鈕,該函數(shù)返回文本框中的輸入的值;當(dāng)用戶單擊“取消”按鈕,該函數(shù)將返回長(zhǎng)度為零的空字符串("")。InputBox函數(shù)格式:InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])DimaAsLonga=InputBox("請(qǐng)輸入8個(gè)字符的學(xué)號(hào):","輸入學(xué)號(hào)","",1000,200),,,,2.MsgBox,,MsgBox調(diào)用的功能是打開一個(gè)消息對(duì)話框,并在該對(duì)話框中顯示消息,等待用戶單擊按鈕,并返回一個(gè)整數(shù)告訴用戶單擊哪一個(gè)按鈕。MsgBox函數(shù)格式:MsgBox(prompt[,buttons][,title][,helpfile,context])MsgBox過程格式:MsgBoxprompt[,buttons][,title][,helpfile,context]請(qǐng)注意MsgBox函數(shù)與MsgBox過程的格式區(qū)別,MsgBox函數(shù)格式中是有一對(duì)圓括號(hào)的,而MsgBox過程格式中是沒有圓括號(hào)的。,MsgBox的參數(shù)說明,,MsgBox函數(shù)與MsgBox過程的參數(shù)相同。(1)prompt:本參數(shù)是MsgBox函數(shù)中必需的、唯一不能省略的選項(xiàng)。本參數(shù)是字符串表達(dá)式,作為顯示在對(duì)話框中的消息。(2)buttons:本參數(shù)可選的。它是整型表達(dá)式,指定顯示按鈕的數(shù)目及形式,使用的圖標(biāo)樣式,默認(rèn)按鈕是什么以及消息框的強(qiáng)制回應(yīng)等。如果省略buttons參數(shù),默認(rèn)值為0。本參數(shù)按鈕的整型表達(dá)式中的各項(xiàng)值如表9-23所示。在表9-23中,第一組值(0–5)描述了對(duì)話框中顯示的按鈕的類型與數(shù)目;第二組值(16,32,48,64)描述了圖標(biāo)的樣式;第三組值(0,256,512)說明哪一個(gè)按鈕是缺?。J(rèn))值;而第四組值(0,4096)則決定消息框的強(qiáng)制返回性。將這些數(shù)字相加以生成buttons參數(shù)值的時(shí)候,只能由每組值取用一個(gè)數(shù)字。(3)title:本參數(shù)是可選的。用于指定在對(duì)話框標(biāo)題欄中要顯示的字符串表達(dá)式。,,MsgBox函數(shù)的返回值,,表9-24MsgBox函數(shù)的返回值,,例如:a=MsgBox("請(qǐng)用戶選擇單擊某一按鈕",4+48+0,"MsgBox函數(shù)")4表示顯示“是”及“否”按鈕48表示顯示W(wǎng)arningMessage圖標(biāo)0表示第一個(gè)按鈕(“是”按鈕)是缺省值,,,,例9-3,,例9-3使用InputBox函數(shù)、MsgBox函數(shù)與MsgBox過程的例子。PrivateSubCommand0_Click()DimaAsLonga=InputBox("請(qǐng)輸入8個(gè)字符的學(xué)號(hào):","輸入學(xué)號(hào)","",1000,200)MsgBox"輸入學(xué)號(hào)是"&aa=MsgBox("請(qǐng)用戶選擇單擊某一按鈕",4+48+0,"MsgBox函數(shù)")‘如圖9-24所示Rem4+48+0表達(dá)式中的4的含義:4表示顯示“是”及“否”按鈕Rem4+48+0表達(dá)式中的48的含義:48表示顯示W(wǎng)arningMessage圖標(biāo)Rem4+48+0表達(dá)式中的0的含義:0表示第一個(gè)按鈕(“是”按鈕)是缺省值Ifa=6Then注意,本語(yǔ)句中的a=6也可改用a=vbYesMsgBox"用戶已單擊了MsgBox函數(shù)對(duì)話框中的“是”按鈕",,"MsgBox過程"EndIfIfa=vbNoThen注意,本語(yǔ)句中的a=vbNo也可改用a=7MsgBox"用戶已單擊了MsgBox函數(shù)對(duì)話框中的“否”按鈕",,"MsgBox過程"‘如圖9-25所示EndIfEndSub,例9- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Access 數(shù)據(jù)庫(kù) 基礎(chǔ) 應(yīng)用 教程 人民郵電 出版社 ch
鏈接地址:http://www.hcyjhs8.com/p-3386394.html