ACCESS實例教程(第8章vba).ppt
《ACCESS實例教程(第8章vba).ppt》由會員分享,可在線閱讀,更多相關《ACCESS實例教程(第8章vba).ppt(149頁珍藏版)》請在裝配圖網(wǎng)上搜索。
ACCESS實例教程,——模塊的操作(第8章),1.模塊的基本概念2.VBA程序設計基礎3.VBA函數(shù)的使用4.模塊的建立與使用5.過程與參數(shù)傳遞,本章要點:,VBA(VisualBasicforApplication)是MicrosoftOffice系列軟件的內置編程語言;其語法結構與VisualBasic編程語言互相兼容;VB是微軟公司推出的可視化BASIC語言,是一種編程簡單、功能強大的面向對象開發(fā)工具,我們可以像編寫VB程序那樣來編寫VBA程序。采用的是面向對象的編程機制和可視化的編程環(huán)境。用VBA語言編寫的代碼,將保存在Access中的一個模塊里,并通過類似在窗體中激發(fā)宏的操作那樣來啟動這個模塊,從而實現(xiàn)相應的功能。,VBA簡介,注意:VB語言開發(fā)系統(tǒng)是獨立運行的開發(fā)環(huán)境,它創(chuàng)建的應用程序可以獨立運行在Windows平臺上;而VBA則不同,其編程環(huán)境和VBA程序都必須依賴Office應用程序(如Access、Word、Excel等)。,VBA簡介,VBA編程環(huán)境在Access2003提供的“模塊”數(shù)據(jù)庫對象中,使用VBA程序設計語言,在不同的模塊中實現(xiàn)VBA代碼設計,可以解決實際開發(fā)中的復雜應用。要用Access2003來完成一個實際的數(shù)據(jù)庫應用系統(tǒng),就應該掌握VBA。,8.1認識模塊對象,模塊是由聲明、語句和過程組成的集合,以VBA(VisualBasicforApplication)語言編寫,作為一個已命名的單元存儲在一起。模塊有2種類型:類模塊和標準模塊。使用模塊可以在實際開發(fā)中實現(xiàn)較為復雜的功能。,(1)模塊:模塊由一個或多個過程組成,每個過程實現(xiàn)一個或幾個功能。模塊的執(zhí)行通過特定事件激發(fā)相應的事件過程實現(xiàn)。(2)事件過程:事件過程是一組代碼,用于響應窗體事件或報表事件。(3)類模塊:類模塊是包含代碼和數(shù)據(jù)的集合,可以看作是沒有物理表示的控件,總是與某一特定的窗體或報表相關聯(lián)。窗體模塊和報表模塊都屬于類模塊。(4)標準模塊:標準模塊是代碼的集合,包含的過程不與任何其他對象相關聯(lián),是數(shù)據(jù)庫對象使用的公共過程,保存在數(shù)據(jù)庫窗口中。,8.1.1模塊的基本概念,8.1.2啟動Access的編程界面,Access的編程界面稱為VBE(VisualBasicEditor),是MicrosoftOffice所有組件公用的程序編輯系統(tǒng)。方法1:在窗體或報表設計視圖中選控件→單擊標準工具欄的“生成器”按鈕→在“選擇生成器”對話框中選擇“代碼生成器”。方法2:右擊窗體或報表設計視圖中控件→快捷菜單中選“事件生成器”→“選擇生成器”對話框中選擇代碼生成器”。,8.1.3VBE窗口VBE窗口由工具欄、工程資源管理器窗口、屬性窗口、代碼窗口和立即窗口組成。,工程窗口-選擇對象,屬性窗口-選擇對象的屬性,代碼窗口,選擇事件,(1)工程窗口也稱工程資源管理器,一個數(shù)據(jù)庫應用系統(tǒng)就是一個工程,系統(tǒng)中的所有類模塊及標準模塊對象都在該窗口中顯示出來。,類模塊,標準模塊,,,(2)屬性窗口屬性窗口列出了選定對象的屬性,可以在設計時查看、改變這些屬性。當選取了多個控件時,屬性窗口會列出所有控件的共同屬性。,,,(3)代碼窗口代碼窗口用來顯示、編寫以及修改VBA代碼。實際操作中,可以打開多個代碼窗口,查看不同窗體或模塊中的代碼,代碼窗口之間可以進行復制和粘貼。,對象框,過程框,編寫模塊對象的代碼在代碼窗口進行。(1)窗口頂部有2個組合框,左邊對象框顯示所有對象名稱,右邊過程框顯示當前對象能識別的所有事件名稱。選定一個對象,再選定一個事件,系統(tǒng)會自動生成相應事件過程的起始行與結束行,只須在兩行中間添加過程代碼即可?!巴ㄓ谩边^程可以被所有控件調用。某控件的過程只在關聯(lián)事件中有效。(2)窗口中央代碼區(qū)有聲明區(qū)和過程區(qū),聲明區(qū)中聲明模塊使用的變量,過程區(qū)顯示一個或多個過程,之間用一條灰線分隔。(3)窗口底部有2個按鈕,單擊“過程視圖”按鈕,只顯示當前過程。單擊右邊“完整的模塊視圖”按鈕,窗口顯示全部過程。,8.1.4標準工具欄,例8-1:創(chuàng)建一個類模塊。1、打開數(shù)據(jù)庫;2、新創(chuàng)建窗體——名稱為w1;3、在窗體中添加命令按鈕——名字為c1;4、選擇c1打開屬性——【單擊】——打開【代碼生成器】;,PrivateSubCommand0_Click()DoCmd.CloseEndSub,DoCmd為對象用來調用內置的方法,Close關閉窗體,例8-1:創(chuàng)建一個類模塊。,對象框,過程框,例8-2:創(chuàng)建一個標準模塊。,1、打開數(shù)據(jù)庫;2、選擇【模塊】對象→單擊【新建】按鈕;3、在VBE中編輯如下程序;,過程名為aa,x,y為整型變量,z為整型變量,存放x和y的乘積。顯示信息框,例8-2:創(chuàng)建一個標準模塊。,4、保存→模塊名為mj;5、新創(chuàng)建窗體——名稱為w2;6、在窗體中添加兩個文本框→名稱分別為t1,t2;7、添加命令按鈕——名字為c1;8、選擇c1打開屬性——【單擊】——打開【代碼生成器】;,調用過程aa,并將文本框的值傳遞給aa,8.1.7使用提示與幫助,在代碼窗口輸入代碼時,系統(tǒng)會自動顯示提示信息,包括關鍵字列表、屬性列表、過程參數(shù)列表等,在列表中選取一項后雙擊鼠標,所選值會自動添加到當前光標處。,8.2VBA程序設計基礎,8.2.1面向對象的程序設計的基本概念,(1)對象在自然界中,一個對象就是一個實體,如一輛汽車就是一個對象。在面向對象的程序設計中,對象代表應用程序中的元素,如表、窗體、按鈕等。(2)屬性屬性是對象的特征。如汽車有顏色和型號屬性,按鈕有標題和名稱屬性。對象的類別不同,屬性會有所不同。同類別對象的不同實例,屬性也有差異。例如,同是命令按鈕,名稱屬性不允許相同。,(3)事件事件是對象能夠識別的動作。如按鈕可以識別單擊事件、雙擊事件等。在類模塊每一個過程的開始行,都顯示對象名和事件名。如:PrivateSubc1_Click()。(4)方法方法是對象能夠執(zhí)行的動作,決定了對象能完成什么事。不同對象有不同的方法。如close方法能關閉一個窗體。,(5)集合集合由許多與對象有關的鍵和值組成,其中的鍵和值是配對的。如一本書是一個對象,書的頁碼是鍵,頁碼對應的內容是值。所有配對的頁碼和內容組成了書對象的集合。(6)過程過程是由代碼組成的單元,包含一系列計算語句和執(zhí)行語句。每一個過程都有名字,過程名不能與所在模塊的模塊名相同。過程有兩種類型:sub過程(無返回值),function過程(有返回值)。,例8-3:創(chuàng)建一個類模塊,動態(tài)設置控件屬性,(1)在窗體ct中創(chuàng)建一個文本框→名稱為t1。(2)在窗體ct中創(chuàng)建一個標簽→名稱為b1→標題為“歡迎你!”。(3)在窗體ct中創(chuàng)建三個命令按鈕→名稱分別為c1、c2、c3→標題分別為“紅色”、“綠色”、“藍色”。,(4)設置各按鈕的前景色,在屬性窗口可查看顏色值。,(5)c1的click事件代碼:t1.BackColor=255b1.ForeColor=255,(6)c2的click事件代碼:t1.BackColor=33792b1.ForeColor=33792(7)c3的click事件代碼:t1.BackColor=16711680b1.ForeColor=16711680,執(zhí)行結果:,Docmd是Access的一個特殊對象,用來調用內置方法,在程序中實現(xiàn)對Access的操作,諸如打開窗口、關閉窗體、打開報表、關閉報表等。DoCmd對象的大多數(shù)方法都有參數(shù),有些參數(shù)是必需的,有些則是可選的。若省略可選參數(shù),參數(shù)將采用默認值。,8.2.2Docmd對象,(1)用DoCmd對象打開窗體格式:DoCmd.OpenForm"窗體名"功能:用默認形式打開指定窗體。例如:DoCmd.OpenForm"文本框練習",(2)用DoCmd對象關閉窗體格式1:DoCmd.CloseacForm,"窗體名"功能:關閉指定窗體。例如:DoCmd.CloseacForm,"文本框練習"格式2:DoCmd.Close功能:關閉當前窗體。(3)用DoCmd對象打開報表格式:DoCmd.OpenReport"報表名",acViewPreview功能:用預覽形式打開指定報表。例如:DoCmd.OpenReport"工資報表",acViewPreview,(4)用DoCmd對象關閉報表格式1:DoCmd.CloseacReport,"報表名"功能:關閉指定報表。例如:DoCmd.CloseacReport,"工資報表"格式2:DoCmd.Close功能:關閉當前報表。(5)用DoCmd對象運行宏格式:DoCmd.RunMacro"宏名"功能:運行指定宏。例如:DoCmd.RunMacro"宏1"(6)用DoCmd對象退出Access。格式:DoCmd.Quit功能:關閉所有Access對象和Access本身。,(1)在窗體中建立5個按鈕→名稱分別為c1、c2、c3、c4、c5→標題分別為“打開文本框練習窗體”、“關閉文本框練習窗體”、“打開工資報表”、“關閉工資報表”、“退出Access”。,例8-4:使用DoCmd對象,(2)c1代碼:DoCmd.OpenForm"文本框練習"(3)c2代碼:DoCmd.CloseacForm,"文本框練習"(4)c3代碼:DoCmd.OpenReport"工資報表",acViewPreview(5)c4代碼:DoCmd.CloseacReport,"工資報表"(6)c5代碼:DoCmd.Quit,(7)轉到窗體視圖→單擊不同按鈕執(zhí)行不同操作。,8.2.3數(shù)據(jù)類型與數(shù)據(jù)類型轉換,VBA中的基本數(shù)據(jù)類型VBA在數(shù)據(jù)類型和定義方式上均繼承了傳統(tǒng)的Basic語言的特點。Access數(shù)據(jù)表中的字段使用的數(shù)據(jù)(OLE對象和備注字段數(shù)據(jù)類型除外)在VBA中都有對應的類型。在VBA中,數(shù)據(jù)類型用來決定變量可以保存何種數(shù)據(jù)。VBA支持多種數(shù)據(jù)類型,為用戶編程提供了方便。,8.2.3數(shù)據(jù)類型與數(shù)據(jù)類型轉換,(1)標準數(shù)據(jù)類型,1.數(shù)值型數(shù)據(jù)類型包括:Byte、Integer、Long、Single、Double和Currency。(1)Byte以一個字節(jié)的無符號二進制數(shù)存儲,取值范圍為0~255。(2)整數(shù)(integer和Long)整數(shù)是不帶小數(shù)點和指數(shù)符號的數(shù),在機器內以二進制補碼形式表示。整型(Integer)長整型(Long)例如:345、-345、345%均表示整型數(shù)。345SumEndSub,良好的編程習慣應該是“先聲明變量,后使用變量”,這樣做可以提高程序的效率,同時也使程序易于調試。,,,,聲明而未賦值的變量的值為:數(shù)值型變量初始化為0;字符型變量為零長度字符串;變體型變量初始化為Empty。,變量的初始化,(5)一個特殊的模塊變量本地窗口打開時,自動生成一個名為“Me”的特殊模塊變量。對于類模塊,定義為Me。Me是對象的引用,引用當前模塊中當前類的實例。Me變量不需要專門定義,直接使用即可。例如:用代碼定義“學生信息”窗體中“Lab”標簽的標題屬性,以下兩種方法效果是一樣的:標準方法:Forms!學生信息!Lab.Caption="學生信息瀏覽"常用方法:Me!Lab.Caption="學生信息瀏覽",8.2.5變量的作用域和生命周期,1.變量的作用域變量的作用域是變量在程序中起作用的范圍。分3個層次,從低到高依次為:局部、模塊、全局。(1)局部變量又稱為本地變量,僅在聲明變量的過程中有效。在過程和函數(shù)內部用dim聲明或不用聲明接使用的變量,都是局部變量。局部變量在本地擁有最高級,當存在同名的模塊級變量時,模塊級變量被屏蔽。(2)模塊變量模塊變量在所聲明模塊的所有函數(shù)和所有過程都有效,變量定義在模塊所有過程之外的起始位置,通常是窗體變量或標準模塊變量。(3)全局變量全局變量又稱為公共變量,定義在標準模塊所有過程之外,在所有模塊的所有過程和函數(shù)中都有效。定義格式:public變量名as數(shù)據(jù)類型,變量的生命周期是指變量從首次出現(xiàn)到變量消失的代碼執(zhí)行時間。變量首次出現(xiàn)是指聲明變量并為其分配存儲空間,變量消失是指變量所在的程序執(zhí)行完畢。局部變量:的生命周期從過程或函數(shù)被調用到運行結束。全局變量:的生命周期從聲明到Access應用程序結束。過程中用dim定義的變量,每次調用過程時都重新開始,過程結束時立即消失。用static代替dim定義變量,可以在過程實例間保留局部變量的值。用static定義的變量稱為靜態(tài)變量,作用范圍與dim相同,在整個模塊執(zhí)行時一直存在。,2.變量的生命周期,例8-6:用static和dim定義局部變量,(1)在窗體中建立2個文本框→分別命名為t1和t2→附加標簽的標題分別為“靜態(tài)變量”和“局部變量”。(2)在窗體中建立命令按鈕→名稱為c1→標題為“計算”。,(3)c1的click代碼:StaticxAsInteger‘x變量的生命周期為全程DimyAsInteger‘y變量的生命周期為局部x=x+1:y=y+1t1=x:t2=y,(4)執(zhí)行時不斷單擊命令按鈕,靜態(tài)變量文本框中的值每次增加1,而局部變量文本框中的值總是1。,1.數(shù)組的概念數(shù)組是由一組具有相同數(shù)據(jù)類型的變量(稱為數(shù)組元素)構成的集合。為了識別數(shù)組中不同的元素,數(shù)組元素可以通過下標來訪問,數(shù)組下標默認從0開始。說明:(1)數(shù)組要先定義后使用,VBA不允許隱式聲明數(shù)組。(2)同一過程中數(shù)組名不能與其他變量重名。,8.2.7數(shù)組,2.聲明一維數(shù)組格式1:dim數(shù)組名(下標上限)as數(shù)據(jù)類型格式2:dim數(shù)組名(下標下限to下標上限)as數(shù)據(jù)類型例如:dima(6)asinteger功能:聲明了有7個元素的數(shù)組a,元素下標從0到6,默認值均為0。例如:dimb(1to6)asstring功能:聲明了有6個元素的數(shù)組b,下標從1到6,默認值均為空串。說明:(1)如果不定義數(shù)組下標的下限,默認下標下限為0。(2)數(shù)組定義中的參數(shù)必須是常數(shù)。(3)如果使用as語句定義數(shù)組類型,同一數(shù)組只能存放相同類型數(shù)據(jù)。,聲明數(shù)組后,每個數(shù)組元素都被當作單個變量使用。一維數(shù)組元素的引用格式:數(shù)組名(下標)數(shù)組賦值與引用:bAge(0)=50bAge(1)=20bAge(2)=70DimsumasByteSum=bAge(0)+bAge(1)+bAge(2),,,3.聲明多維數(shù)組格式:dim數(shù)組名(下標上限1,下標上限2,…)as數(shù)據(jù)類型例如:dimc(3,4)asinteger功能:聲明有20個元素的數(shù)組c,行下標從0到3,列下標從0到4。例如:dimd(1to3,2to4)asinteger功能:聲明有9個元素的數(shù)組d,行下標從1到3,列下標從2到4。4.使用數(shù)組聲明數(shù)組后,每個數(shù)組元素都被當作單個變量使用。一維數(shù)組元素的引用格式:數(shù)組名(下標)二維數(shù)組元素的引用格式:數(shù)組名(下標1,下標2),例8-7:使用符號常量和數(shù)組,(1)在窗體建文本框→名稱為t1。(2)在窗體建命令按鈕→名稱為c1→標題為“確定”。(3)命令按鈕c1的單擊事件代碼:,constAA=“歡迎你!”‘定義符號常量dimb(1)AsString‘定義字符串數(shù)組b(0)=AAb(1)=t1MsgBoxb(0)":bb="標點符號"CaseElse:bb="特殊字符"EndSelectMsgBoxbb,(3)轉到窗體視圖→文本框中輸入字母→單擊按鈕顯示消息框。,8.4.4選擇函數(shù)與計時器事件,1.iif函數(shù)格式:iif(條件,表達式1,表達式2)功能:如果條件為真,函數(shù)值為表達式1的值,否則,函數(shù)值為表達式2的值。例:y=iif(a>b,"a大","b大")2.switch函數(shù)格式:switch(條件1,表達式1,條件2,表達式,…,條件n,表達式n)功能:從左到右依次判斷,遇到第一個條件為真時返回對應表達式的值。說明:條件與表達式成對,當多個條件為真時,只取第一個條件的對應表達式。例:y=switch(x0,1),3.choose函數(shù)格式:choose(索引式,值1,值2,…,值n)功能:根據(jù)索引項的值,返回對應的值。說明:索引項通常是整型變量名,取值范圍1~n,超出范圍時返回NULL。例如:y=choose(x,"優(yōu)秀","良好","中等","及格","不及格"),4.計時器事件VBA沒有直接提供時間控件,通過timer事件實現(xiàn)定時功能。方法:首先設置窗體的計時器間隔屬性TimerInterval,然后給timer事件寫過程代碼。打開窗體時,每隔一個時間間隔激發(fā)一次timer事件,事件的過程就被執(zhí)行一次,從而實現(xiàn)“定時”處理功能。計時器間隔的時間單位為毫秒,1000毫秒=1秒。,例8-16:顯示電子表,(1)建立2個標簽→名稱為b1和b2→標題都為數(shù)字1。(2)打開窗體的屬性窗口→單擊“事件”選項卡→設置計時器間隔屬性為1000。(3)在VBE窗口“通用-聲明”寫代碼:PublicaAsBooleana為邏輯型,默認false(4)Form的Timer事件代碼:a=Notab1.Caption=Time()b2.Caption=CInt(b2.Caption)+1b2.ForeColor=IIf(a=True,255,16711680),(5)轉到窗體視圖。b1中顯示系統(tǒng)當前時間,b2中的數(shù)字每秒增加1,數(shù)字的顏色紅、藍交替,每秒換一次。,8.4.5驗證函數(shù),VBA的常用驗證函數(shù),例8-17:檢驗字符串類型,(1)建文本框→名稱為t1→附加標簽標題為“輸入年齡:”。(2)建命令按鈕→名稱分別為c1→標題為“驗證”。(3)c1的click事件代碼:Ift1=""OrIsNull(t1)ThenMsgBox"不能為空!",vbCritical,"提示"ElseIfIsNumeric(t1)=FalseThenMsgBox"必須是數(shù)字!",vbCritical,"提示"ElseIft1=150ThenMsgBox"超出范圍!",vbCritical,"提示“ElseMsgBox"驗證通過!",vbInformation,"提示"EndIf,(4)轉到窗體視圖→在文本框中輸入一個字母→單擊【驗證】按鈕→消息框顯示消息“必須是數(shù)字!”。,8.4.6循環(huán)語句,當某一程序段需要反復執(zhí)行,用循環(huán)結構實現(xiàn)。循環(huán)結構對應兩類循環(huán)語句:先判斷后執(zhí)行的循環(huán)語句(當型循環(huán)結構)先執(zhí)行后判斷的循環(huán)語句(直到型循環(huán)結構),1.for-next循環(huán)for-next循環(huán)能使語句序列運行指定次數(shù),循環(huán)中有一個計數(shù)器變量,變量的值隨每一次循環(huán)增加或減少。for-next是當型循環(huán)結構,先判斷后執(zhí)行。,(1)格式:for循環(huán)變量=初值to終值step步長語句序列next,(2)功能:先將初值賦給循環(huán)變量,再將循環(huán)變量的當前值與終值做比較,如果比較結果為真執(zhí)行語句序列,增加一個步長,再進行比較,如果比較結果仍為真,繼續(xù)循環(huán)……。如果比較結果為假,結束循環(huán)。,步長大于0時判斷循環(huán)變量的當前值是否大于終值,步長小于0判斷循環(huán)變量的當前值是否小于終值。步長為0時導致循環(huán)無法結束,所以步長不要設置為0。步長可以是整數(shù)或小數(shù),步長為1時可以省略。除第一次循環(huán)以外,其他循環(huán)增加一個步長后與終值比較。for循環(huán)可以嵌套。在for循環(huán)中可以用exitfor語句強行中止循環(huán)。,(3)說明,練習1:閱讀下面程序段,循環(huán)結束后,各變量的值是多少?dimsasinteger,iasintegers=0fori=1to10step2s=s+ii=i+2next結論:循環(huán)結束后,變量i的值是13,變量s的值是15。,1、i=1s=0+1=1i=1+2=3step2i=i+2=52、i=5s=1+5=6i=5+2=7step2i=i+2=93、i=9s=6+9=15i=9+2=11step2i=i+2=13,步長相當于4:fori=1to10step4s=s+inext,練習2:下面的程序段使得循環(huán)中途退出Dimsasinteger,iasintegerS=0Fori=0to100step2s=s+iifs>=20thenexitfor‘中途退出循環(huán)Next,分析:i=0s=0+0=0i=i+2=2i=2s=0+2=2i=i+2=4i=4s=2+4=6i=i+2=6,分析:i=6s=6+6=12i=i+2=8i=8s=12+8=20,結論:循環(huán)結束后,變量i的值是8,s的值是20。,Dimsasinteger,iasintegerS=0Fori=0to100step2s=s+iNext1~100之間的偶數(shù)之和,Dimsasinteger,iasintegerS=0Fori=0to100s=s+iNext1~100之間的整數(shù)數(shù)之和,2.do-while-loop循環(huán)do-while-loop循環(huán)是當型循環(huán)結構,先判斷后執(zhí)行。(1)格式dowhile循環(huán)條件語句序列l(wèi)oop(2)功能先檢查循環(huán)條件是否成立,若條件為真,執(zhí)行語句序列。遇到loop語句時返回循環(huán)開始處重新判斷,若條件仍然為真,再次執(zhí)行語句序列……。當條件為假時退出循環(huán)。,(3)說明可以用exitdo強行中止循環(huán)。要考慮循環(huán)變量賦初值和給循環(huán)變量增加步長的問題。如果將while換成until,當條件為真時循環(huán)結束。練習:閱讀下面的程序(注:大寫字母A的ASCII碼是65。)dima(26)asstring,b(26)asinteger‘字符數(shù)組dimiasintegeri=1給循環(huán)變量賦初值dowhilei<=26a(i)=chr(i+64)將ASCII碼變?yōu)樽帜竍(i)=Lcase(a(i))將大寫字母變?yōu)樾懽帜竔=i+1使循環(huán)變量增加1Loop,該循環(huán)結構循環(huán)26次,每次循環(huán)產生一個字母(大、小寫),分別存放在a和b數(shù)組中。即:通過循環(huán)產生26個大小寫的英文字母,分別存放在A、B數(shù)組中。,3.do-loop-while循環(huán)是直到型循環(huán)結構,先執(zhí)行后判斷。(1)格式do語句序列Loopwhile循環(huán)條件(2)功能先執(zhí)行語句序列,遇到loop語句時判斷循環(huán)條件,若條件為真,再次執(zhí)行語句序列……。當條件為假時退出循環(huán)。(3)說明可以用exitdo強行中止循環(huán)。要考慮給循環(huán)變量賦初值和給循環(huán)變量增加步長的問題。如果將while換成until,當條件為真時循環(huán)結束。,4.for-each循環(huán)語句foreach循環(huán)用來遍歷數(shù)組或對象集合中每一個元素,不需要指定循環(huán)次數(shù),每個元素只遍歷一次。如果不知道一個集合有多少個元素,用foreach循環(huán)非常方便。(1)格式foreach循環(huán)變量in集合或數(shù)組語句序列next(2)功能用循環(huán)變量依次遍歷數(shù)組或對象集合中每一個元素,直到遍歷結束。,練習:閱讀下面程序。dima(50)asinteger,iasinteger,sasintegerfori=1to50給數(shù)組賦值a(i)=inexts=0,foreachiina遍歷a中元素ifimod20‘i和2進行模運算結果不為0thens=s+a(i)計算奇數(shù)之和next,例8-18:顯示Fibonacci數(shù)列的第15個元素,(Fibonacci數(shù)列的前兩個數(shù)都是1,從第3個數(shù)開始,每個數(shù)都是前兩個數(shù)之和。),(1)建立文本框→名稱為t1→建立命令按鈕→名稱為c1。(2)c1的click事件代碼:Dimf(15)AsIntegerf(1)=1:f(2)=1Fori=3To15f(i)=f(i-1)+f(i-2)Nextt1=f(15),8.5過程調用與參數(shù)傳遞,8.5.1認識過程和參數(shù),1.過程過程是用來執(zhí)行特定任務的一段獨立的程序代碼,這段代碼能被反復調用。VBA的模塊以過程為單元組成。VBA的過程根據(jù)是否返回值分為兩類:Sub過程和Function過程。Sub過程只執(zhí)行操作不返回值,不能用在表達式中,調用時就象使用基本語句一樣。Function過程又稱為用戶自定義函數(shù),執(zhí)行操作后返回結果,常用在表達式中,調用時就象使用基本函數(shù)一樣。過程名是標識符,不要與模塊名重名,否則調用時會出現(xiàn)混亂。同一模塊中,Sub過程也不要與Function過程重名。過程不能嵌套定義,但可以嵌套調用。,2.參數(shù)如果在調用過程中,主調方(調用過程的語句)與被調方(過程)存在數(shù)據(jù)傳遞關系,表現(xiàn)這種傳遞關系的數(shù)據(jù)就是參數(shù)。參數(shù)分為形參(形式參數(shù))和實參(實際參數(shù))。形參用在被調方,只能是變量名或數(shù)組名。實參用在主調方,可以是常量、已賦值的變量、有計算結果的表達式。當形參和實參都是變量時,存在兩種參數(shù)傳遞方式:值傳遞與地址傳遞。值傳遞只能把實參的值傳給形參,是“單向傳遞”。地址傳遞能在實參與形參之間實現(xiàn)參數(shù)的“雙向傳遞”,不但將實參的值傳給形參,形參的值也可以傳給實參。,8.5.2sub過程,sub過程是包含在sub和endsub之間的一組代碼,調用sub過程時只執(zhí)行其中的操作,不返回值。1.定義sub過程的格式sub過程名(形參1as數(shù)據(jù)類型,形參2as數(shù)據(jù)類型,…)語句序列endsub2.調用sub過程格式1:call過程名(實參1,實參2,…)格式2:過程名實參1,實參2,…,3.說明(1)參數(shù)之間用逗號分隔,對應的形參與實參之間要類型匹配。(2)用格式1調用sub過程必須加括號,用格式2調用sub過程不加括號。(3)用exitsub語句立即從sub過程中退出。(4)定義sub過程時即使無任何參數(shù),也必須包含空括號()。(5)sub之前可以用public或private或static定義過程作用域。(6)標準模塊中的過程可以被所有對象調用,類模塊中的過程只在本模塊中有效。,例8-19:sub過程練習,(1)建2個文本框→名稱分別為t1和t2→附加標簽標題分別為“輸入矩形長:”和“輸入矩形寬:”。(2)建命令按鈕→名稱為c1→標題為“計算”。(3)建立標準模塊→以“過程模塊”為名保存模塊。(4)在“過程模塊”中定義jxmj過程,代碼如下:,PublicSubjxmj(hAsInteger,wAsInteger)DimsAsIntegers=h*w計算矩形面積MsgBox"矩形面積為:"&s顯示矩形面積EndSub,(5)命令按鈕c1的click事件代碼:Dima1AsInteger,a2AsIntegera1=t1:a2=t2Calljxmj(a1,a2)用格式1調用sub模塊(6)轉到窗體視圖→輸入矩形長和寬→單擊“計算”按鈕。,,8.5.3function過程,1.定義function過程的格式function過程名(形參1,形參2,…)as數(shù)據(jù)類型。語句序列過程名=表達式……endfunction2.調用function過程調用function過程只有一種方式,即直接引用過程名,而且過程名在賦值號右端或在表達式中。,3.說明(1)參數(shù)之間用逗號分隔,對應形參與實參之間要類型匹配。(2)“過程名=表達式”是function過程中不可缺少的語句。(3)用exitfunction語句立即從function過程中退出。(4)若function過程無任何參數(shù),也必須包含空括號()。(5)function之前可以用public或private或static定義過程的作用域。,例8-20:function過程練習,(1)建文本框→名稱為t1。(2)建標簽→名稱為Lab→標題為“圓面積=”(3)建命令按鈕→名稱為c1→標題為“計算”。,(4)在已有的“過程模塊”中添加ymj過程,代碼如下:,(6)轉到窗體視圖→在文本框中輸入半徑→單擊“計算”按鈕→計算結果顯示在標簽中。,PublicFunctionymj(rAsInteger)AsSingleymj=r*r*3.14EndFunction,(5)命令按鈕c1的click事件代碼:DimaAsIntegera=t1Lab.Caption=Lab.Caption&ymj(a),8.5.4參數(shù)傳遞,當實參是變量名時,既可以用傳值方式傳遞參數(shù),也可以用傳地址的方式傳遞參數(shù)。,1.參數(shù)的值傳遞如果在過程的形參前加byval說明符,參數(shù)的傳遞方式為“傳值”。值傳遞的含義是指在過程中另外開辟存儲單元存放從實參傳過來的值,一旦過程結束,過程中開辟的存儲單元被釋放,該單元數(shù)據(jù)的改變不會保留下來。,2.參數(shù)的地址傳遞如果在過程的形參前加byref說明符,參數(shù)的傳遞方式為“傳地址”,參數(shù)的地址傳遞是默認選項,不加任何說明符,默認就是傳地址。地址傳遞的含義是指過程中的形參與主調方的實參指向同一個存儲單元,在過程中對存儲單元所做的修改,當過程結束后成為實參的當前值。地址傳遞通常用在sub過程中。,例8-21:參數(shù)傳遞練習,(1)建立2個文本框→名稱分別為t1和t2。(2)建立命令按鈕→名稱為c1→標題為“調用過程”。(3)在已有的“過程模塊”中添加cscd過程,代碼如下:,PublicSubcscd(ByRefaAsInteger,ByValbAsInteger)a=a+10b=b+10EndSub,(4)命令按鈕c1的click事件代碼:,DimxAsInteger,yAsIntegerx=t1:y=t2cscdx,y用格式2調用sub過程t1=x:t2=y(5)轉到窗體視圖→在兩個文本框中都輸入10→單擊“調用過程”按鈕→計算結果仍顯示在文本框中。,- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- ACCESS 實例教程 vba
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。
鏈接地址:http://ioszen.com/p-3384487.html