國家二級計算機access 模塊_第1頁
國家二級計算機access 模塊_第2頁
國家二級計算機access 模塊_第3頁
國家二級計算機access 模塊_第4頁
國家二級計算機access 模塊_第5頁
已閱讀5頁,還剩103頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

MYNameAsStringDims1AsString*50‘說明定長字符串變量可存放50字符DimxAsInteger或Dimx%

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

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

◆變長字符串為零長度串,定長字符串都填上零

◆Variant變量初始化為Empty

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

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

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

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

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

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

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

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

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

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

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

VBA提供了如下幾種分支語句:

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

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

格式4If條件語1Then語句組1elseif條件2Then語句組2elseif條件3Then語句組3……elseif條件nThen語句組nelse語句組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"成績?yōu)閮?yōu)"ElseIfs>=80ThenB="B"Debug.Print"成績?yōu)榱?ElseIfs>=70ThenB="C"Debug.Print"成績?yōu)橹?ElseIfs>=60ThenB="D"Debug.Print"成績?yōu)楹细?ElseIfs>=60ThenB="E"Debug.Print"成績?yōu)椴?Endlf進一步練習(xí):1.創(chuàng)建一個過程,使用輸入語句接收托運行李的重量,計算托運行李收費:托運行李重量<=25公斤,收費標(biāo)準(zhǔn)是每公斤1元,行李重量大于25公斤,超出部分按每公斤2.5元計算。2.創(chuàng)建一個過程,使用輸入語句接收成績的分?jǐn)?shù),根據(jù)成績分?jǐn)?shù)顯示不同的獎學(xué)金等級情況:成績<60,獎學(xué)金等級0,60-69獎學(xué)金等級3,70-79獎學(xué)金等級2,>=80分獎學(xué)金等級1。SelectCase選擇結(jié)構(gòu):根據(jù)表達(dá)式求值結(jié)果,選擇執(zhí)行幾個分支中的一個。格式:

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

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

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

格式1:先判條件是否成立,再開始循環(huán)。 Do[{While|Until}<條件>] [<語句>] [ExitDo] [<語句>] Loop例1:計算S=1+2+3+4…+100DimsAsinteger,xAsinteger,nAsinteger‘x=InputBox(“請輸入累加的終值")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)鍵字用于指明條件為真時執(zhí)行循環(huán)體內(nèi)語句;Until當(dāng)條件為假時,執(zhí)行循環(huán)體內(nèi)語句。例2:DimsAsinteger,xAsinteger,nAsinteger‘x=InputBox(“請輸入累加的終值")n=1DoUntiln>xs=s+n

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

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

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

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

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

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

DoCmd.OpenForm

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

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論