國(guó)家二級(jí)計(jì)算機(jī)access 模塊_第1頁(yè)
國(guó)家二級(jí)計(jì)算機(jī)access 模塊_第2頁(yè)
國(guó)家二級(jí)計(jì)算機(jī)access 模塊_第3頁(yè)
國(guó)家二級(jí)計(jì)算機(jī)access 模塊_第4頁(yè)
國(guó)家二級(jí)計(jì)算機(jī)access 模塊_第5頁(yè)
已閱讀5頁(yè),還剩103頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第8章模塊8.1模塊的基本概念8.2過(guò)程及模塊分類(lèi)8.3VBA程序設(shè)計(jì)基礎(chǔ)8.1模塊的基本概念A(yù)ccess的表、查詢(xún)、窗體、報(bào)表和數(shù)據(jù)訪(fǎng)問(wèn)頁(yè)不能相互驅(qū)動(dòng)和調(diào)用。使用模塊和宏可以將數(shù)據(jù)庫(kù)中所有對(duì)象聯(lián)系起來(lái)、統(tǒng)一管理,形成完整的數(shù)據(jù)庫(kù)系統(tǒng)。通過(guò)上一章對(duì)宏的學(xué)習(xí),我們了解到可以利用宏來(lái)執(zhí)行一系列簡(jiǎn)單的操作。但是如果要對(duì)數(shù)據(jù)庫(kù)對(duì)象進(jìn)行更復(fù)雜、更靈活的控制,就需要通過(guò)編程來(lái)實(shí)現(xiàn)。在Access中,編程是通過(guò)模塊對(duì)象實(shí)現(xiàn)的。利用模塊可以將各種數(shù)據(jù)庫(kù)對(duì)象聯(lián)結(jié)起來(lái),從而使其構(gòu)成一個(gè)完整的系統(tǒng)。它的功能比宏更強(qiáng)大,設(shè)計(jì)也更為靈活。模塊是Access的數(shù)據(jù)庫(kù)中的一個(gè)重要對(duì)象。模塊是由VBA(VisualBasicforApplications)語(yǔ)言編寫(xiě)的程序的集合。是以函數(shù)過(guò)程(Function)或子過(guò)程(Sub)為單元的集合方式存儲(chǔ)。模塊可分成兩種基本類(lèi)型:類(lèi)模塊和標(biāo)準(zhǔn)模塊。8.1模塊的基本概念區(qū)分:VB,VBA,VBE(VisualBasicEditor)窗體和報(bào)表模塊是類(lèi)模塊的典型例子。窗體和報(bào)表模塊通常都含有事件過(guò)程,該過(guò)程用于響應(yīng)窗體或報(bào)表中的事件,可以使用事件過(guò)程來(lái)控制窗體或報(bào)表的行為,以及它們對(duì)用戶(hù)操作的響應(yīng)。8.1.1類(lèi)模塊窗體模塊和報(bào)表模塊中的過(guò)程可以調(diào)用標(biāo)準(zhǔn)模塊中已經(jīng)定義好的過(guò)程。窗體模塊和報(bào)表模塊具有局部特性,其作用局限在所屬窗體或報(bào)表內(nèi)部,而生命周期則是伴隨著窗體的打開(kāi)而開(kāi)始、關(guān)閉而結(jié)束。8.1.1類(lèi)模塊標(biāo)準(zhǔn)模塊一般用于存放供其它Access數(shù)據(jù)庫(kù)對(duì)象使用的公共過(guò)程。在Access中,可以通過(guò)創(chuàng)建新的模塊對(duì)象而進(jìn)入其代碼設(shè)計(jì)過(guò)程。標(biāo)準(zhǔn)模塊通常安排一些公共變量或過(guò)程供類(lèi)模塊里的過(guò)程調(diào)用。在各個(gè)標(biāo)準(zhǔn)模塊內(nèi)部也可以定義私有變量和私有過(guò)程僅供本模塊內(nèi)部使用。標(biāo)準(zhǔn)模塊中的公共變量和公共過(guò)程具有全局特性,其作用范圍在整個(gè)應(yīng)用程序里,生命周期是伴隨著應(yīng)用程序的運(yùn)行而開(kāi)始、關(guān)閉而結(jié)束。8.1.2標(biāo)準(zhǔn)模塊在數(shù)據(jù)庫(kù)窗口—宏對(duì)象下—選擇宏—選擇“工具”菜單下“將宏轉(zhuǎn)換為vb”。8.1.3將宏轉(zhuǎn)換為模塊P2461.模塊模塊是由過(guò)程組成的。2.過(guò)程過(guò)程:將VBA語(yǔ)言的聲明和語(yǔ)句集合在一起,作為一個(gè)命名單位的程序段(執(zhí)行特定功能的語(yǔ)句塊)。它包含許多語(yǔ)句和方法,以執(zhí)行特定的操作或計(jì)算數(shù)值。8.2過(guò)程及模塊分類(lèi)P247(創(chuàng)建模塊)過(guò)程的二種類(lèi)型:sub子過(guò)程:執(zhí)行一系列操作的過(guò)程。

function函數(shù)過(guò)程:特殊的、能返回值的函數(shù)過(guò)程。區(qū)別方法:能否返回值,是過(guò)程和函數(shù)之間最大的區(qū)別。8.2過(guò)程及模塊分類(lèi)P247(創(chuàng)建模塊)子過(guò)程:也稱(chēng)為Sub過(guò)程,是執(zhí)行一項(xiàng)操作的過(guò)程。子過(guò)程沒(méi)有返回值,子程序以關(guān)鍵字Sub開(kāi)始,并以EndSub語(yǔ)句作為結(jié)束。可以引用過(guò)程名調(diào)用,或使用關(guān)鍵字Call8.2過(guò)程及模塊分類(lèi)-子過(guò)程子過(guò)程格式:Sub子程序名()[程序代碼]EndSub例:編寫(xiě)標(biāo)準(zhǔn)模塊1,寫(xiě)子過(guò)程model,輸出消息框:這是model,位于標(biāo)準(zhǔn)模塊編寫(xiě)窗體類(lèi)模塊1,寫(xiě)字過(guò)程class,輸出消息框:這是class,位于窗體類(lèi)模塊函數(shù)過(guò)程:也稱(chēng)為Function過(guò)程,是一種能夠返回具體值的過(guò)程,返回的值可以在表達(dá)式中使用。函數(shù)過(guò)程以關(guān)鍵字Function開(kāi)始,并以EndFunction語(yǔ)句作為結(jié)束。不能使用call調(diào)用,直接引用函數(shù)過(guò)程名,函數(shù)名后要加括號(hào)。函數(shù)格式:Function函數(shù)名稱(chēng)()as數(shù)據(jù)類(lèi)型[程序代碼]EndFunction8.2過(guò)程及模塊分類(lèi)-函數(shù)例:在標(biāo)準(zhǔn)模塊中編寫(xiě)全局函數(shù)yesterday()在數(shù)據(jù)庫(kù)窗口對(duì)象下,雙擊“在設(shè)計(jì)視圖中創(chuàng)建窗體”,在窗體中添加文本框,標(biāo)簽名稱(chēng)為“歡迎”,添加2個(gè)命令按鈕,標(biāo)題分別為“顯示”和“清除”,然后選中“顯示”按鈕,單擊“屬性”按鈕,選擇“事件”選項(xiàng)卡,單擊“單擊”項(xiàng)中的“…”,在代碼窗口中輸入vba語(yǔ)句。在代碼窗口的對(duì)象框中選擇“清除”按鈕(命令2),在該過(guò)程中輸入vba語(yǔ)句。在代碼窗口的對(duì)象框中選擇“form”,在該過(guò)程中輸入vba語(yǔ)句。返回到窗體,單擊窗體視圖,分別單擊顯示和清除按鈕,看運(yùn)行情況。作業(yè)1作業(yè)2:在模塊對(duì)象下創(chuàng)建函數(shù)過(guò)程,計(jì)算半徑為3的球的體積。操作步驟如下:在模塊對(duì)象下,單擊“新建”按鈕,打開(kāi)新建模塊窗口,單擊“插入”菜單上“過(guò)程”,在過(guò)程對(duì)話(huà)框中選擇類(lèi)型為“函數(shù)”范圍為“公共的”,輸入名稱(chēng)為“volume”,單擊“確定”按鈕。在函數(shù)過(guò)程中填寫(xiě)vba語(yǔ)句。PublicFunctionVolume()AsSingleVolume=4/3*3.14*3^3EndFunction在窗體文本框中調(diào)用函數(shù)function()顯示結(jié)果:113.04計(jì)算半徑為3的球的體積。1.對(duì)象在VBA程序設(shè)計(jì)時(shí),界面上的所有事物都可以稱(chēng)為對(duì)象。每一個(gè)對(duì)象都有自己的屬性、方法和事件。用戶(hù)是通過(guò)屬性、方法和事件來(lái)處理對(duì)象的。8.3VBA程序設(shè)計(jì)基礎(chǔ)

8.3.1面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念屬性和方法:描述了對(duì)象的性質(zhì)和行為。引用:對(duì)象名.屬性或?qū)ο竺?方法[參數(shù)名表]對(duì)象的屬性例:label0.caption=“學(xué)生成績(jī)表”對(duì)象的方法例:text1.setfocusDoCmd對(duì)象: 有許多方法,如Openform 打開(kāi)窗體例如:DoCmd.Openform“學(xué)生登記”RunMacro 運(yùn)行宏操作等,例如Docmd.RunMacro“mac1”2.對(duì)象的屬性和方法P248打開(kāi)當(dāng)前數(shù)據(jù)庫(kù)中的“雇員”窗體DoCmd.OpenForm"EmployeesDocmd.Runmacro“Macro1”方法的例子省略的參數(shù)方法窗體名宏名3.事件P248事件:對(duì)象可辨認(rèn)的動(dòng)作,如單擊鼠標(biāo)、按下某個(gè)鍵等事件響應(yīng)代碼:若為一個(gè)事件編寫(xiě)一段VBA代碼,則在事件發(fā)生時(shí)執(zhí)行代碼,完成指定的動(dòng)作。窗體中添加文本框和命令按鈕,命令按鈕屬性中“單擊”事件中添加vba代碼,然后窗體視圖查看結(jié)果。PrivateSub命令2_Click()文本0.FontSize=20EndSub8.3.2VBA編程環(huán)境工程窗口-選擇對(duì)象屬性窗口-選擇對(duì)象的屬性代碼窗口選擇事件1.進(jìn)入VBE編程環(huán)境P2522.VBA窗口1)標(biāo)準(zhǔn)工具欄視圖MicrosoftAccess按鈕:切換Access2000窗口插入按鈕:插入模塊或過(guò)程運(yùn)行子過(guò)程/用戶(hù)窗體按鈕:運(yùn)行模塊中的程序中斷按鈕:中斷正在運(yùn)行的程序重新設(shè)置按鈕:結(jié)束正在運(yùn)行的程序設(shè)置模式按鈕:在設(shè)計(jì)模式和非設(shè)計(jì)模式之間切換工程資源管理器按鈕:用于打開(kāi)工程資源管理器屬性窗口按鈕:用于打開(kāi)屬性窗口對(duì)象瀏覽器按鈕:用于打開(kāi)對(duì)象瀏覽器MicrosoftAccsee插入模塊運(yùn)行子過(guò)程/用戶(hù)窗體設(shè)計(jì)模式中斷重新設(shè)計(jì)工程資源管理器對(duì)象瀏覽器屬性窗口3.工程、屬性、代碼窗口工程窗口:也叫工程資源管理器,顯示應(yīng)用程序中用到的模塊文件列表。可控制代碼窗口、對(duì)象窗口,以及對(duì)象文件夾的顯示。屬性窗口:所選對(duì)象的屬性列表??伞鞍醋帜感颉焙汀鞍捶诸?lèi)序”查看屬性,編輯這些對(duì)象的屬性。在屬性窗口顯示Access類(lèi)對(duì)象的方法:先在設(shè)計(jì)視圖中打開(kāi)對(duì)象。再雙擊工程窗口上的一個(gè)模塊或類(lèi),代碼窗口就會(huì)顯示相應(yīng)的指令和聲明。代碼窗口:用于輸入和編輯VBA代碼。4.在代碼窗口中編程P254(三)對(duì)象列表過(guò)程列表提示信息_自動(dòng)顯示或Ctrl+JF1:VBA幫助窗口F2:對(duì)象瀏覽器窗口一、數(shù)據(jù)類(lèi)型和數(shù)據(jù)庫(kù)對(duì)象在VisualBasic環(huán)境下進(jìn)行計(jì)算時(shí),常常需要臨時(shí)存儲(chǔ)數(shù)據(jù)。像大多數(shù)編程語(yǔ)言那樣,VisualBasic使用變量來(lái)存儲(chǔ)值。變量有名字和數(shù)據(jù)類(lèi)型。變量的數(shù)據(jù)類(lèi)型決定了如何將這些值存儲(chǔ)到計(jì)算機(jī)的內(nèi)存中。在聲明變量時(shí)也可指定它的數(shù)據(jù)類(lèi)型,所有變量都具有數(shù)據(jù)類(lèi)型,以決定能夠存儲(chǔ)哪種數(shù)據(jù)類(lèi)型。用戶(hù)可以定義各種數(shù)據(jù)類(lèi)型。Access中數(shù)據(jù)類(lèi)型的應(yīng)用:聲明過(guò)程中的變量,定義表、函數(shù)的參數(shù)等。VBA的數(shù)據(jù)類(lèi)型表P256表8.38.3.3常量、變量、運(yùn)算符和表達(dá)式P255VBA主要數(shù)據(jù)類(lèi)型P255數(shù)值型數(shù)據(jù)的符號(hào):整型%、長(zhǎng)整型&、單精度型!、雙精度型#例:10.33#100%布爾型數(shù)據(jù)的值:兩種值:True和False,其他數(shù)值類(lèi)型轉(zhuǎn)換為布爾型時(shí),0變成False,其他值均為T(mén)rue。布爾型轉(zhuǎn)換為其他型時(shí),F(xiàn)alse成為0,True成為-1。日期型變量的值:日期值用#括起來(lái),如 #2004/11/23#Variant(變體)數(shù)據(jù)類(lèi)型:若未給變量指定數(shù)據(jù)類(lèi)型,Access自動(dòng)指定其為Variant類(lèi)型。Variant可包含除定長(zhǎng)String數(shù)據(jù)及用戶(hù)定義類(lèi)型之外的任何種類(lèi)的數(shù)據(jù)。也可包含Empty、Error、Nothing及Null特殊值。 %(Integer)、&(Long)、!(Single)、#(Double)、$(String)和@(Currency)。類(lèi)型說(shuō)明符號(hào)使用時(shí)是作為變量名的一部分,放在變量名的最后一個(gè)字符。例如,intX%是一個(gè)整型變量;douY#是一個(gè)雙精度變量;strZ$是個(gè)字符串變量。在使用時(shí)不能將類(lèi)型說(shuō)明符號(hào)省略。如:intX%=1243douY#=45665.456strZ$="Access"二、變量VisualBasic使用變量來(lái)存儲(chǔ)值。用來(lái)保存在程序運(yùn)行期間可修改的數(shù)據(jù)。變量名可隨意定義,但不能與VBA關(guān)鍵詞沖突,變量的值可按需變化。變量必須先聲明數(shù)據(jù)類(lèi)型,然后才能使用。1.聲明變量每一個(gè)變量都必須在其使用的過(guò)程中事先聲明。聲明變量的作用:指定變量的數(shù)據(jù)類(lèi)型和作用域。未聲明的變量默認(rèn)為Variant類(lèi)型。若要求在使用變量前必須聲明,可進(jìn)行設(shè)置。聲明一個(gè)變量用Dim語(yǔ)句,它的語(yǔ)法格式如下:

Dim變量名[As數(shù)據(jù)類(lèi)型]語(yǔ)句中的“As類(lèi)型”子句是可選的。如果使用了該子句,就可以定義變量的數(shù)據(jù)類(lèi)型或?qū)ο箢?lèi)型。使用Dim語(yǔ)句來(lái)聲明變量,其功能為聲明變量,并為變量分配存儲(chǔ)空間。例如,Dim

MYNameAsStringDims1AsString*50‘說(shuō)明定長(zhǎng)字符串變量可存放50字符DimxAsInteger或Dimx%

聲明了字符串變量MyName的Sting??山o其賦值:MyName=“李紅”賦值之后即可引用該變量:MsgBox“姓名:”&MyName‘彈出消息框,顯示:姓名:李紅可在同一行內(nèi)聲明多個(gè)變量。例如,DimA_Var,t1AsBoolean,D1AsDate其中A_Var的類(lèi)型未指定類(lèi)型。默認(rèn)為Variant。2條語(yǔ)句是等價(jià)的變量的初始化:聲明而未賦值的變量的值為:

◆數(shù)值變量初始化為0

◆變長(zhǎng)字符串為零長(zhǎng)度串,定長(zhǎng)字符串都填上零

◆Variant變量初始化為Empty

2.變量的命名原則在VBA的代碼中,過(guò)程、變量及常量的名稱(chēng)有如下規(guī)定:(l)最長(zhǎng)只能有255個(gè)字符。(2)必須用字母開(kāi)頭。(3)可以包含字母、數(shù)字或下劃線(xiàn)字符“_”。(4)不能包含標(biāo)點(diǎn)符號(hào)或空格。(5)不能是VisualBasic關(guān)鍵字。關(guān)鍵字是那些在VisualBasic中用作語(yǔ)法的一部分的詞,包括預(yù)定義語(yǔ)句(如If和Loop)、函數(shù)(如Len和Abs)和運(yùn)算符(如Or和Mod)等等。在VBA編程窗口選擇:工具|選項(xiàng)數(shù)據(jù)庫(kù)所有新模塊中自動(dòng)添加OptionExplicit語(yǔ)句,功能為:強(qiáng)制對(duì)模塊中的所有變量進(jìn)行顯式聲明。也可直接將語(yǔ)句輸入到模塊的聲明節(jié)。3.強(qiáng)制對(duì)模塊中的所有變量進(jìn)行顯式聲明的設(shè)置。4.隱含型變量沒(méi)有直接定義,借用一個(gè)值指定給變量名的方式來(lái)建立的變量稱(chēng)為隱含型變量。例:s1=123這種變量名稱(chēng)后沒(méi)有附加類(lèi)型說(shuō)明字符來(lái)指明的隱含型變量的數(shù)據(jù)類(lèi)型為默認(rèn)的Variant類(lèi)型。若在命令名稱(chēng)后加附加類(lèi)型說(shuō)明則指定了改變量的數(shù)據(jù)類(lèi)型。例:s1%=123s1則為整形變量。5.變量的作用域變量的范圍確定了能夠使用該變量的那部分代碼。一旦超出了作用范圍,就不能引用它的內(nèi)容。變量的作用范圍是在模塊中聲明確定的。聲明變量時(shí)可以使用三種不同的作用范圍:Public、Private、Static和Dim。變量的作用域決定了這個(gè)變量是被一個(gè)過(guò)程使用還是一個(gè)模塊中的所有過(guò)程使用,還是被數(shù)據(jù)庫(kù)中的所有過(guò)程使用。(1)過(guò)程內(nèi)部使用的變量過(guò)程級(jí)變量只有在聲明它們的過(guò)程中才能被識(shí)別,也稱(chēng)它們?yōu)榫植孔兞俊S肈im或者Static關(guān)鍵字來(lái)聲明它們。例如:DimV1AsInteger或StaticV1AsInteger在整個(gè)應(yīng)用程序運(yùn)行時(shí),用Static聲明的局部變量中的值一直存在,而用Dim聲明的變量只在過(guò)程執(zhí)行期間才存在。(2)模塊內(nèi)部使用的變量模塊級(jí)變量對(duì)該模塊的所有過(guò)程都可用,但對(duì)其他模塊的代碼不可用。可在模塊頂部的聲明段用Private關(guān)鍵字聲明變量,從而建立模塊級(jí)變量。例如;PrivateV1AsInteger在模塊級(jí),Private和Dim之間沒(méi)有什么區(qū)別,但Private更好些,因?yàn)楹苋菀装阉蚉ublic區(qū)別開(kāi)來(lái),使代碼更容易理解。(3)所有模塊使用的變量為了使模塊級(jí)的變量在其他模塊也有效,可用Public關(guān)鍵字聲明變量。公用變量中的值可用于應(yīng)用程序的所有過(guò)程。和所有模塊級(jí)變量一樣,也在模塊頂部的聲明來(lái)聲明公用變量。例如:PublicV1AsInteger用戶(hù)不能在過(guò)程中聲明公用變量,而在模塊中聲明的變量可用于所有模塊。三、數(shù)據(jù)類(lèi)型之間的轉(zhuǎn)換P257例:下列程序中將雙精度型變量轉(zhuǎn)換成字符串型。DimS1AsDoubleDimS2AsStringS1=437.327‘S1變量賦值為437.327 S2=CStr(S1)’S1變量值轉(zhuǎn)換為字符“437.327”四、用戶(hù)定義的數(shù)據(jù)類(lèi)型P258應(yīng)用過(guò)程中可以包括一個(gè)或多個(gè)標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型的數(shù)據(jù)類(lèi)型,即是用戶(hù)定義數(shù)據(jù)類(lèi)型。用戶(hù)自定義類(lèi)型可以是任何用Type語(yǔ)句定義的數(shù)據(jù)類(lèi)型。用戶(hù)自定義類(lèi)型可包含一個(gè)或多個(gè)基本數(shù)據(jù)類(lèi)型的數(shù)據(jù)元素、數(shù)組或一個(gè)先前定義的用戶(hù)自定義類(lèi)型。用戶(hù)定義數(shù)據(jù)類(lèi)型可以在Type…EndType關(guān)鍵字間定義,定義格式為:Type[數(shù)據(jù)類(lèi)型名]<域名>As<數(shù)據(jù)類(lèi)型><域名>As<數(shù)據(jù)類(lèi)型>…EndType例如:P258例8.2例8.2實(shí)現(xiàn)方法如下:在數(shù)據(jù)庫(kù)窗口模塊對(duì)象下,單擊“新建”按鈕—輸入8.2定義學(xué)生信息數(shù)據(jù)類(lèi)型—選擇“插入”菜單中“過(guò)程”—在對(duì)話(huà)框中選擇“子程序”、“公共的”或“函數(shù)”,輸入過(guò)程名為cg1—在過(guò)程中添加語(yǔ)句—單擊“運(yùn)行”按鈕—打開(kāi)“立即窗口”查看結(jié)果。補(bǔ)充:*在自定義數(shù)據(jù)類(lèi)型時(shí)應(yīng)注意:Type語(yǔ)句只能在模塊級(jí)使用??梢栽赥ype前面加上Public或Private來(lái)聲明自定義數(shù)據(jù)類(lèi)型的作用域,這與其它VBA基本數(shù)據(jù)類(lèi)型相同。聲明自定義數(shù)據(jù)類(lèi)型的域時(shí),如果使用字符串類(lèi)型,最好定長(zhǎng)字符串,如N1AsString*l0。使用Type語(yǔ)句聲明了一個(gè)用戶(hù)自定義類(lèi)型后,就可以在該聲明范圍內(nèi)的任何位置聲明該類(lèi)型的變量??梢允褂肈im、private、Public、ReDim或Static來(lái)聲明用戶(hù)自定義類(lèi)型的變量。五、數(shù)組P259

1.數(shù)組的聲明和引用數(shù)組:表示一組具有相同數(shù)據(jù)類(lèi)型的值,稱(chēng)為數(shù)組員素變量。數(shù)組變量由變量名和數(shù)組下標(biāo)構(gòu)成。數(shù)組的聲明:一般使用Dim語(yǔ)句聲明(定義)數(shù)組。數(shù)組格式:Dim數(shù)組名([下標(biāo)1下限to][下標(biāo)1上限][AS數(shù)據(jù)類(lèi)型],[下標(biāo)2下限to][下標(biāo)2上限])…)[AS數(shù)據(jù)類(lèi)型]說(shuō)明:默認(rèn)數(shù)組下標(biāo)從零開(kāi)始。例,DimS1(3)AsInteger數(shù)組變量S1,共有4個(gè)元素,S1(0)、S1(1)、S1(2)、S1(3)??墒蛊鋸钠渌甸_(kāi)始。在模塊頂部添加OptionBase

語(yǔ)句。例如,OptionBase1DimS1(3)AsInteger聲明數(shù)組變量S1共有3個(gè)元素,下標(biāo)起始值為1,S1(1)、S1(2)、S1(3)。也可用To子句對(duì)數(shù)組下標(biāo)聲明例如,DimS1(1to3)AsIntegerDimx(5to7)Aslong分別指定S數(shù)組的下標(biāo)從1開(kāi)始,X數(shù)組下標(biāo)從5開(kāi)始。多維數(shù)組:多個(gè)下標(biāo)。VBA中最多可到60維。例如:DimN(1To2,1To3)AsSingle聲明了一個(gè)2乘3的兩維數(shù)組,有6個(gè)數(shù)組元素??蓪⑵湎胂癯删仃嚕谝粋€(gè)參數(shù)為行號(hào),第二個(gè)為列號(hào)。S(1,1),S(1,2),S(1,3),S(2,1),S(2,2),S(2,3)動(dòng)態(tài)數(shù)組定義和使用的方法:P259Dimnew1()anlong…ReDimnew1(3,3)

數(shù)組引用實(shí)例:數(shù)組元素的引用:數(shù)組元素用數(shù)據(jù)名和下標(biāo)引用。例如 DimS(6)AsInteger,N1AsInteger ForN1=0to6 S(N1)=20 Next六、數(shù)據(jù)庫(kù)對(duì)象變量P259Form!窗體名稱(chēng)!控件名稱(chēng).屬性名稱(chēng)Reports!報(bào)表名稱(chēng)!控件名稱(chēng).屬性名稱(chēng)七、變量標(biāo)識(shí)命名法則p260八、符號(hào)常量p260常量就是在應(yīng)用程序的運(yùn)行中不能改變的數(shù)值固定的資料對(duì)象。在用VBA進(jìn)行程序設(shè)計(jì)時(shí),使用常量可以增加代碼的可讀性和可維護(hù)性。如果在代碼中經(jīng)常用到一些很長(zhǎng)的數(shù)字,它們沒(méi)有明確的意義,并且很難記憶。這時(shí),可以給這樣的數(shù)字取一個(gè)有實(shí)際意義的名字,以取代程序中的具體數(shù)值。另外,如果要對(duì)數(shù)字進(jìn)行修改,只要修改常量的值就可以了,而不需要對(duì)所用到的數(shù)值一一進(jìn)行修改。符號(hào)常量可以用Const語(yǔ)句創(chuàng)建,并且可在模塊中使用。

常量與變量一樣也有3個(gè)范圍級(jí)別:過(guò)程級(jí)別、私有模塊級(jí)別和公共模塊級(jí)別。在聲明常量的同時(shí),也設(shè)定了它的范圍。用戶(hù)可以使用Const語(yǔ)句定義常量,語(yǔ)法結(jié)構(gòu)如下:[作用范圍]Const常量名[As數(shù)據(jù)類(lèi)型]=表達(dá)式例如:PublicConstPI=3.1415926′聲明一個(gè)在所有模塊中使用的常量PI說(shuō)明:這個(gè)值不能像上面例子中的變量那樣改變或賦予新值。

如果用戶(hù)在定義常量時(shí)不加Public或Private,則默認(rèn)為私有。其中常量名的命名規(guī)則與變量名的命名規(guī)則是一樣的。語(yǔ)句中的“表達(dá)式”是由數(shù)值常量或字符串常量以及運(yùn)算符組成的。九、系統(tǒng)常量p260系統(tǒng)定義常量包括3個(gè):True、False和Null。用戶(hù)可以在Access中的任何地方使用系統(tǒng)定義的常量。十、內(nèi)部常量p261內(nèi)部常量是Access或VBA的一部分,內(nèi)部常量是在Access或VBA的類(lèi)型庫(kù)中定義的。Access或VBA包含了許多預(yù)定義的內(nèi)部常量。所有的內(nèi)部常量都包含在類(lèi)型庫(kù)中,只有在模塊中引用了常量,被引用的常量才會(huì)裝到內(nèi)存中。要查看這些常量可以使用Access中的對(duì)象瀏覽器。十一、運(yùn)算符p2611.算術(shù)運(yùn)算符算術(shù)運(yùn)算符是常用的運(yùn)算符,用來(lái)執(zhí)行簡(jiǎn)單的算術(shù)運(yùn)算。VBA提供了8個(gè)算術(shù)運(yùn)算符,表列出了這些算術(shù)運(yùn)算符。在8個(gè)算術(shù)運(yùn)算符中,除取負(fù)(-)是單目運(yùn)算符外,其它均為雙目運(yùn)算符。加(+),減(-),乘(*),取負(fù)(-)、取余MOD等。在立即窗口練習(xí)p261例如中運(yùn)算2.關(guān)系運(yùn)算符與關(guān)系表達(dá)式

關(guān)系運(yùn)算符也稱(chēng)比較運(yùn)算符,用來(lái)對(duì)兩個(gè)表達(dá)式的值進(jìn)行比較,比較的結(jié)果是一個(gè)邏輯值,即真(True)或假(False)。用關(guān)系運(yùn)算符連接兩個(gè)算術(shù)表達(dá)式所組成的表達(dá)式叫做關(guān)系表達(dá)式。VBA提供了6個(gè)關(guān)系運(yùn)算符,如表所示。在立即窗口練習(xí)關(guān)系運(yùn)算符中例如運(yùn)算3.邏輯運(yùn)算符p262邏輯運(yùn)算也稱(chēng)布爾運(yùn)算,由邏輯運(yùn)算符連接兩個(gè)或多個(gè)關(guān)系式,組成一個(gè)布爾表達(dá)式。VBA的邏輯運(yùn)算符有與AND、或OR、非NOT運(yùn)算。在立即窗口練習(xí)例如中運(yùn)算。4.連接運(yùn)算符p262字符串連接(&)用來(lái)連接多個(gè)字符串(字符串相加)。例如:A$="My"B$="Home"C$=A$+B$運(yùn)算結(jié)果為:變量C$的值為"MyHome"。在VBA中,“+”既可用作加法運(yùn)算符,還可以用作字符串連接符,但“&”專(zhuān)門(mén)用作字符串連接運(yùn)算符,其作用與“+”相同。在有些情況下,用“&”比用“+”可能更安全。P262例如題,在立即窗口練習(xí)例如中運(yùn)算。十二、表達(dá)式和優(yōu)先級(jí)p263表達(dá)式:將常量和變量用各種運(yùn)算符連接在一起構(gòu)成的式子稱(chēng)為表達(dá)式優(yōu)先級(jí):同一表達(dá)式中,運(yùn)算進(jìn)行的先后順序由運(yùn)算符,表8.6十三、常用標(biāo)準(zhǔn)函數(shù)p2631數(shù)學(xué)函數(shù)絕對(duì)值函數(shù)Abs(<表達(dá)式>)取整函數(shù)Int(<表達(dá)式>)Fix(<表達(dá)式>)自然指數(shù)函數(shù)Exp(<數(shù)值表達(dá)式>)自然對(duì)數(shù)函數(shù)Log(<數(shù)值表達(dá)式>)開(kāi)平方函數(shù)Sqr(<數(shù)值表達(dá)式>)三角函數(shù)Sin(<數(shù)值表達(dá)式>)Cos(<數(shù)值表達(dá)式>)Tan(<數(shù)值表達(dá)式>)產(chǎn)生隨機(jī)數(shù)函數(shù)Rnd(<數(shù)值表達(dá)式>)2字符串函數(shù)字符串檢索函數(shù)InStr([Start,]<Str1>,<Str2>[,Compare])字符串長(zhǎng)度檢索函數(shù)Len(<字符串表達(dá)式>或<變量名>)字符串截取函數(shù)Left(<字符串表達(dá)式>,<N>)Right(<字符串表達(dá)式>,<N>)Mid(<字符串表達(dá)式>,<N1>,[N2])生成空格字符串函數(shù)Space(<字符串表達(dá)式>)大小寫(xiě)轉(zhuǎn)換函數(shù)Ucase(<字符串表達(dá)式>)Lcase(<字符串表達(dá)式>)刪除空格函數(shù)LTrim(<字符串表達(dá)式>)RTrim(<字符串表達(dá)式>)Trim(<字符串表達(dá)式>)3日期/時(shí)間函數(shù)獲取系統(tǒng)日期和時(shí)間DateTimeNow截取日期分量函數(shù)Year(<表達(dá)式>)Month(<表達(dá)式>)Day(<表達(dá)式>)4類(lèi)型轉(zhuǎn)換函數(shù)字符串轉(zhuǎn)換字符代碼函數(shù)Asc(<字符串表達(dá)式>)字符代碼轉(zhuǎn)換字符函數(shù)Chr(<字符代碼>)數(shù)字轉(zhuǎn)換成字符串函數(shù)Str(<數(shù)值表達(dá)式>)字符串轉(zhuǎn)換成數(shù)字函數(shù)Val(<字符串表達(dá)式>)計(jì)算機(jī)程序的執(zhí)行控制流程,有三種基本結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu):其中的語(yǔ)句按排列的順序依次執(zhí)行。條件判斷結(jié)構(gòu):按照給定的條件進(jìn)行判斷,再按判斷的結(jié)果分別執(zhí)行程序中不同部分的代碼。循環(huán)結(jié)構(gòu):按照條件反復(fù)執(zhí)行一系列語(yǔ)句。根據(jù)循環(huán)的條件,可以把循環(huán)結(jié)構(gòu)分為兩類(lèi): ◆當(dāng)型循環(huán)結(jié)構(gòu):當(dāng)條件成立時(shí),反復(fù)執(zhí)行語(yǔ)句。 ◆直到型循環(huán)結(jié)構(gòu):反復(fù)執(zhí)行語(yǔ)句直到條件成立為止。8.3.4VBA程序流程控制語(yǔ)句語(yǔ)句組2語(yǔ)句組1TF語(yǔ)句組2條件語(yǔ)句組2FT條件語(yǔ)句組TF條件語(yǔ)句組一、語(yǔ)句書(shū)寫(xiě)規(guī)定VBA語(yǔ)句:一條語(yǔ)句是一個(gè)完整的命令??砂P(guān)鍵字、運(yùn)算符、變量、常數(shù)和表達(dá)式。1.語(yǔ)句可分為三類(lèi):聲明語(yǔ)句:命名和定義過(guò)程、變量、數(shù)組以及常數(shù)??蓤?zhí)行語(yǔ)句:執(zhí)行賦值、判斷、循環(huán)等各種操作,運(yùn)行過(guò)程或函數(shù)等。賦值語(yǔ)句:給變量或常量指定一個(gè)值或表達(dá)式。

例如,Y=2*X+1Lable1.caption=“學(xué)號(hào):”2.書(shū)寫(xiě)規(guī)定:通常一個(gè)語(yǔ)句占一行,一行寫(xiě)不下時(shí)使用續(xù)行符“_”將語(yǔ)句下在下一行。例如:MsgBoxPrompt:="Hello"&myVar,_ Title:="GreetingBox",_ Buttons:=vbExclamation使用“:”將幾個(gè)不同的語(yǔ)句分隔開(kāi),寫(xiě)在一行中。例如:DimString1AsStringString1="Howareyou!"可以寫(xiě)成下面一行:

DimString1AsString:String1="Howareyou!"3.注釋語(yǔ)句通常,一個(gè)好的程序一般都要求有注釋語(yǔ)句。這對(duì)程序的維護(hù)有很大的好處。即使是程序員自己,如果沒(méi)有注釋語(yǔ)句,在一段時(shí)間以后,要讀懂自己的程序,也并非一件容易的事。運(yùn)行過(guò)程時(shí)忽略注釋。在VBA程序中,注釋可以通過(guò)以下兩種方式實(shí)現(xiàn):使用Rem語(yǔ)句,格式為:Rem注釋語(yǔ)句使用“’”號(hào),格式為:’注釋語(yǔ)句

例如:Rem聲明兩個(gè)變量DimString1,String2String1="Howareyou":Rem同行中在語(yǔ)句之后用Rem注釋?zhuān)枰妹疤?hào)隔開(kāi)。String2="Goodbye“′如果用撇號(hào)注釋?zhuān)瑒t無(wú)需使用冒號(hào)。例如,DimMyStr1,MyStr2MyStr1=“Hello”:Rem在語(yǔ)句后用:隔開(kāi)MyStr2="Goodbye"'這也是一條注釋二、聲明語(yǔ)句用于命名和定義常量、變量、數(shù)組和過(guò)程通過(guò)定義的位置(局部、模塊或全局)和使用的關(guān)鍵字(Dim,Public,Global或Static)決定這些內(nèi)容的生命周期和作用范圍三、賦值語(yǔ)句用于為變量指定一個(gè)值或表達(dá)式格式:[Let]變量名=值或表達(dá)式例:P269注意賦值號(hào)左邊只能是變量名,不能是常量或表達(dá)式不能在一條賦值語(yǔ)句中,同時(shí)給多個(gè)變量賦值

四、標(biāo)號(hào)和GoTo語(yǔ)句GoTo語(yǔ)句用于實(shí)現(xiàn)無(wú)條件跳轉(zhuǎn)格式:GoTo標(biāo)號(hào)…標(biāo)號(hào):…注意:標(biāo)號(hào)名字從代碼的最左列開(kāi)始寫(xiě)GoTo語(yǔ)句是早期Basic語(yǔ)言中常用的流程控制語(yǔ)句,現(xiàn)在的語(yǔ)言不提倡使用,因?yàn)檫^(guò)多會(huì)導(dǎo)致程序控制和調(diào)試都比較困難,VBA中主要用于錯(cuò)誤處理五、條件語(yǔ)句p270

VBA提供了如下幾種分支語(yǔ)句:

1.簡(jiǎn)單分支語(yǔ)句(If…Then語(yǔ)句)If測(cè)試指定的條件,如果條件為真(True),則執(zhí)行Then后面的語(yǔ)句。格式1:If條件表達(dá)式Then語(yǔ)句格式2:If〈條件表達(dá)式〉Then語(yǔ)句塊EndIf注意:If…Then的單行格式不用EndIf語(yǔ)句。但如果條件表達(dá)式的值為真(True)時(shí)要執(zhí)行多行代碼,則必須使用多行If…Then…EndIf語(yǔ)法。PrivateSubxyz()DimxAsInteger,yAsIntegerx=InputBox("請(qǐng)輸入x值")Ifx>=0Theny=2*x+1MsgBox"y:"&yEndIfEndSub2.選擇分支語(yǔ)句(If…Then…Else)If…Then語(yǔ)句的變形是If…Then…Else語(yǔ)句,它在條件為T(mén)rue時(shí),執(zhí)行一段語(yǔ)句,而在條件為False時(shí),執(zhí)行另一段語(yǔ)句。If…Then…Else語(yǔ)句的語(yǔ)法如下:格式3:If條件表達(dá)式Then語(yǔ)句塊1Else語(yǔ)句塊2EndIf例tj1

PrivateSubxyz()DimxAsInteger,yAsIntegerx=InputBox("請(qǐng)輸入x值")Ifx>=0Theny=2*x+1Elsey=1EndIfMsgBox"y:"&yEndSub例:Ifa>bThenDebug.PrintaElseDebug.Printb例CJ1:如果學(xué)生的分?jǐn)?shù)在60分以上,定為“及格”,否則定為“不及格”。Substud()DimsAsIntegers=Val(InputBox("請(qǐng)輸入學(xué)生成績(jī)"))Ifs>=60ThenMsgBox("及格")ElseMsgBox("不及格")EndIfEndsubIF語(yǔ)句的嵌套:多重選擇

格式4If條件語(yǔ)1Then語(yǔ)句組1elseif條件2Then語(yǔ)句組2elseif條件3Then語(yǔ)句組3……elseif條件nThen語(yǔ)句組nelse語(yǔ)句組n+1endif例TJ2:商品數(shù)量求折扣

PublicSubsl()Dim數(shù)量AsSingle,折扣AsSingle數(shù)量=InputBox("數(shù)量")If數(shù)量>100Then折扣=0.9ElseIf數(shù)量>200Then折扣=0.85ElseIf數(shù)量>300Then折扣=0.8ElseIf數(shù)量>400Then折扣=0.75ElseIf數(shù)量>500Then折扣=0.7Else折扣=1EndIfMsgBox"數(shù)量:"&數(shù)量MsgBox"折扣為"&折扣EndSub例:Ifs>=90ThenB="A"Debug.Print"成績(jī)?yōu)閮?yōu)"ElseIfs>=80ThenB="B"Debug.Print"成績(jī)?yōu)榱?ElseIfs>=70ThenB="C"Debug.Print"成績(jī)?yōu)橹?ElseIfs>=60ThenB="D"Debug.Print"成績(jī)?yōu)楹细?ElseIfs>=60ThenB="E"Debug.Print"成績(jī)?yōu)椴?Endlf進(jìn)一步練習(xí):1.創(chuàng)建一個(gè)過(guò)程,使用輸入語(yǔ)句接收托運(yùn)行李的重量,計(jì)算托運(yùn)行李收費(fèi):托運(yùn)行李重量<=25公斤,收費(fèi)標(biāo)準(zhǔn)是每公斤1元,行李重量大于25公斤,超出部分按每公斤2.5元計(jì)算。2.創(chuàng)建一個(gè)過(guò)程,使用輸入語(yǔ)句接收成績(jī)的分?jǐn)?shù),根據(jù)成績(jī)分?jǐn)?shù)顯示不同的獎(jiǎng)學(xué)金等級(jí)情況:成績(jī)<60,獎(jiǎng)學(xué)金等級(jí)0,60-69獎(jiǎng)學(xué)金等級(jí)3,70-79獎(jiǎng)學(xué)金等級(jí)2,>=80分獎(jiǎng)學(xué)金等級(jí)1。SelectCase選擇結(jié)構(gòu):根據(jù)表達(dá)式求值結(jié)果,選擇執(zhí)行幾個(gè)分支中的一個(gè)。格式:

SelectCase<表達(dá)式>Case<比較列表1><語(yǔ)句1>[Case<比較列表2>][<語(yǔ)句1>]……[CaseElse[<語(yǔ)句n>]]EndSelect2.SelectCase語(yǔ)句p271例:重編前例 數(shù)量=InputBox(“數(shù)量”) SelectCase數(shù)量div100Case0 折扣=1Case1 折扣=0.9Case2 折扣=0.85Case3 折扣=0.8Case4 折扣=0.75 CaseElse 折扣=0.7 EndSelect表達(dá)式列表的形式有三種:●Case表達(dá)式例如Case10,15。作用是判斷測(cè)試表達(dá)式的值是否為10或15?!馛ase表達(dá)式To表達(dá)式。例如Case10To15。作用是判斷測(cè)試表達(dá)式的值是否在10至15之間?!馛aseIs比較運(yùn)算符表達(dá)式例如CaseIs<15。作用是判斷測(cè)試表達(dá)式的值是否小于15。在Case子句中可以使用多重表達(dá)式。例如:Case10To15,20To25,30,31只要測(cè)試表達(dá)式的值與Case子句中列出的某一個(gè)值相同,條件就成立。系統(tǒng)就會(huì)執(zhí)行該Case后面的語(yǔ)句塊。If和SelectCase語(yǔ)句的應(yīng)用:If語(yǔ)句適合執(zhí)行多個(gè)條件都執(zhí)行的情況,而SelectCase在多個(gè)條件式中只能執(zhí)行一個(gè)滿(mǎn)足條件的語(yǔ)句塊。例如:根據(jù)計(jì)算機(jī)成績(jī)和英語(yǔ)成績(jī)顯示是否有獎(jiǎng)勵(lì)的過(guò)程程序只能使用If語(yǔ)句:Ifjsj>=80thenMsgbox“計(jì)算機(jī)成績(jī)?yōu)椤?jsjEndifIfyy>=80thenMsgbox“英語(yǔ)成績(jī)?yōu)椤?yyEndifMsgbox“獎(jiǎng)勵(lì)100元”練習(xí)中的第2題:使用輸入語(yǔ)句接收成績(jī)的分?jǐn)?shù),根據(jù)成績(jī)分?jǐn)?shù)顯示不同的獎(jiǎng)學(xué)金等級(jí)情況適合使用SelectCase語(yǔ)句結(jié)構(gòu)。1)iif函數(shù)Iif函數(shù)是if語(yǔ)句的一種特殊格式,它的使用語(yǔ)法如下:iif(條件式,表達(dá)式1,表達(dá)式2)iif函數(shù)的作用是,先判斷條件,如果條件為真,返回表達(dá)式l的值;否則返回表達(dá)式2的值。例如:c=IIf(a>b,a,b)語(yǔ)句執(zhí)行后,c為a和b中的最大值。2)Switch函數(shù)Switch(條件式1,表達(dá)式1[,條件式2,表達(dá)式2…條件式N,表達(dá)式N])P272例8.7y=Switch(x>0,1,x=0,0,x<0,-1)3)Choose函數(shù)Choose(索引式,選項(xiàng)1[,選項(xiàng)2,…[,選項(xiàng)N]])P273例8.8y=Choose(x,5,m+1,n)條件綜合例題P273例8.9六、循環(huán)語(yǔ)句P275

1.For…Next循環(huán)2.Do…Loop循環(huán)3.While…wend循環(huán)For…Next循環(huán)結(jié)構(gòu):將一段程序重復(fù)執(zhí)行指定的次數(shù),其中使用一個(gè)計(jì)數(shù)變量,統(tǒng)計(jì)執(zhí)行的次數(shù)。格式:

For循環(huán)變量=初值To終值[Step步長(zhǎng)][<語(yǔ)句組1>] ExitFor[<語(yǔ)句組2>] Next[循環(huán)變量]功能:執(zhí)行For語(yǔ)句時(shí),“循環(huán)變量”設(shè)為“初值”;執(zhí)行到Next語(yǔ)句時(shí),步長(zhǎng)加(減)到循環(huán)變量上;再執(zhí)行For語(yǔ)句時(shí),若“循環(huán)變量”超過(guò)“終值”則循環(huán)結(jié)束。步長(zhǎng):未指定值時(shí)默認(rèn)為1。若“步長(zhǎng)”是正數(shù)或0,則“初值”應(yīng)大于等于“終值”,否則,“初值”應(yīng)小于等于“終值”。1.For…Next語(yǔ)句P275例1:Forintx=lTol00Step2s=s+

intxIfs>50ThenExitForNext例2:計(jì)算累加程序:S=1+2+3+4….+x,并輸出結(jié)果。方法:接收一個(gè)累加的終值,確定一個(gè)循環(huán)變量,循環(huán)變量有2個(gè)作用(加數(shù)和循環(huán)變量),確定一個(gè)存儲(chǔ)累加和的變量。使用循環(huán)計(jì)算,最后輸出顯示結(jié)果。DimsAsinteger,xAsintegerx=InputBox(“請(qǐng)輸入累加的終值")Forx=lToxs=s+xNext想一想:計(jì)算=1+3+5+7…x或2+4+6+8…x如何編寫(xiě)?例3:計(jì)算累乘程序S=1*2*3*4…X:方法:接收一個(gè)累乘的終值,確定一個(gè)循環(huán)變量,循環(huán)變量有2個(gè)作用(乘數(shù)和循環(huán)變量),確定一個(gè)存儲(chǔ)累乘積的變量。使用循環(huán)計(jì)算,最后輸出顯示結(jié)果。DimSAsinteger,IAsintegerx=InputBox(“請(qǐng)輸入累加的終值")S=1ForI=lToxS=S*INext注意:累乘的乘數(shù)和乘積變量的初值為1。例4:P275例8.10

格式1:先判條件是否成立,再開(kāi)始循環(huán)。 Do[{While|Until}<條件>] [<語(yǔ)句>] [ExitDo] [<語(yǔ)句>] Loop例1:計(jì)算S=1+2+3+4…+100DimsAsinteger,xAsinteger,nAsinteger‘x=InputBox(“請(qǐng)輸入累加的終值")n=1Dowhilen<=xs=s+n

n=n+1‘修改循環(huán)控制變量,改變加數(shù)值loop2.DoWhile…Loop和Do…LoopWhileDowhile…Loop循環(huán)結(jié)構(gòu):先判斷后執(zhí)行,有可能一次也不執(zhí)行。While關(guān)鍵字用于指明條件為真時(shí)執(zhí)行循環(huán)體內(nèi)語(yǔ)句;Until當(dāng)條件為假時(shí),執(zhí)行循環(huán)體內(nèi)語(yǔ)句。例2:DimsAsinteger,xAsinteger,nAsinteger‘x=InputBox(“請(qǐng)輸入累加的終值")n=1DoUntiln>xs=s+n

n=n+1‘修改循環(huán)控制變量,改變加數(shù)值loop例3:P276例8.11格式2:先循環(huán),再判條件是否成立。Do[<語(yǔ)句>][ExitDo][<語(yǔ)句>]Loop[{While|Until}<條件>]說(shuō)明:Do…Loopwhile循環(huán)結(jié)構(gòu):先執(zhí)行后判斷,循環(huán)語(yǔ)句至少執(zhí)行一次;While關(guān)鍵字用于指明條件為真時(shí)執(zhí)行循環(huán)體內(nèi)語(yǔ)句;Until當(dāng)條件為假時(shí),執(zhí)行循環(huán)體內(nèi)語(yǔ)句。DimsAsinteger,xAsinteger,nAsinteger‘x=InputBox(“請(qǐng)輸入累加的終值")n=1Dos=s+n

n=n+1‘修改循環(huán)控制變量,改變加數(shù)值loopwhilen<=xDimsAsinteger,xAsinteger,nAsinteger‘x=InputBox(“請(qǐng)輸入累加的終值")n=1Dos=s+n

n=n+1‘修改循環(huán)控制變量,改變加數(shù)值loopUntiln>x說(shuō)明:在循環(huán)體中應(yīng)有使修改循環(huán)變量的語(yǔ)句,如n=n+1。否則,循環(huán)條件始終不發(fā)生改變,循環(huán)將永遠(yuǎn)不會(huì)結(jié)束,即死循環(huán)。[ExitDo]的應(yīng)用計(jì)算s=1*2*3*…DimSAsinteger,IAsintegerx=InputBox(“請(qǐng)輸入累加的終值")S=1:I=1DoifI>xexitdoendifS=S*II=I+1loopwhileI<=x3.While…Wend循環(huán)P277While循環(huán)結(jié)構(gòu)如下:While條件循環(huán)體WendWhile循環(huán)是當(dāng)型循環(huán),與DoWhile…Loop結(jié)構(gòu)類(lèi)似;當(dāng)條件滿(mǎn)足時(shí)執(zhí)行循環(huán)體,只是在循環(huán)體內(nèi)不能使用ExitDo語(yǔ)句。例如:Whiles<=l00s=s+l0WendFT條件表達(dá)式循環(huán)體8.3.5過(guò)程調(diào)用和參數(shù)傳遞P277一、過(guò)程調(diào)用1.子過(guò)程的定義和調(diào)用可以用Sub語(yǔ)句聲明一個(gè)新的子過(guò)程。其語(yǔ)法格式如下:[Public|Private][Static]Sub子過(guò)程名([<參數(shù)>])[As數(shù)據(jù)類(lèi)型][<子過(guò)程語(yǔ)句>][ExitSub][<子過(guò)程語(yǔ)句>]EndSub

使用Public關(guān)鍵字可以使該過(guò)程適用于所有模塊中的所有其他過(guò)程;用Private關(guān)鍵字則使該子程序只適用于同一模塊中的其他過(guò)程。子過(guò)程調(diào)用形式:Call子過(guò)程名([<實(shí)參]>)或子過(guò)程名([<實(shí)參]>)。例如,編寫(xiě)一個(gè)計(jì)算加減乘除的過(guò)程,代碼如下:PrivateSubcompute(aAsSingle,bAsSingle)c1=a+bc2=a-bc3=a*bc4=a/bPrint"c1=";c1,"c2=";c2,"c3=";c3,"c4=";c4,EndSub這是一個(gè)Sub子過(guò)程,它有兩個(gè)單精度型的參數(shù)a和b,參數(shù)的值均由調(diào)用程序傳過(guò)來(lái),然后在Sub過(guò)程中進(jìn)行運(yùn)算和輸出。例如,compute(18,3)或callcompute(18,3)

在過(guò)程中可以對(duì)給出的條件進(jìn)行測(cè)試,并根據(jù)測(cè)試的結(jié)果確定是否退出過(guò)程,如果要退出過(guò)程則使用ExitSub子句,例如可以修改上面的compute過(guò)程,代碼如下:PrivateSubcompute(aAsSingle,bAsSingle)Ifb=0thenExitSubEndIfc1=a+bc2=a-bc3=a*bc4=a/bPrint"c1=";c1,"c2=";c2,"c3=";c3,"c4=";c4,EndSubP277例8.12例:編寫(xiě)將2個(gè)數(shù)按大小排序的子過(guò)程。2.函數(shù)過(guò)程的定義和調(diào)用過(guò)程使用起來(lái)很方便,但如果需要返回參數(shù),就要用到函數(shù)了。在VBA中,提供了大量的內(nèi)置函數(shù)。比如字符串函數(shù)Mid()、統(tǒng)計(jì)函數(shù)Max()等。在編程時(shí)直接引用就可以了,非常方便。但有時(shí)我們需要按自己的要求定制函數(shù),比如我們需要計(jì)算半徑為R的圓的面積A:A=3.14*R^2。但是,圓的半徑是不確定的。我們不可能為每一個(gè)不同半徑的圓來(lái)寫(xiě)上相似的一段代碼。這時(shí)就需要使用函數(shù)。用Function語(yǔ)句可以聲明一個(gè)新函數(shù)、它接受的參數(shù)、返回的變量類(lèi)型及運(yùn)行該函數(shù)過(guò)程的代碼。其語(yǔ)法形式如下:[Public|Private][Static]Function函數(shù)名([<參數(shù)>])[As數(shù)據(jù)類(lèi)型][<函數(shù)語(yǔ)句>][函數(shù)名=<表達(dá)式>][ExitFunction][<函數(shù)語(yǔ)句>\][函數(shù)名=<表達(dá)式>]EndFunction對(duì)函數(shù)使用Public關(guān)鍵字,則所有模塊的所有其他過(guò)程都可以調(diào)用它。用Private關(guān)鍵字則使這個(gè)函數(shù)只適用于同一模塊中的其他過(guò)程。當(dāng)把一個(gè)函數(shù)說(shuō)明為模塊對(duì)象中的私有函數(shù)時(shí),就不能從查詢(xún)、宏或另一個(gè)模塊中的函數(shù)調(diào)用這個(gè)函數(shù)。包含Static關(guān)鍵字時(shí),只要含有這個(gè)過(guò)程的模塊是打開(kāi)的,則所有在這個(gè)過(guò)程中無(wú)論是顯式還是隱含說(shuō)明的變量值都將被保留。

可以在函數(shù)名末尾使用一個(gè)類(lèi)型聲明字符或使用As子句來(lái)聲明被這個(gè)函數(shù)返回變量的數(shù)據(jù)類(lèi)型。如果沒(méi)有,則VBA將自動(dòng)賦給該變量一個(gè)最合適的數(shù)據(jù)類(lèi)型。例如:求圓面積函數(shù):PublicFunctionA(RAsSingle)AsSingleA=3.14*R^2′求半徑為R的圓的面積AEndFunction這樣,一個(gè)面積函數(shù)就完成了。調(diào)用它時(shí)非常方便。如果要計(jì)算半徑為5的圓的面積,只要調(diào)用函數(shù)A:A(5)或者編寫(xiě)一個(gè)全局過(guò)程調(diào)用函數(shù)過(guò)程。函數(shù)過(guò)程可以被查詢(xún)、宏等調(diào)用。對(duì)于數(shù)據(jù)庫(kù)中的計(jì)算控件特別有用。PublicFunctionA(RAsSingle)AsSingleA=3.14*R^2EndFunctionPublicSubmj()DimRAsSingleR=InputBox("請(qǐng)輸入半徑值")msgboxA(R)EndSub二、參數(shù)傳遞P278過(guò)程定義時(shí)可以設(shè)置一個(gè)或多個(gè)形參,之間用逗號(hào)分隔。形參得完整定義格式P278調(diào)用過(guò)程的程序所帶參數(shù)為實(shí)參,實(shí)參可以是一個(gè)固定的值(常量)例如5,可以是一個(gè)表達(dá)式5*2,可以是一個(gè)已經(jīng)賦值的變量例如:j被調(diào)過(guò)程中一定要有接收實(shí)參的形參變量,可以是一個(gè)定義了的數(shù)據(jù)類(lèi)型,一定要與實(shí)參的變量類(lèi)型一致。8.3.6常用操作方法P280一、打開(kāi)和關(guān)閉窗體二、打開(kāi)和關(guān)閉報(bào)表三、輸入框四、消息框五、VBA編程驗(yàn)證數(shù)據(jù)六、計(jì)時(shí)事件一、打開(kāi)窗體或報(bào)表1)命令格式

DoCmd.OpenForm

formname_[,view][,filtername][,wherecondition][,datamode][,windo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論