《Access-2002數(shù)據(jù)庫應(yīng)用實訓(xùn)教程》第10章:Access-VBA程序設(shè)計_第1頁
《Access-2002數(shù)據(jù)庫應(yīng)用實訓(xùn)教程》第10章:Access-VBA程序設(shè)計_第2頁
《Access-2002數(shù)據(jù)庫應(yīng)用實訓(xùn)教程》第10章:Access-VBA程序設(shè)計_第3頁
《Access-2002數(shù)據(jù)庫應(yīng)用實訓(xùn)教程》第10章:Access-VBA程序設(shè)計_第4頁
《Access-2002數(shù)據(jù)庫應(yīng)用實訓(xùn)教程》第10章:Access-VBA程序設(shè)計_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第10章AccessVBA程序設(shè)計10.1模塊的創(chuàng)建10.2VBA編程10.1模塊的創(chuàng)建

模塊是將VBA(VisualBasicforApplications)聲明和過程作為一個單元進行保存的集合。模塊基本上是由聲明、語句和過程組成的,它們作為一個已命名的單元存儲在一起,對VBA代碼進行組織,并完成特定的任務(wù)。

Access有兩種類型的模塊:標準模塊和對象類模塊。不論哪種模塊中的每一個過程都可以是一個Function過程或一個Sub過程,如下圖10.1所示。兩個列表中,是“對象”框,是“過程”框(即“事件”框),當選擇了任一個對象后,右邊的“事件”也會隨之切換,因為不同類型的對象,也有不同的事件,選擇任一事件后,即可顯示該事件程序的內(nèi)容,且光標會停留在程序的第一行,可以立即開始編寫程序。圖10.1代碼編輯窗口“對象”框“過程”框聲明過程“過程視圖”按鈕“完整的模塊視圖”按鈕

注意:在“事件”中,凡顯示為粗體的,即表示該事件已內(nèi)含程序。模塊和程序不同:模塊只有兩個任務(wù),一個是保存程序,另一個是聲明可以在多個程序中使用的變量或常量,模塊本身不可以被運行。而程序也稱為“運行程序”,一個模塊中含有若干個程序,所以程序是最基本的運行單位。創(chuàng)建模塊,要在VBA編程環(huán)境VBE(VisualBasicEditor)中進行。當我們選中一個需要編寫代碼的控件,并準備為其對應(yīng)的某一事件的響應(yīng)方法編寫VBA代碼時,就應(yīng)該啟動VBE,在此編輯環(huán)境中進行VBA代碼編輯操作。如圖10.2所示為VBE窗口:創(chuàng)建模塊的方法有幾種,如下:1.在“數(shù)據(jù)庫”窗口的對象欄中單擊“模塊”,然后單擊工具欄上的“新建”按鈕打開VBE編輯器,為數(shù)據(jù)庫創(chuàng)建新的模塊對象。2.在Access菜單中單擊“插入”→“模塊”來創(chuàng)建標準模塊。3.如果在已打開的VBE編輯器中,則可以在工具欄中單擊“插入模塊”按鈕“”,或者單擊VBE菜單中“插入”→“模塊”來創(chuàng)建新的標準模塊。讀者可以任選一種適合自己的方法來創(chuàng)建模塊。除了自己新建模塊外,還可以將宏轉(zhuǎn)換為模塊,在數(shù)據(jù)庫窗口中選擇需要轉(zhuǎn)換的宏,選擇“工具”菜單中“宏”子菜單中的“將宏轉(zhuǎn)換為VisualBasic代碼”命令,系統(tǒng)會彈出“轉(zhuǎn)換宏”對話框,如圖10.3所示,轉(zhuǎn)換后的宏被保存為標準模塊。圖10.2VBE編輯窗口圖10.3轉(zhuǎn)換宏對話框10.1.1創(chuàng)建窗體和報表類模塊窗體和報表模塊都是對象類模塊,而且它們都依附于某一窗體或報表而存在。窗體和報表中含有事件過程,通過事件過程來控制窗體或報表的行為,以及它們對用戶操作的響應(yīng)。操作一窗體類模塊創(chuàng)建的操作步驟如下:1.在數(shù)據(jù)庫窗口“對象”列表中的“窗體”對象有中選擇要操作的窗體名,此例選擇“系統(tǒng)控制窗體”,如圖10.4所示;2.然后從“視圖”菜單中選擇“代碼”命令或單擊視圖中工具欄上的(代碼)圖標,進入VBE編輯窗口,如圖10.5所示;3.從模塊代碼窗口中的“對象”列表框中選擇要操作的對象名稱,為“進貨錄入”控件的名稱“command3”;

4.選擇對象后,從模塊代碼窗口中的“過程事件”列表框中選擇相關(guān)聯(lián)的過程名,此處選擇“Click”

事件,如圖10.6所示;

圖10.4選擇“系統(tǒng)控制窗體”圖10.5VBE編輯窗口“空白代碼窗口”圖10.6選擇“對象”和“事件”代碼窗口5.在代碼窗口中出現(xiàn)的標準過程格式中添加要實現(xiàn)的代碼。代碼如下:PrivateSubCommand3_Click()OnErrorGoToErr_Command3_ClickDimstDocNameAsStringDimstLinkCriteriaAsStringstDocName="商品進貨數(shù)據(jù)錄入"DoCmd.OpenForm

stDocName,,,stLinkCriteriaExit_Command3_Click:ExitSubErr_Command3_Click:

MsgBoxErr.DescriptionResumeExit_Command3_ClickEndSub6.根據(jù)需要重復(fù)選擇對象和過程的操作,直至完成,如圖10.7所示;對于“系統(tǒng)控制窗體”中有七個命令按鈕,將對應(yīng)有七個事件的過程。注意:這七個事件的過程代碼同第(5)步,只是在粗體代碼stDocName=“商品進貨數(shù)據(jù)錄入”中引號之中的窗體名稱要做相應(yīng)更改。圖10.7完成全部事件代碼的窗口創(chuàng)建完窗體類模塊以后,可以回到如圖10.8所示的“系統(tǒng)控制窗體”窗體視圖來單擊各個按鈕,查看是否運行。操作二報表類模塊創(chuàng)建的步驟如下:此例為“商品庫存情況”的報表運行時,根據(jù)庫存量來顯示或隱藏一個提示消息。當商品“庫存量”小于10時,將有一個標簽在打印此節(jié)時顯示消息“庫存量不足,請速進貨!”,當商品“庫存量”大于10時,此標簽將被隱藏。1.從數(shù)據(jù)庫窗口“對象”列表中的“報表”對象中選擇要操作的報表名,如圖10.9所示;2.然后從“視圖”菜單中選擇“代碼”命令或單擊視圖中工具欄上的(代碼)圖標,進入VBE編輯窗口,從模塊代碼窗口中“對象”列表框中選擇要操作的對象名稱。此處選擇“主體”對象;3.選擇對象后,從模塊代碼窗口中的“過程事件”列表框中選擇相關(guān)的過程名。選擇Format事件。如圖10.10所示;4.在代碼窗口中出現(xiàn)的標準過程格式中添加要實現(xiàn)的代碼,如圖10.11所示;

5.報表預(yù)覽效果如下圖10.12所示。此報表中包含一個名為“l(fā)abel24”的標簽和主體節(jié);圖10.8“系統(tǒng)控制窗體”圖10.9選擇報表“商品庫存情況”報表圖10.10選擇“對象”和“事件”圖10.11添加代碼窗口圖10.12報表預(yù)覽效果10.1.2編寫函數(shù)和子過程在普通類模塊中可以自定義過程或函數(shù),可以創(chuàng)建自定義的對象。1.函數(shù)與子過程的定義在一個不包含過程和函數(shù)的模塊中聲明公共變量和常量,此公共變量和常量可以在任何模塊中的任何函數(shù)和過程中使用。函數(shù)定義的語法結(jié)構(gòu)如下:

Function函數(shù)名([參數(shù)])AS數(shù)據(jù)類型函數(shù)代碼

EndFunction

子過程定義的語法結(jié)構(gòu)如下:

Sub子過程名()子程序代碼

Endsub可以在函數(shù)和子過程定義時使用Public、Private或Static前綴來聲明子過程和函數(shù)的作用范圍。

Private前綴表示為私有的子過程和函數(shù),只能在定義它們的模塊中使用,Public前綴代表公共的子過程和函數(shù)可能被任何其他模塊調(diào)用,當模塊中子過程和函數(shù)沒有使用Private進行聲明,則系統(tǒng)默認為Public(公共)子過程和函數(shù)。2.創(chuàng)建函數(shù)與子過程子過程和函數(shù)是指那些不與特定的對象或事件綁定的過程。(1)在代碼模塊中創(chuàng)建子過程和函數(shù)操作步驟如下:A.在“數(shù)據(jù)庫”窗口的對象欄中單擊“模塊”。B.單擊工具欄的“新建”按鈕創(chuàng)建新的模塊,或者選擇一個現(xiàn)有的模塊并單擊“設(shè)計”按鈕,打開VBE窗口。C.選擇“插入”“過程”命令,或單擊工具欄上的“插入模塊”按鈕的下拉列表三角形,然后選擇下拉菜單中的“過程”命令,打開“添加過程”對話框,如圖10.13所示。

圖10.13添加過程對話框D.鍵入過程或函數(shù)名,此例過程名為“NewSub”。E.選擇過程的類型??梢赃x擇新建過程類型為“子程序”、“函數(shù)”或者“屬性”。F.要使用新建過程適用于整個適用程序,應(yīng)將范圍選為“公共的”;如果要限定過程于當前模塊,應(yīng)該將范圍選為“私有的”。G.選擇是否需要將過程中所有變量聲明為靜態(tài)變量。H.單擊“確定”按鈕,確認根據(jù)所做選擇創(chuàng)建一個新過程。上述步驟完成后,如果我們在對話框中選擇創(chuàng)建一個靜態(tài)的公共子程序,單擊“確定”按鈕后,VBE自動在代碼中加入如下語句:PublicStaticSubNewSub()Endsub

光標停留在兩條語句的中間,等待用戶編加過程代碼。此例為計算1到10的偶數(shù)之和。添加代碼如圖10.14所示。圖10.14編寫子過程代碼窗口創(chuàng)建函數(shù)過程方法同上,創(chuàng)建好的函數(shù)如下圖10.14所示。此例函數(shù)為判斷第幾季度。圖10.15編寫函數(shù)代碼窗口10.1.3將宏轉(zhuǎn)換成模塊宏本身就是程序,只不過是一種控制方法簡單的程序而已。那么可以將宏轉(zhuǎn)換為對應(yīng)的VBA程序,Access數(shù)據(jù)庫管理系統(tǒng)為此提供了兩種方式,將宏轉(zhuǎn)換成模塊。方法一:在“超市信息管理系統(tǒng)”數(shù)據(jù)庫設(shè)計視圖的宏對象集合中選中“系統(tǒng)控制窗體宏組”對象,在窗口菜單上單擊“文件”→“另存為”,即出現(xiàn)如圖10.16所示的“另存為”對話框,將對象命名為“系統(tǒng)控制窗體宏組的副本”,再將保存類型定義為“模塊”,單擊對話框上的“確定”按鈕完成了將宏對象轉(zhuǎn)換為VBA程序模塊的操作。

回到數(shù)據(jù)庫窗口,單擊“模塊”對象按鈕,在“模塊”對象集合中會找到“被轉(zhuǎn)換的宏—系統(tǒng)控制窗體宏組”這樣的模塊,如圖10.17所示。方法二:在數(shù)據(jù)庫設(shè)計視圖宏對象集合中選中“系統(tǒng)控制窗體宏組”,在窗口菜單欄上依次單擊“工具”→“宏”→“將宏轉(zhuǎn)換為VisualBasic代碼”命令,隨即彈出“轉(zhuǎn)換宏”對話框,如圖10.18所示。根據(jù)需要在這個對話框中完成兩個選項的選定操作后,單擊“轉(zhuǎn)換”按鈕可將宏對象“系統(tǒng)控制窗體宏組”轉(zhuǎn)換成為一個名為“系統(tǒng)控制窗體宏組的副本”的模塊對象。圖10.16宏另存為模塊對話框10.17轉(zhuǎn)換完成的模塊對象集合圖10.18轉(zhuǎn)換宏對話框10.1.4VBA代碼的測試VBA代碼的調(diào)試由VBE提供調(diào)試工具,可以測試代碼,查找編寫錯誤??梢栽赩BE編輯器窗口中,打開將要進行調(diào)試的模塊,單擊“調(diào)試”菜單項,可看到調(diào)試子菜單項,如圖所示,根據(jù)子菜單上的命令可以進行調(diào)試。調(diào)試時,分為兩個步驟:斷點設(shè)置和單步跟蹤。1.斷點設(shè)置

Access提供的大部分調(diào)試工具,都必須在程序處于掛起狀態(tài)才能有效,這時就需要暫停VisualBasic程序代碼。如果要使VisualBasic掛起代碼,可以設(shè)置斷點設(shè)置斷點的方式有兩種:在“VisualBasic代碼編輯器”的代碼窗口中,將光標移到要設(shè)置斷點的行。單擊調(diào)試工具欄上的“切換斷點”按鈕“”。

(2)在“VisualBasic代碼編輯器”的代碼窗口中,用鼠標單擊要設(shè)置斷點行的左側(cè)邊緣部分。如果要清除斷點,可以將光標移到設(shè)置斷點的代碼行,然后在調(diào)試工具欄上單擊“切換斷點”按鈕。Access在運行到包含斷點的代碼行時,暫停代碼的執(zhí)行,進入中斷模式。設(shè)置斷點會加粗和突出顯示該行。如果要繼續(xù)運行代碼,可以單擊調(diào)試工具欄上的“運行子過程/用戶窗體”按鈕“”。2.單步跟蹤在程序代碼掛起后,便可以逐步執(zhí)行VisualBasic代碼,幫助識別發(fā)生錯誤的位置,并且可以查看是否每一行代碼都產(chǎn)生了預(yù)期的結(jié)果。用于代碼調(diào)試的方式有3種:(1)逐語句執(zhí)行要單步執(zhí)行每一行代碼,包括被調(diào)用的過程中的代碼,可以單擊調(diào)試工具欄上的“逐語句”按鈕“”。(2)逐過程執(zhí)行要單步執(zhí)行每一行代碼,但是將任何被調(diào)用的過程作為一個單位執(zhí)行,可以單擊調(diào)試工具欄上的“逐過程”按鈕“”。(3)跳出執(zhí)行要運行當前過程中的剩余代碼,可以單擊調(diào)試工具欄上的“跳出”按鈕“”,當執(zhí)行完這個過程,程序返回到調(diào)用該過程的過程后,“跳出”命令執(zhí)行完畢。VBA程序設(shè)計有幾種控制結(jié)構(gòu):選擇控制結(jié)構(gòu)、循環(huán)控制結(jié)構(gòu)。選擇控制結(jié)構(gòu)有條件結(jié)構(gòu)和選擇結(jié)構(gòu)兩種。(1)條件結(jié)構(gòu):只要執(zhí)行一個語句,則可以使用條件結(jié)構(gòu)。語法如下:if條件表達式then語句1[else語句2](2)選擇結(jié)構(gòu):在多個語句塊中有選擇地執(zhí)行其中的一個。語法如下:

Selectcase表達式

case表達式值列表1

語句1case表達式值列表2

語句2……[caseelse語句n]Endselect10.2.1程序設(shè)計當一個表達式與幾個不同的值比較時,可以使用選擇結(jié)構(gòu)語句。例:根據(jù)某年某月來判斷該月有多少天?圖10.19分支結(jié)構(gòu)窗體在窗體上三個文本框控件(年份、月份、天數(shù)),需要輸入年份數(shù)和月份數(shù)值后回車,或單擊“天數(shù)”文本框,結(jié)果將顯示在“天數(shù)”文本框內(nèi)。將代碼填加到文本框的“單擊”事件中。PrivateSub天數(shù)_GotFocus()num=月份.ValueSelectCasenumCase1,3,5,7,8,10,12

天數(shù).Value=31Case4,6,9,11

天數(shù).Value=30CaseElseIf(年份.ValueMod4=0)And(年份.ValueMod100<>0)Or(年份.ValueMod400=0)Then

天數(shù).Value=29Else

天數(shù).Value=28EndIfEndSelectEndSub

2.循環(huán)控制語句VBA提供兩種循環(huán)結(jié)構(gòu),即DO循環(huán)、FOR循環(huán)。(1)DO循環(huán):用于重復(fù)執(zhí)行一個語句塊,重復(fù)次數(shù)不定。A)DOWHILE結(jié)構(gòu),語法如下:DOWHILE條件表達式循環(huán)語句塊

LOOP只要表達式為真,循環(huán)就一直執(zhí)行,直到表達式為假時結(jié)束循環(huán)。B)DOUNTIL結(jié)構(gòu),語法如下:DOUNTIL條件表達式循環(huán)語句塊

LOOP

如果表達式為假,執(zhí)行循環(huán)語句塊,只要表達式為真時結(jié)束循環(huán)。(2)FOR循環(huán)結(jié)構(gòu):當不知道循環(huán)次數(shù)時,最好用DO循環(huán),但如果知道執(zhí)行的次數(shù),則最好還是用FOR循環(huán)。語法如下:FOR循環(huán)控制變量=循環(huán)初始值表達式to循環(huán)終值表達式[STEP步長數(shù)]循環(huán)語句塊NEXT[循環(huán)控制變量]例:求階乘。OptionCompareDatabasePublicsPrivateSub結(jié)果_GotFocus()DimintIAsIntegers=1ForintI=1To數(shù)字.Values=s*intINext結(jié)果.Value=sEndSub

上例程序可在窗體中顯示其結(jié)果,如圖10.20所示。圖10.20階乘窗體在窗體中的“輸入數(shù)值的階乘”文本框(數(shù)字)中輸入需要計算乘的數(shù)值后回車,或單擊下面的文本框(結(jié)果),結(jié)果顯示在“結(jié)果”文本框中。10.2.2對窗體中控件對象編程一、對標簽或文本框編程標簽和文本框都可以用來顯示文本,但是,標簽只能用于顯示文字,不能進行編輯,而文本框既可以顯示文本,也可以輸入文本。1.文本框或標簽都有自己的基本屬性,來控制文本框或標簽的格式、特征和位置。包含以下幾個部分的屬性:(1)外觀屬性包含:BackColor

、ForeColor

、BorderStyle屬性(2)位置屬性包含:Height、Left、Top、Width屬性(3)行為屬性包含:Enabled、IMEMode、Locked、ScrollBars

、

TabIndex

、TabStop、Visible屬性。(4)雜項包含:Name、HelpContextId、Text屬性(5)字體屬性包含一些與文本框中字體相關(guān)的屬性:

FontBold、FontItalic

、FontName、FontSize

、FontUnderline、

FontWeight

、Format屬性。2.文本框控件又有自己的基本事件和方法(1)數(shù)據(jù)響應(yīng)類型事件包含:AfterUpdate

、BeforeUpdate、Change事件(2)鼠標動作類事件包含:Click、DblClick、MouseDown、MouseUp、

MouseMove、MouseMove事件(3)焦點類事件包含:Enter、Exit、Gotfocus、LostFocus事件(4)鍵盤響應(yīng)類事件包含:KeyUp

、KeyPress事件3.標簽控件事件和方法

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論