版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、ACCESS實(shí)例教程,模塊的操作(第8章),1 . 模塊的基本概念 2 . VBA程序設(shè)計(jì)基礎(chǔ) 3 . VBA函數(shù)的使用 4 . 模塊的建立與使用 5 . 過(guò)程與參數(shù)傳遞,本章要點(diǎn):,VBA(Visual Basic for Application)是Microsoft Office系列軟件的內(nèi)置編程語(yǔ)言; 其語(yǔ)法結(jié)構(gòu)與Visual Basic編程語(yǔ)言互相兼容; VB是微軟公司推出的可視化BASIC語(yǔ)言,是一種編程簡(jiǎn)單、功能強(qiáng)大的面向?qū)ο箝_發(fā)工具,我們可以像編寫VB程序那樣來(lái)編寫VBA程序。 采用的是面向?qū)ο蟮木幊虣C(jī)制和可視化的編程環(huán)境。 用VBA語(yǔ)言編寫的代碼,將保存在Access中的一個(gè)模
2、塊里,并通過(guò)類似在窗體中激發(fā)宏的操作那樣來(lái)啟動(dòng)這個(gè)模塊,從而實(shí)現(xiàn)相應(yīng)的功能。,VBA簡(jiǎn)介,注意: VB語(yǔ)言開發(fā)系統(tǒng)是獨(dú)立運(yùn)行的開發(fā)環(huán)境,它創(chuàng)建的應(yīng)用程序可以獨(dú)立運(yùn)行在Windows平臺(tái)上; 而VBA則不同,其編程環(huán)境和VBA程序都必須依賴Office應(yīng)用程序(如Access、Word、Excel等)。,VBA簡(jiǎn)介,VBA編程環(huán)境 在Access 2003提供的“模塊”數(shù)據(jù)庫(kù)對(duì)象中,使用VBA程序設(shè)計(jì)語(yǔ)言,在不同的模塊中實(shí)現(xiàn)VBA代碼設(shè)計(jì),可以解決實(shí)際開發(fā)中的復(fù)雜應(yīng)用。 要用Access 2003來(lái)完成一個(gè)實(shí)際的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng),就應(yīng)該掌握VBA。,8.1 認(rèn)識(shí)模塊對(duì)象,模塊是由聲明、語(yǔ)句和過(guò)程組
3、成的集合,以VBA(Visual Basic for Application)語(yǔ)言編寫,作為一個(gè)已命名的單元存儲(chǔ)在一起。 模塊有2種類型:類模塊和標(biāo)準(zhǔn)模塊。使用模塊可以在實(shí)際開發(fā)中實(shí)現(xiàn)較為復(fù)雜的功能。,(1)模塊:模塊由一個(gè)或多個(gè)過(guò)程組成,每個(gè)過(guò)程實(shí)現(xiàn)一個(gè)或幾個(gè)功能。模塊的執(zhí)行通過(guò)特定事件激發(fā)相應(yīng)的事件過(guò)程實(shí)現(xiàn)。 (2)事件過(guò)程:事件過(guò)程是一組代碼,用于響應(yīng)窗體事件或報(bào)表事件。 (3)類模塊:類模塊是包含代碼和數(shù)據(jù)的集合,可以看作是沒有物理表示的控件,總是與某一特定的窗體或報(bào)表相關(guān)聯(lián)。窗體模塊和報(bào)表模塊都屬于類模塊。 (4)標(biāo)準(zhǔn)模塊:標(biāo)準(zhǔn)模塊是代碼的集合,包含的過(guò)程不與任何其他對(duì)象相關(guān)聯(lián),是數(shù)
4、據(jù)庫(kù)對(duì)象使用的公共過(guò)程,保存在數(shù)據(jù)庫(kù)窗口中。,8.1.1 模塊的基本概念,8.1.2 啟動(dòng)Access的編程界面,Access的編程界面稱為VBE(Visual Basic Editor),是Microsoft Office所有組件公用的程序編輯系統(tǒng)。 方法1:在窗體或報(bào)表設(shè)計(jì)視圖中選控件單擊標(biāo)準(zhǔn)工具欄的“生成器”按鈕在“選擇生成器”對(duì)話框中選擇“代碼生成器”。 方法2:右擊窗體或報(bào)表設(shè)計(jì)視圖中控件快捷菜單中選“事件生成器”“選擇生成器”對(duì)話框中選擇代碼生成器”。,8.1.3 VBE窗口 VBE窗口由工具欄、工程資源管理器窗口、 屬性窗口、代碼窗口和立即窗口組成。,工程窗口 選擇對(duì)象,屬性窗口
5、 選擇對(duì)象的屬性,代碼窗口,選擇事件,(1)工程窗口 也稱工程資源管理器 ,一個(gè)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)就是一個(gè)工程,系統(tǒng)中的所有類模塊及標(biāo)準(zhǔn)模塊對(duì)象都在該窗口中顯示出來(lái)。,類模塊,標(biāo)準(zhǔn)模塊,(2)屬性窗口 屬性窗口列出了選定對(duì)象的屬性,可以在設(shè)計(jì)時(shí)查看、改變這些屬性。當(dāng)選取了多個(gè)控件時(shí),屬性窗口會(huì)列出所有控件的共同屬性。,(3)代碼窗口 代碼窗口用來(lái)顯示、編寫以及修改VBA 代碼。實(shí)際操作中,可以打開多個(gè)代碼窗口,查看不同窗體或模塊中的代碼,代碼窗口之間可以進(jìn)行復(fù)制和粘貼。,對(duì)象框,過(guò)程框,編寫模塊對(duì)象的代碼在代碼窗口進(jìn)行。 (1)窗口頂部有2個(gè)組合框,左邊對(duì)象框顯示所有對(duì)象名稱,右邊過(guò)程框顯示當(dāng)前對(duì)
6、象能識(shí)別的所有事件名稱。選定一個(gè)對(duì)象,再選定一個(gè)事件,系統(tǒng)會(huì)自動(dòng)生成相應(yīng)事件過(guò)程的起始行與結(jié)束行,只須在兩行中間添加過(guò)程代碼即可。 “通用” 過(guò)程可以被所有控件調(diào)用。某控件的過(guò)程只在關(guān)聯(lián)事件中有效。 (2)窗口中央代碼區(qū)有聲明區(qū)和過(guò)程區(qū),聲明區(qū)中聲明模塊使用的變量,過(guò)程區(qū)顯示一個(gè)或多個(gè)過(guò)程,之間用一條灰線分隔。 (3)窗口底部有2個(gè)按鈕,單擊“過(guò)程視圖”按鈕,只顯示當(dāng)前過(guò)程。單擊右邊“完整的模塊視圖”按鈕,窗口顯示全部過(guò)程。,8.1.4 標(biāo)準(zhǔn)工具欄,例8-1:創(chuàng)建一個(gè)類模塊。 1、打開數(shù)據(jù)庫(kù); 2、新創(chuàng)建窗體名稱為w1; 3、在窗體中添加命令按鈕名字為c1; 4、選擇c1打開屬性【單擊】打開【
7、代碼生成器】;,Private Sub Command0_Click() DoCmd.Close End Sub,DoCmd為對(duì)象用來(lái)調(diào)用內(nèi)置的方法,Close關(guān)閉窗體,例8-1:創(chuàng)建一個(gè)類模塊。,對(duì)象框,過(guò)程框,例8-2:創(chuàng)建一個(gè)標(biāo)準(zhǔn)模塊。,1、打開數(shù)據(jù)庫(kù); 2、選擇【模塊】對(duì)象 單擊【新建】按鈕; 3、在VBE中編輯如下程序;,過(guò)程名為aa,x,y為整型變量,z為整型變量,存放x和y的乘積。 顯示信息框,例8-2:創(chuàng)建一個(gè)標(biāo)準(zhǔn)模塊。,4、保存模塊名為mj; 5、新創(chuàng)建窗體名稱為w2; 6、在窗體中添加兩個(gè)文本框名稱分別為t1,t2; 7、添加命令按鈕名字為c1; 8、選擇c1打開屬性【單擊
8、】打開【代碼生成器】;,調(diào)用過(guò)程aa,并將文本框的值傳遞給aa,8.1.7 使用提示與幫助,在代碼窗口輸入代碼時(shí),系統(tǒng)會(huì)自動(dòng)顯示提示信息,包括關(guān)鍵字列表、屬性列表、過(guò)程參數(shù)列表等,在列表中選取一項(xiàng)后雙擊鼠標(biāo),所選值會(huì)自動(dòng)添加到當(dāng)前光標(biāo)處。,8.2 VBA程序設(shè)計(jì)基礎(chǔ),8.2.1 面向?qū)ο蟮某绦蛟O(shè)計(jì)的基本概念,(1)對(duì)象 在自然界中,一個(gè)對(duì)象就是一個(gè)實(shí)體,如一輛汽車就是一個(gè)對(duì)象。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,對(duì)象代表應(yīng)用程序中的元素,如表、窗體、按鈕等。 (2)屬性 屬性是對(duì)象的特征。如汽車有顏色和型號(hào)屬性,按鈕有標(biāo)題和名稱屬性。對(duì)象的類別不同,屬性會(huì)有所不同。同類別對(duì)象的不同實(shí)例,屬性也有差異。例如
9、,同是命令按鈕,名稱屬性不允許相同。,(3)事件 事件是對(duì)象能夠識(shí)別的動(dòng)作。如按鈕可以識(shí)別單擊事件、雙擊事件等。在類模塊每一個(gè)過(guò)程的開始行,都顯示對(duì)象名和事件名。如:Private Sub c1_Click()。 (4)方法 方法是對(duì)象能夠執(zhí)行的動(dòng)作,決定了對(duì)象能完成什么事。不同對(duì)象有不同的方法。如close方法能關(guān)閉一個(gè)窗體。,(5)集合 集合由許多與對(duì)象有關(guān)的鍵和值組成,其中的鍵和值是配對(duì)的。如一本書是一個(gè)對(duì)象,書的頁(yè)碼是鍵,頁(yè)碼對(duì)應(yīng)的內(nèi)容是值。所有配對(duì)的頁(yè)碼和內(nèi)容組成了書對(duì)象的集合。 (6)過(guò)程 過(guò)程是由代碼組成的單元,包含一系列計(jì)算語(yǔ)句和執(zhí)行語(yǔ)句。每一個(gè)過(guò)程都有名字,過(guò)程名不能與所在模
10、塊的模塊名相同。過(guò)程有兩種類型:sub過(guò)程(無(wú)返回值),function過(guò)程(有返回值)。,例8-3:創(chuàng)建一個(gè)類模塊,動(dòng)態(tài)設(shè)置控件屬性,(1)在窗體ct中創(chuàng)建一個(gè)文本框名稱為t1。 (2)在窗體ct中創(chuàng)建一個(gè)標(biāo)簽名稱為b1標(biāo)題為“歡迎你!”。 (3)在窗體ct中創(chuàng)建三個(gè)命令按鈕名稱分別為c1、c2、c3標(biāo)題分別為“紅色”、“綠色”、“藍(lán)色”。,(4)設(shè)置各按鈕的前景色,在屬性窗口可查看顏色值。,(5)c1的click事件代碼: t1.BackColor = 255 b1.ForeColor = 255,(6)c2的click事件代碼: t1.BackColor = 33792 b1.ForeC
11、olor = 33792 (7)c3的click事件代碼: t1.BackColor = 16711680 b1.ForeColor = 16711680,執(zhí)行結(jié)果:,Docmd是Access的一個(gè)特殊對(duì)象,用來(lái)調(diào)用內(nèi)置方法,在程序中實(shí)現(xiàn)對(duì)Access的操作,諸如打開窗口、關(guān)閉窗體、打開報(bào)表、關(guān)閉報(bào)表等。 DoCmd 對(duì)象的大多數(shù)方法都有參數(shù),有些參數(shù)是必需的,有些則是可選的。若省略可選參數(shù),參數(shù)將采用默認(rèn)值。,8.2.2 Docmd對(duì)象,(1)用DoCmd 對(duì)象打開窗體 格式:DoCmd.OpenForm 窗體名 功能:用默認(rèn)形式打開指定窗體。 例如:DoCmd.OpenForm 文本框練習(xí)
12、,(2)用DoCmd 對(duì)象關(guān)閉窗體 格式1:DoCmd.Close acForm, 窗體名 功能:關(guān)閉指定窗體。 例如:DoCmd.Close acForm, 文本框練習(xí) 格式2:DoCmd.Close 功能:關(guān)閉當(dāng)前窗體。 (3)用DoCmd 對(duì)象打開報(bào)表 格式:DoCmd.OpenReport 報(bào)表名,acViewPreview 功能:用預(yù)覽形式打開指定報(bào)表。 例如:DoCmd.OpenReport 工資報(bào)表,acViewPreview,(4)用DoCmd 對(duì)象關(guān)閉報(bào)表 格式1:DoCmd.Close acReport, 報(bào)表名 功能:關(guān)閉指定報(bào)表。 例如:DoCmd.Close acRe
13、port, 工資報(bào)表 格式2:DoCmd.Close 功能:關(guān)閉當(dāng)前報(bào)表。 (5)用DoCmd 對(duì)象運(yùn)行宏 格式:DoCmd.RunMacro 宏名 功能:運(yùn)行指定宏。 例如:DoCmd.RunMacro 宏1 (6)用DoCmd 對(duì)象退出Access。 格式:DoCmd.Quit 功能:關(guān)閉所有Access對(duì)象和Access本身。,(1)在窗體中建立5個(gè)按鈕名稱分別為c1、c2、c3、c4、c5標(biāo)題分別為“打開文本框練習(xí)窗體”、“關(guān)閉文本框練習(xí)窗體”、“打開工資報(bào)表”、“關(guān)閉工資報(bào)表”、“退出Access” 。,例8-4:使用DoCmd對(duì)象,(2)c1代碼:DoCmd.OpenForm 文本
14、框練習(xí) (3)c2代碼:DoCmd.Close acForm, 文本框練習(xí) (4)c3代碼:DoCmd.OpenReport 工資報(bào)表, acViewPreview (5)c4代碼:DoCmd.Close acReport, 工資報(bào)表 (6)c5代碼:DoCmd.Quit,(7)轉(zhuǎn)到窗體視圖單擊不同按鈕執(zhí)行不同操作。,8.2.3 數(shù)據(jù)類型與數(shù)據(jù)類型轉(zhuǎn)換,VBA中的基本數(shù)據(jù)類型 VBA在數(shù)據(jù)類型和定義方式上均繼承了傳統(tǒng)的Basic語(yǔ)言的特點(diǎn)。 Access 數(shù)據(jù)表中的字段使用的數(shù)據(jù)(OLE對(duì)象和備注字段數(shù)據(jù)類型除外)在VBA中都有對(duì)應(yīng)的類型。 在VBA中,數(shù)據(jù)類型用來(lái)決定變量可以保存何種數(shù)據(jù)。V
15、BA支持多種數(shù)據(jù)類型,為用戶編程提供了方便。,8.2.3 數(shù)據(jù)類型與數(shù)據(jù)類型轉(zhuǎn)換,(1)標(biāo)準(zhǔn)數(shù)據(jù)類型,1.數(shù)值型數(shù)據(jù)類型 包括:Byte、Integer、Long、Single、Double和Currency。 (1)Byte 以一個(gè)字節(jié)的無(wú)符號(hào)二進(jìn)制數(shù)存儲(chǔ),取值范圍為0255。 (2)整數(shù)(integer和Long) 整數(shù)是不帶小數(shù)點(diǎn)和指數(shù)符號(hào)的數(shù),在機(jī)器內(nèi)以二進(jìn)制補(bǔ)碼形式表示。 整型(Integer) 長(zhǎng)整型(Long) 例如: 345、-345、345%均表示整型數(shù)。 345 Sum End Sub,良好的編程習(xí)慣應(yīng)該是“先聲明變量,后使用變量”,這樣做可以提高程序的效率,同時(shí)也使程序易
16、于調(diào)試。,聲明而未賦值的變量的值為: 數(shù)值型變量初始化為0; 字符型變量為零長(zhǎng)度字符串; 變體型變量初始化為 Empty。,變量的初始化,(5)一個(gè)特殊的模塊變量 本地窗口打開時(shí),自動(dòng)生成一個(gè)名為“Me”的特殊模塊變量。對(duì)于類模塊,定義為Me。Me是對(duì)象的引用,引用當(dāng)前模塊中當(dāng)前類的實(shí)例。 Me變量不需要專門定義,直接使用即可。 例如:用代碼定義“學(xué)生信息”窗體中“Lab”標(biāo)簽的標(biāo)題屬性,以下兩種方法效果是一樣的: 標(biāo)準(zhǔn)方法:Forms! 學(xué)生信息!Lab.Caption=學(xué)生信息瀏覽 常用方法:Me!Lab.Caption=學(xué)生信息瀏覽,8.2.5 變量的作用域和生命周期,1變量的作用域 變
17、量的作用域是變量在程序中起作用的范圍。分3個(gè)層次,從低到高依次為:局部、模塊、全局。 (1)局部變量 又稱為本地變量,僅在聲明變量的過(guò)程中有效。在過(guò)程和函數(shù)內(nèi)部用dim聲明或不用聲明接使用的變量,都是局部變量。局部變量在本地?fù)碛凶罡呒?jí),當(dāng)存在同名的模塊級(jí)變量時(shí),模塊級(jí)變量被屏蔽。 (2)模塊變量 模塊變量在所聲明模塊的所有函數(shù)和所有過(guò)程都有效,變量定義在模塊所有過(guò)程之外的起始位置,通常是窗體變量或標(biāo)準(zhǔn)模塊變量。 (3)全局變量 全局變量又稱為公共變量,定義在標(biāo)準(zhǔn)模塊所有過(guò)程之外,在所有模塊的所有過(guò)程和函數(shù)中都有效。 定義格式:public 變量名 as 數(shù)據(jù)類型,變量的生命周期是指變量從首次出
18、現(xiàn)到變量消失的代碼執(zhí)行時(shí)間。變量首次出現(xiàn)是指聲明變量并為其分配存儲(chǔ)空間,變量消失是指變量所在的程序執(zhí)行完畢。 局部變量:的生命周期從過(guò)程或函數(shù)被調(diào)用到運(yùn)行結(jié)束。 全局變量:的生命周期從聲明到Access應(yīng)用程序結(jié)束。 過(guò)程中用dim定義的變量,每次調(diào)用過(guò)程時(shí)都重新開始,過(guò)程結(jié)束時(shí)立即消失。 用static代替dim定義變量,可以在過(guò)程實(shí)例間保留局部變量的值。用static定義的變量稱為靜態(tài)變量,作用范圍與dim相同,在整個(gè)模塊執(zhí)行時(shí)一直存在。,2變量的生命周期,例8-6:用static和dim定義局部變量,(1)在窗體中建立2個(gè)文本框分別命名為t1和t2附加標(biāo)簽的標(biāo)題分別為“靜態(tài)變量”和“局部
19、變量”。 (2)在窗體中建立命令按鈕名稱為c1標(biāo)題為“計(jì)算”。,(3)c1的click代碼: Static x As Integer x變量的生命周期為全程 Dim y As Integer y變量的生命周期為局部 x = x + 1:y = y + 1 t1 = x:t2 = y,(4)執(zhí)行時(shí)不斷單擊命令按鈕,靜態(tài)變量文本框中的值每次增加1,而局部變量文本框中的值總是1。,1. 數(shù)組的概念 數(shù)組是由一組具有相同數(shù)據(jù)類型的變量(稱為數(shù)組元素)構(gòu)成的集合。為了識(shí)別數(shù)組中不同的元素,數(shù)組元素可以通過(guò)下標(biāo)來(lái)訪問(wèn),數(shù)組下標(biāo)默認(rèn)從0開始。 說(shuō)明: (1)數(shù)組要先定義后使用,VBA不允許隱式聲明數(shù)組。 (
20、2)同一過(guò)程中數(shù)組名不能與其他變量重名。,8.2.7 數(shù)組,2聲明一維數(shù)組 格式1:dim 數(shù)組名(下標(biāo)上限) as 數(shù)據(jù)類型 格式2:dim 數(shù)組名(下標(biāo)下限 to 下標(biāo)上限) as 數(shù)據(jù)類型 例如:dim a(6) as integer 功能:聲明了有7個(gè)元素的數(shù)組a,元素下標(biāo)從0到6,默認(rèn)值均為0。 例如:dim b(1 to 6) as string 功能:聲明了有6個(gè)元素的數(shù)組b,下標(biāo)從1到6,默認(rèn)值均為空串。 說(shuō)明: (1)如果不定義數(shù)組下標(biāo)的下限,默認(rèn)下標(biāo)下限為0。 (2)數(shù)組定義中的參數(shù)必須是常數(shù)。 (3)如果使用as語(yǔ)句定義數(shù)組類型,同一數(shù)組只能存放相同類型數(shù)據(jù)。,聲明數(shù)組后
21、,每個(gè)數(shù)組元素都被當(dāng)作單個(gè)變量使用。 一維數(shù)組元素的引用格式:數(shù)組名(下標(biāo)) 數(shù)組賦值與引用: bAge(0)50 bAge(1)20 bAge(2)70 Dim sum as Byte Sum= bAge(0)+ bAge(1)+ bAge(2),3聲明多維數(shù)組 格式:dim 數(shù)組名(下標(biāo)上限1,下標(biāo)上限2,) as 數(shù)據(jù)類型 例如:dim c(3,4) as integer 功能:聲明有20個(gè)元素的數(shù)組c,行下標(biāo)從0到3,列下標(biāo)從0到4。 例如:dim d(1 to 3,2 to 4) as integer 功能:聲明有9個(gè)元素的數(shù)組d,行下標(biāo)從1到3,列下標(biāo)從2到4。 4使用數(shù)組 聲明數(shù)
22、組后,每個(gè)數(shù)組元素都被當(dāng)作單個(gè)變量使用。 一維數(shù)組元素的引用格式:數(shù)組名(下標(biāo)) 二維數(shù)組元素的引用格式:數(shù)組名(下標(biāo)1,下標(biāo)2),例8-7:使用符號(hào)常量和數(shù)組,(1)在窗體建文本框名稱為t1。 (2)在窗體建命令按鈕名稱為c1標(biāo)題為“確定”。 (3)命令按鈕c1的單擊事件代碼:,const AA = “歡迎你!” 定義符號(hào)常量 dim b(1) As String 定義字符串?dāng)?shù)組 b(0) = AA b(1) = t1 MsgBox b(0) : bb = 標(biāo)點(diǎn)符號(hào) Case Else: bb = 特殊字符 End Select MsgBox bb,(3)轉(zhuǎn)到窗體視圖文本框中輸入字母單擊按鈕
23、顯示消息框 。,8.4.4 選擇函數(shù)與計(jì)時(shí)器事件,1iif函數(shù) 格式:iif(條件,表達(dá)式1,表達(dá)式2) 功能:如果條件為真,函數(shù)值為表達(dá)式1的值,否則,函數(shù)值為表達(dá)式2的值。 例:y=iif(ab,a大,b大) 2switch函數(shù) 格式:switch(條件1,表達(dá)式1,條件2,表達(dá)式,條件n,表達(dá)式n) 功能:從左到右依次判斷,遇到第一個(gè)條件為真時(shí)返回對(duì)應(yīng)表達(dá)式的值。 說(shuō)明:條件與表達(dá)式成對(duì),當(dāng)多個(gè)條件為真時(shí),只取第一個(gè)條件的對(duì)應(yīng)表達(dá)式。 例:y=switch(x0,1),3choose函數(shù) 格式:choose(索引式,值1,值2,值n) 功能:根據(jù)索引項(xiàng)的值,返回對(duì)應(yīng)的值。 說(shuō)明:索引項(xiàng)通
24、常是整型變量名,取值范圍1n,超出范圍時(shí)返回NULL。 例如:y=choose(x,優(yōu)秀,良好,中等,及格,不及格),4計(jì)時(shí)器事件 VBA沒有直接提供時(shí)間控件,通過(guò)timer事件實(shí)現(xiàn)定時(shí)功能。 方法:首先設(shè)置窗體的計(jì)時(shí)器間隔屬性TimerInterval,然后給timer事件寫過(guò)程代碼。打開窗體時(shí),每隔一個(gè)時(shí)間間隔激發(fā)一次timer事件,事件的過(guò)程就被執(zhí)行一次,從而實(shí)現(xiàn)“定時(shí)”處理功能。 計(jì)時(shí)器間隔的時(shí)間單位為毫秒,1000毫秒=1秒。,例8-16:顯示電子表,(1)建立2個(gè)標(biāo)簽名稱為b1和b2標(biāo)題都為數(shù)字1。 (2)打開窗體的屬性窗口單擊“事件”選項(xiàng)卡設(shè)置計(jì)時(shí)器 間隔屬性為1000。 (3)
25、在VBE窗口“通用-聲明”寫代碼: Public a As Boolean a為邏輯型,默認(rèn)false (4)Form的Timer事件代碼: a = Not a b1.Caption = Time() b2.Caption = CInt(b2.Caption) + 1 b2.ForeColor = IIf(a = True, 255, 16711680),(5)轉(zhuǎn)到窗體視圖。b1中顯示系統(tǒng)當(dāng)前時(shí)間,b2中的數(shù)字每秒增加1,數(shù)字的顏色紅、藍(lán)交替,每秒換一次。,8.4.5 驗(yàn)證函數(shù),VBA的常用驗(yàn)證函數(shù),例8-17:檢驗(yàn)字符串類型,(1)建文本框名稱為t1附加標(biāo)簽標(biāo)題為“輸入年齡:”。 (2)建命
26、令按鈕名稱分別為c1標(biāo)題為“驗(yàn)證”。 (3)c1的click事件代碼: If t1 = Or IsNull(t1) Then MsgBox 不能為空!, vbCritical, 提示 ElseIf IsNumeric(t1) = False Then MsgBox 必須是數(shù)字!, vbCritical, 提示 ElseIf t1 = 150 Then MsgBox 超出范圍!, vbCritical, 提示“ Else MsgBox 驗(yàn)證通過(guò)!, vbInformation, 提示 End If,(4)轉(zhuǎn)到窗體視圖在文本框中輸入一個(gè)字母單擊【驗(yàn)證】按鈕消息框顯示消息“必須是數(shù)字!”。,8.4.
27、6 循環(huán)語(yǔ)句,當(dāng)某一程序段需要反復(fù)執(zhí)行,用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)。循環(huán)結(jié)構(gòu)對(duì)應(yīng)兩類循環(huán)語(yǔ)句: 先判斷后執(zhí)行的循環(huán)語(yǔ)句(當(dāng)型循環(huán)結(jié)構(gòu)) 先執(zhí)行后判斷的循環(huán)語(yǔ)句(直到型循環(huán)結(jié)構(gòu)),1for-next循環(huán) for-next循環(huán)能使語(yǔ)句序列運(yùn)行指定次數(shù),循環(huán)中有一個(gè)計(jì)數(shù)器變量,變量的值隨每一次循環(huán)增加或減少。 for-next是當(dāng)型循環(huán)結(jié)構(gòu),先判斷后執(zhí)行。,(1)格式:for 循環(huán)變量=初值 to 終值 step 步長(zhǎng) 語(yǔ)句序列 next,(2)功能: 先將初值賦給循環(huán)變量,再將循環(huán)變量的當(dāng)前值與終值做比較,如果比較結(jié)果為真執(zhí)行語(yǔ)句序列,增加一個(gè)步長(zhǎng),再進(jìn)行比較,如果比較結(jié)果仍為真,繼續(xù)循環(huán)。如果比較結(jié)果為假,
28、結(jié)束循環(huán)。,步長(zhǎng)大于0時(shí)判斷循環(huán)變量的當(dāng)前值是否大于終值,步長(zhǎng)小于 0判斷循環(huán)變量的當(dāng)前值是否小于終值。步長(zhǎng)為0時(shí)導(dǎo)致循環(huán) 無(wú)法結(jié)束,所以步長(zhǎng)不要設(shè)置為0。 步長(zhǎng)可以是整數(shù)或小數(shù),步長(zhǎng)為1時(shí)可以省略。 除第一次循環(huán)以外,其他循環(huán)增加一個(gè)步長(zhǎng)后與終值比較。 for循環(huán)可以嵌套。 在for循環(huán)中可以用exit for語(yǔ)句強(qiáng)行中止循環(huán)。,(3)說(shuō)明,練習(xí)1:閱讀下面程序段,循環(huán)結(jié)束后,各變量的值是多少? dim s as integer, i as integer s=0 for i=1 to 10 step 2 s=s+i i=i+2 next 結(jié)論:循環(huán)結(jié)束后,變量i的值是13,變量 s 的值是
29、15。,1、i=1 s=0+1=1 i=1+2=3 step 2 i=i+2=5 2、i=5 s=1+5=6 i=5+2=7 step 2 i=i+2=9 3、i=9 s=6+9=15 i=9+2=11 step 2 i=i+2=13,步長(zhǎng)相當(dāng)于4: for i=1 to 10 step 4 s=s+i next,練習(xí)2:下面的程序段使得循環(huán)中途退出 Dim s as integer, i as integer S=0 For i=0 to 100 step 2 s=s+i if s=20 then exit for 中途退出循環(huán) Next,分析:i=0 s=0+0=0 i=i+2=2 i=2
30、 s=0+2=2 i=i+2=4 i=4 s=2+4=6 i=i+2=6,分析:i=6 s=6+6=12 i=i+2=8 i=8 s=12+8=20,結(jié)論:循環(huán)結(jié)束后,變量i的值是8, s 的值是20。,Dim s as integer, i as integer S=0 For i=0 to 100 step 2 s=s+i Next 1100之間的偶數(shù)之和,Dim s as integer, i as integer S=0 For i=0 to 100 s=s+i Next 1100之間的整數(shù)數(shù)之和,2do-while-loop循環(huán) do-while-loop循環(huán)是當(dāng)型循環(huán)結(jié)構(gòu),先判斷后
31、執(zhí)行。 (1)格式 do while 循環(huán)條件 語(yǔ)句序列 loop (2)功能 先檢查循環(huán)條件是否成立,若條件為真,執(zhí)行語(yǔ)句序列。遇到loop語(yǔ)句時(shí)返回循環(huán)開始處重新判斷,若條件仍然為真,再次執(zhí)行語(yǔ)句序列。當(dāng)條件為假時(shí)退出循環(huán)。,(3)說(shuō)明 可以用exit do強(qiáng)行中止循環(huán)。 要考慮循環(huán)變量賦初值和給循環(huán)變量增加步長(zhǎng)的問(wèn)題。 如果將while換成until,當(dāng)條件為真時(shí)循環(huán)結(jié)束。 練習(xí):閱讀下面的程序(注:大寫字母A的ASCII碼是65。) dim a(26) as string, b(26) as integer 字符數(shù)組 dim i as integer i=1 給循環(huán)變量賦初值 do w
32、hile i=26 a(i)=chr(i+64) 將ASCII碼變?yōu)樽帜?b(i)=Lcase(a(i) 將大寫字母變?yōu)樾懽帜?i=i+1 使循環(huán)變量增加1 Loop,該循環(huán)結(jié)構(gòu)循環(huán)26次,每次循環(huán)產(chǎn)生一個(gè)字母(大、小寫),分別存放在a和b數(shù)組中。 即:通過(guò)循環(huán)產(chǎn)生26個(gè)大小寫的英文字母,分別存放在A、B數(shù)組中。,3do-loop-while循環(huán) 是直到型循環(huán)結(jié)構(gòu),先執(zhí)行后判斷。 (1)格式 do 語(yǔ)句序列 Loop while 循環(huán)條件 (2)功能 先執(zhí)行語(yǔ)句序列,遇到loop語(yǔ)句時(shí)判斷循環(huán)條件,若條件為真,再次執(zhí)行語(yǔ)句序列。當(dāng)條件為假時(shí)退出循環(huán)。 (3)說(shuō)明 可以用exit do強(qiáng)行中止
33、循環(huán)。 要考慮給循環(huán)變量賦初值和給循環(huán)變量增加步長(zhǎng)的問(wèn)題。 如果將while換成until,當(dāng)條件為真時(shí)循環(huán)結(jié)束。,4for-each 循環(huán)語(yǔ)句 for each循環(huán)用來(lái)遍歷數(shù)組或?qū)ο蠹现忻恳粋€(gè)元素,不需要指定循環(huán)次數(shù),每個(gè)元素只遍歷一次。如果不知道一個(gè)集合有多少個(gè)元素,用for each循環(huán)非常方便。 (1)格式 for each 循環(huán)變量 in 集合或數(shù)組 語(yǔ)句序列 next (2)功能 用循環(huán)變量依次遍歷數(shù)組或?qū)ο蠹现忻恳粋€(gè)元素,直到遍歷結(jié)束。,練習(xí):閱讀下面程序。 dim a(50) as integer, i as integer, s as integer for i=1 to
34、 50 給數(shù)組賦值 a(i)=i next s=0,for each i in a 遍歷a中元素 if i mod 2 0 i和2進(jìn)行模運(yùn)算結(jié)果不為0 then s=s+a(i) 計(jì)算奇數(shù)之和 next,例8-18:顯示Fibonacci數(shù)列的第15個(gè)元素,(Fibonacci數(shù)列的前兩個(gè)數(shù)都是1,從第3個(gè)數(shù)開始,每個(gè)數(shù)都是前兩個(gè)數(shù)之和。),(1)建立文本框名稱為t1建立命令按鈕名稱為c1。 (2)c1的click事件代碼: Dim f(15) As Integer f(1) = 1:f(2) = 1 For i = 3 To 15 f(i) = f(i - 1) + f(i - 2) Nex
35、t t1 = f(15),8.5 過(guò)程調(diào)用與參數(shù)傳遞,8.5.1 認(rèn)識(shí)過(guò)程和參數(shù),1過(guò)程 過(guò)程是用來(lái)執(zhí)行特定任務(wù)的一段獨(dú)立的程序代碼,這段代碼能被反復(fù)調(diào)用。VBA的模塊以過(guò)程為單元組成。 VBA的過(guò)程根據(jù)是否返回值分為兩類:Sub過(guò)程和Function過(guò)程。 Sub過(guò)程只執(zhí)行操作不返回值,不能用在表達(dá)式中,調(diào)用時(shí)就象使用基本語(yǔ)句一樣。 Function過(guò)程又稱為用戶自定義函數(shù),執(zhí)行操作后返回結(jié)果,常用在表達(dá)式中,調(diào)用時(shí)就象使用基本函數(shù)一樣。 過(guò)程名是標(biāo)識(shí)符,不要與模塊名重名,否則調(diào)用時(shí)會(huì)出現(xiàn)混亂。同一模塊中,Sub過(guò)程也不要與Function過(guò)程重名。 過(guò)程不能嵌套定義,但可以嵌套調(diào)用。,2參
36、數(shù) 如果在調(diào)用過(guò)程中,主調(diào)方(調(diào)用過(guò)程的語(yǔ)句)與被調(diào)方(過(guò)程)存在數(shù)據(jù)傳遞關(guān)系,表現(xiàn)這種傳遞關(guān)系的數(shù)據(jù)就是參數(shù)。 參數(shù)分為形參(形式參數(shù))和實(shí)參(實(shí)際參數(shù))。 形參用在被調(diào)方,只能是變量名或數(shù)組名。 實(shí)參用在主調(diào)方,可以是常量、已賦值的變量、有計(jì)算結(jié)果的表達(dá)式。 當(dāng)形參和實(shí)參都是變量時(shí),存在兩種參數(shù)傳遞方式:值傳遞與地址傳遞。 值傳遞只能把實(shí)參的值傳給形參,是“單向傳遞”。 地址傳遞能在實(shí)參與形參之間實(shí)現(xiàn)參數(shù)的“雙向傳遞”,不但將實(shí)參的值傳給形參,形參的值也可以傳給實(shí)參。,8.5.2 sub過(guò)程,sub 過(guò)程是包含在 sub 和 end sub 之間的一組代碼,調(diào)用sub過(guò)程時(shí)只執(zhí)行其中的操作
37、,不返回值。 1定義sub過(guò)程的格式 sub 過(guò)程名(形參1 as 數(shù)據(jù)類型,形參2 as 數(shù)據(jù)類型,) 語(yǔ)句序列 end sub 2調(diào)用sub過(guò)程 格式1:call 過(guò)程名(實(shí)參1 ,實(shí)參2,) 格式2:過(guò)程名 實(shí)參1,實(shí)參2,,3說(shuō)明 (1)參數(shù)之間用逗號(hào)分隔,對(duì)應(yīng)的形參與實(shí)參之間要類型匹配。 (2)用格式1調(diào)用sub過(guò)程必須加括號(hào),用格式2調(diào)用sub過(guò)程不加括號(hào)。 (3)用 exit sub 語(yǔ)句立即從 sub 過(guò)程中退出。 (4)定義sub過(guò)程時(shí)即使無(wú)任何參數(shù),也必須包含空括號(hào)()。 (5)sub之前可以用public或private或static定義過(guò)程作用域。 (6)標(biāo)準(zhǔn)模塊中的過(guò)
38、程可以被所有對(duì)象調(diào)用,類模塊中的過(guò)程只在本模塊中有效。,例8-19:sub過(guò)程練習(xí),(1)建2個(gè)文本框名稱分別為t1和t2附加標(biāo)簽標(biāo)題分別為“輸入矩形長(zhǎng):”和“輸入矩形寬:”。 (2)建命令按鈕名稱為c1標(biāo)題為“計(jì)算”。 (3)建立標(biāo)準(zhǔn)模塊 以“過(guò)程模塊”為名保存模塊。 (4)在“過(guò)程模塊”中定義jxmj過(guò)程,代碼如下:,Public Sub jxmj (h As Integer, w As Integer) Dim s As Integer s = h * w 計(jì)算矩形面積 MsgBox 矩形面積為: & s 顯示矩形面積 End Sub,(5)命令按鈕c1的click事件代碼: Dim a1 As Integer, a2 As Integer a1 = t1:a2 = t2 Call jxmj (a1, a2) 用格式1調(diào)用sub模塊 (6)轉(zhuǎn)到窗體視圖輸入矩形長(zhǎng)和寬單擊“計(jì)算”按鈕
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)第一學(xué)年(批判性思維)謬誤識(shí)別階段測(cè)試試題及答案
- 高三化學(xué)(真題解析)2025-2026年下學(xué)期試題及答案
- 2025年大學(xué)文學(xué)(文學(xué)評(píng)論寫作)試題及答案
- 2025年高職學(xué)前教育基礎(chǔ)(學(xué)前基礎(chǔ))試題及答案
- 2025年大學(xué)文字處理(文字處理基礎(chǔ))試題及答案
- 2025年中職(畜牧獸醫(yī))動(dòng)物臨床診斷試題及答案
- 2026年綜合服務(wù)(服務(wù)優(yōu)化)考題及答案
- 2025年高職會(huì)計(jì)論文答辯(論文答辯)試題及答案
- 深度解析(2026)《GBT 18239-2000集成電路(IC)卡讀寫機(jī)通 用規(guī)范》(2026年)深度解析
- 深度解析(2026)《GBT 18195-2000精密機(jī)械用六角螺母》
- 介紹心靈奇旅的課件
- 幼小銜接-認(rèn)識(shí)人體-課件
- JGJT251-2011建筑鋼結(jié)構(gòu)防腐蝕技術(shù)規(guī)程
- 2022室外排水設(shè)施設(shè)計(jì)與施工-鋼筋混凝土化糞池22S702
- GB/Z 43482-2023液壓傳動(dòng)軟管和軟管總成收集流體樣本分析清潔度的方法
- 急性中毒的處理與搶救
- 淤泥消納施工方案
- 跌落式熔斷器熔絲故障原因分析
- 2023年全市中職學(xué)校學(xué)生職業(yè)技能大賽
- 黑布林英語(yǔ)閱讀初一年級(jí)16《柳林風(fēng)聲》譯文和答案
- 倉(cāng)庫(kù)安全管理檢查表
評(píng)論
0/150
提交評(píng)論