第7章電子課件_第1頁
第7章電子課件_第2頁
第7章電子課件_第3頁
第7章電子課件_第4頁
第7章電子課件_第5頁
已閱讀5頁,還剩91頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Let’sGo第七章模塊和VBA程序設(shè)計RSchoolofComputerSciencePart.01VisualBasic.NET模塊基本概念模塊是Access數(shù)據(jù)庫中用于保存VBA(VisualBasicforApplication)程序代碼的容器,創(chuàng)建自定義的解決方案,以實現(xiàn)Access自動化。模塊是將VBA代碼的聲明、語句和過程(Function或Sub)作為一個單元進(jìn)行保存的集合。當(dāng)指定的操作激活模塊,其代碼指定的操作就會被執(zhí)行。標(biāo)準(zhǔn)模塊自定義模塊7.1.1模塊簡介7.1.1模塊簡介1.標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊一般用于存放供其它Access數(shù)據(jù)庫對象使用的公共過程。標(biāo)準(zhǔn)模塊提供一些公共變量或過程供類模塊里的過程調(diào)用。在各個標(biāo)準(zhǔn)模塊內(nèi)部也可以定義私有變量和私有過程僅供本模塊內(nèi)部使用。標(biāo)準(zhǔn)模塊中的公共變量和公共過程具有全局特性,其作用范圍為整個應(yīng)用程序。生命周期是伴隨著應(yīng)用程序的運(yùn)行而開始、關(guān)閉而結(jié)束。7.1.1模塊簡介2.類模塊類模塊是包含類的定義的模塊,包括其屬性和方法的定義。類模塊的形式有三種:窗體模塊、報表模塊和自定義模塊。窗體和報表模塊從屬于各自的窗體和報表。窗體和報表模塊通常都含有事件過程,可以使用事件過程來控制窗體或報表的行為,以及它們對用戶操作的響應(yīng),如單擊窗體上的某個命令按鈕。窗體模塊和報表模塊中的過程可以調(diào)用標(biāo)準(zhǔn)模塊中已經(jīng)定義好的過程。為窗體或報表創(chuàng)建第一個事件過程時,Access將自動創(chuàng)建與之關(guān)聯(lián)的窗體或報表模塊。窗體模塊和報表模塊具有局限性,其作用范圍局限在其所屬窗體或報表內(nèi)部,而生命周期則伴隨著窗體或報表的打開或關(guān)閉而開始或結(jié)束。用戶可以創(chuàng)建自定義類,該模塊包含特定概念的方法函數(shù)或過程函數(shù)??梢韵褚肁ccess內(nèi)置類一樣引用自定義類的方法和屬性。7.1.1模塊簡介3.模塊的組成模塊是VBA代碼的容器,通常一個模塊包含一個聲明區(qū)域和一個(或多個)子過程或函數(shù)過程。模塊的聲明區(qū)域用來定義變量、常量、自定義類型和外部過程等。Sub過程(子過程)執(zhí)行一系列操作,無返回值。定義格式如下:[Private|Public][Static]Sub過程名(

[形參表])

語句序列[ExitSub]語句序列EndSubVBA提供一個關(guān)鍵字Call調(diào)用該過程。此外,也可以使用過程名來調(diào)用該子過程。7.1.1模塊簡介3.模塊的組成模塊是VBA代碼的容器,通常一個模塊包含一個聲明區(qū)域和一個(或多個)子過程或函數(shù)過程。模塊的聲明區(qū)域用來定義變量、常量、自定義類型和外部過程等。Function過程(函數(shù)過程)執(zhí)行一系列操作,有返回值。定義格式如下:[Private|Public][Static]Function

函數(shù)名([形參表])[As類型]

語句列

[函數(shù)名=返回值][ExitFunction]

語句列

[Return返回值]EndFunction函數(shù)過程需要用直接引用函數(shù)過程名調(diào)用。7.1.1模塊簡介4.宏與模塊Access能夠自動將宏轉(zhuǎn)換為VBA的事件過程或模塊,這些事件過程或模塊的執(zhí)行結(jié)果與宏操作的結(jié)果相同??梢赞D(zhuǎn)換窗體(或報表)中的宏,也可以轉(zhuǎn)換不附加于特定窗體(或報表)的全局宏。將宏轉(zhuǎn)換為VBA代碼的操作步驟如下:例1、將名為“操作序列的獨(dú)立宏”轉(zhuǎn)換為VBA程序代碼模塊。(1)在Access數(shù)據(jù)庫窗口中,右鍵單擊宏對象“操作序列的獨(dú)立宏”,在彈出的快捷菜單中單擊“設(shè)計視圖”命令,打開“宏設(shè)計視圖”。(2)單擊“宏工具”下的“設(shè)計”命令選項卡的“工具”組中的“將宏轉(zhuǎn)換為VisualBasic代碼”按鈕,打開“轉(zhuǎn)換宏”對話框。(3)單擊該對話框中的“轉(zhuǎn)換”按鈕,Access自動進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換完畢后,顯示“轉(zhuǎn)換完畢”消息對話框。(4)單擊該對話框中的“確定”按鈕,返回到該宏的“宏設(shè)計視圖”。在“導(dǎo)航窗格”上的“模塊”對象列表中,添加了名為“被轉(zhuǎn)換的宏-操作序列獨(dú)立宏”的模塊。(5)雙擊模塊“被轉(zhuǎn)換的宏-操作序列的獨(dú)立宏”,即可查看相應(yīng)代碼7.1.2VBA程序設(shè)計概述

VBA(VisualBasicforApplication)是具有面向?qū)ο筇匦院涂梢暬幊汰h(huán)境,語法與VisualBasic兼容是其子集。Access利用VBA語言編寫代碼,可以實現(xiàn)用其他對象無法完成的功能,使Access數(shù)據(jù)庫功能自動化,以進(jìn)一步實現(xiàn)數(shù)據(jù)的收集、整理、分析和共享。對象屬性事件方法7.1.2VBA程序設(shè)計概述1.對象對象是面向?qū)ο蟪绦蛟O(shè)計方法中最基本的概念。在Access中任何可操作的實體是對象,如表、查詢、窗體、報表、宏、文本框、命令按鈕等都可視為對象。每個對象均有名稱,稱為對象名。每個對象都有屬性、事件、方法等。對象名必須符合Access的命名規(guī)則:窗體、報表、字段等對象的名稱長度不能超過64個字符,控件對象名稱不能超過255個字符。7.1.2VBA程序設(shè)計概述2.屬性屬性是指每一個對象所具有的特征和狀態(tài)。不同類別的對象具有不同的屬性,同類別對象不同的實例,屬性值不同。在面向?qū)ο蟮某绦蛟O(shè)計中,既可以用屬性窗口設(shè)置對象的屬性,也可以用代碼設(shè)置對象的屬性,前者是屬性的靜態(tài)設(shè)置,后者是屬性的動態(tài)設(shè)置。屬性設(shè)置的格式:對象名.屬性名=屬性值Comd1.forecolor=255'設(shè)置按鈕Comd1的前景色為紅色Label1.caption=“學(xué)生成績表“

'設(shè)置標(biāo)簽Label1的標(biāo)題為“學(xué)生成績表”7.1.2VBA程序設(shè)計概述3.事件及事件過程事件是Access窗體或報表及其控件等對象可以識別的動作,是對象對外部操作的響應(yīng)。事件是預(yù)先定義的特定的操作。不同的對象能夠識別不同的事件。Access中的事件主要有:鍵盤事件、鼠標(biāo)事件、窗口事件、對象事件、操作事件等。1)鍵盤事件鍵盤事件是操作鍵盤所觸發(fā)的事件,如“按下鍵”(KeyDown)、“釋放鍵”(KeyUp)和“擊鍵”(KeyPress)。2)鼠標(biāo)事件鼠標(biāo)事件是操作鼠標(biāo)所觸發(fā)的事件。鼠標(biāo)事件是應(yīng)用最廣泛的事件,特別是“單擊(Click)、“雙擊”(DblClick)、“鼠標(biāo)移動”(MouseMove)、“鼠標(biāo)按下”(MouseDown)、“鼠標(biāo)釋放”(MouseUp)等。3)窗口事件窗口事件是操作窗口所引起的事件。常用的窗口事件有:“打開”(Open)、“加載”(Load)、“激活”(Activate)、“卸載”(Unload)、“關(guān)閉”(Close)等。4)對象事件對象事件通常是指選擇對象操作時所引起的事件。常用的對象事件有“獲得焦點”(GetFocus)、“失去焦點”(LostFocus)等。5)操作事件操作事件是指與操作數(shù)據(jù)有關(guān)的事件。常用的操作有“刪除”(Delete)、“插入前”(BeforeInsert)、“插入后”(AfterInsert)等。7.1.2VBA程序設(shè)計概述事件驅(qū)動是面向?qū)ο缶幊毯兔嫦蜻^程編程之間的重要區(qū)別,在視窗操作系統(tǒng)中,用戶在操作系統(tǒng)下的各個動作都可以看做是激發(fā)了某個事件,比如單擊某個按鈕,就相當(dāng)于激發(fā)了該按鈕的單擊事件。Access數(shù)據(jù)庫系統(tǒng)可以通過兩種方式來處理窗體、報表或控件的響應(yīng):使用宏對象編寫VBA代碼完成指定操作,這樣的代碼稱為事件響應(yīng)代碼或事件過程。事件過程是事件處理程序,與事件一一對應(yīng)。它是為響應(yīng)由用戶或程序代碼引發(fā)的事件或由系統(tǒng)觸發(fā)的事件而運(yùn)行的過程。過程包含一系列的VBA語句,用以執(zhí)行操作或計算值。PrivateSub對象名_事件名()事件過程VBA程序代碼EndSub7.1.2VBA程序設(shè)計概述4.方法方法是對象可以執(zhí)行的行為。每個對象都有自己的若干方法,從而構(gòu)成該對象的方法集??梢园逊椒ɡ斫鉃閷ο蟮膬?nèi)部函數(shù),用來完成該對象的某種特定的功能。[對象名.]方法[(參數(shù)名表)]說明:方括號內(nèi)的內(nèi)容是可選的。例2、將光標(biāo)插入點定位于Text0文本框內(nèi)。分析:引用SetFocus方法實現(xiàn):Text0.SetFocus7.1.2VBA程序設(shè)計概述Access的編程界面稱為VBE(VisualBasicEditor),它以VisualBasic編程環(huán)境的布局為基礎(chǔ),提供了集成的開發(fā)環(huán)境。1.進(jìn)入VBE編程環(huán)境2.認(rèn)識VBE窗口標(biāo)準(zhǔn)工具欄工程資源管理器屬性窗口代碼窗口立即窗口3.簡單程序?qū)嵗?.1.3模塊的編程界面VBEAccess的編程界面稱為VBE(VisualBasicEditor),它以VisualBasic編程環(huán)境的布局為基礎(chǔ),提供了集成的開發(fā)環(huán)境。1.進(jìn)入VBE編程環(huán)境2.認(rèn)識VBE窗口標(biāo)準(zhǔn)工具欄工程資源管理器屬性窗口代碼窗口立即窗口3.簡單程序?qū)嵗齈art.02VisualBasic.NETVBA程序設(shè)計基礎(chǔ)7.2.1數(shù)據(jù)類型數(shù)據(jù)類型決定了如何將數(shù)據(jù)存儲到計算機(jī)的內(nèi)存中。在VBA中不同類型的數(shù)據(jù)有不同的操作方式和不同的取值范圍。標(biāo)準(zhǔn)數(shù)據(jù)類型(系統(tǒng)定義)自定義數(shù)據(jù)類型數(shù)據(jù)類型關(guān)鍵字類型符所占字節(jié)數(shù)范圍字節(jié)型Byte無1字節(jié)0~255布爾型Boolean無2字節(jié)True或False整型Integer%2字節(jié)-32768~32767長整型Long&4字節(jié)-2147483648~2147483647單精度Single!4字節(jié)負(fù)數(shù):-3.402823E+38~-1.401298E-45正數(shù):1.401298E-45~3.402823E+38雙精度Double#8字節(jié)負(fù)數(shù):-1.79769313486232E+308~-4.94065645841247E-324正數(shù):4.94065645841247E-324~1.79769313486232E+308貨幣型Currency

8字節(jié)-922337203685477.5808~922337203685477.5807日期型Date無8字節(jié)100年1月1日~9999年12月31日字符型String&與串長有關(guān)0~65535變體型Variant無根據(jù)分配確定無信息7.2.2變量與常量變量和常量都是程序中數(shù)據(jù)的兩種表達(dá)形式。變量中存儲的數(shù)據(jù)可以改變;而常量的值始終保持不變,即不允許再對符號常量賦值。PrivateSubButton1_Click()DimrAsSingleDimsAsSingleConstpiAsSingle=3.14r=InputBox("請輸入半徑?")s=pi*r^2MsgBox(“圓的半徑是”

&r&“,?面積y是"

&s)EndSub聲明的變量0.0r0.0s3.14pi聲明符號常量2直接常量內(nèi)存空間中。。。1.03.147.2.2變量與常量1.常量常量是指在程序運(yùn)行過程中其值始終保持不變的量,即數(shù)據(jù)本身。VBA的常量包括:直接常量、符號常量、內(nèi)部常量。1)直接常量直接常量是以數(shù)值或字符等形式直接出現(xiàn)的常量。根據(jù)數(shù)據(jù)類型的不同,直接常量可以分為數(shù)值型常量(Numeric)、字符型常量(String)、日期/時間型常量(Date)和邏輯型常量(Boolean)。其中,數(shù)值型常量又可以分為整型(Integer)、長整型(Long)、單精度浮點型(Single)、雙精度浮點型(Double)、貨幣型(Currency)和字節(jié)型(Byte)。數(shù)值型常量:-34、3.14159、1.23E+5字符型常量:"中原工學(xué)院2013級新生"日期型常量:#2022-11-4#布爾型常量:True和False7.2.2變量與常量2)符號常量符號常量是指用一個標(biāo)識符代表一個具體的常量值。使用符號常量的目的是提高代碼可讀性,以及批量修改數(shù)據(jù)。符號常量使用Const語句進(jìn)行聲明。語法格式為:Const

常量名[As數(shù)據(jù)類型]=表達(dá)式ConstPIAsSingle=3.14Constnumber1%=10說明:(1)在常量聲明的同時賦值。(2)Const聲明的常量在程序運(yùn)行過程中不能被重新賦值。(3)聲明符號常量時,可以在常量名后加上類型說明符。(4)在程序中引用符號常量時,通常省略類型說明符。7.2.2變量與常量3)內(nèi)部常量內(nèi)部常量是Access內(nèi)部定義的常量。所有內(nèi)部常量都可以在宏或VBA代碼中使用。通常,內(nèi)部常量通過前兩個字母來指明定義該常量的對象庫。以”ac”代表Access常量,以”vb”代表VBA的常量。7.2.2變量與常量2.變量變量是指在程序運(yùn)行過程中其值可以改變的量,通常使用變量存儲及引用數(shù)據(jù)。1)變量的命名規(guī)則為了區(qū)別存儲著不同數(shù)據(jù)的變量,需要對變量命名。在VisualBasic中,變量的命名要遵循下面的規(guī)則:變量名必須以英文字母(或漢字)開頭,由字母、數(shù)字和下劃線組成。不能在變量名中出現(xiàn)句號、空格或者類型聲明字符:!、#、@、$、%、&等。組成變量名的字符數(shù)不得超過255個字符,且變量名不區(qū)分大小寫。變量名在有效的范圍內(nèi)必須是唯一的。變量名不能是VBA的關(guān)鍵字、對象名和屬性名。7.2.2變量與常量2)變量的聲明變量一般遵循先聲明后使用的原則。聲明變量一是指定變量的數(shù)據(jù)類型,二是指定變量的使用范圍。通常使用Dim語句來聲明一個變量,其格式為:Dim

變量名[As類型]其中:變量名:用戶定義的標(biāo)識符,應(yīng)遵循變量的命名規(guī)則。As類型:可選項,其中“類型”用來定義被聲明變量的數(shù)據(jù)類型或者對象類型。變量的數(shù)據(jù)類型可以是VBA提供的各種標(biāo)準(zhǔn)類型名稱,也可以是用戶自定義類型。例如:Dimnumber1AsInteger'把number1定義為整型變量DimxmAsString'把xm定義為字符串型變量當(dāng)省略As子句時,系統(tǒng)默認(rèn)變量為可變類型。7.2.2變量與常量2)變量的聲明說明:(1)使用Dim語句說明一個變量后,VBA自動將變量初始化,將數(shù)值型的變量賦初值為0,將字符串型的變量賦初值為空串。(2)除了可以用As子句說明變量的類型外,還可以把類型符放在變量名的尾部來標(biāo)識不同類型的變量。例如:Dimnumber1%'把number1定義為整型變量Dimxm$ '把xm定義為字符串型變量(3)一個Dim語句可以定義多個變量,變量之間以逗號進(jìn)行分隔,例如:Dimnumber1AsInteger,xmAsString7.2.2變量與常量3)變量的隱式聲明在VBA中,使用一個變量之前并不一定非要先聲明這個變量。如果使用一個變量之前不事先經(jīng)過聲明,稱為隱式聲明。隱式聲明將給該變量賦予缺省的類型和值。例如:number1=5'number1為整型變量xm="王曉紅"'xm為字符型變量使用隱式聲明雖然很方便,但是如果把變量名拼錯了的話,會導(dǎo)致一個難以查找的錯誤。4)變量的顯式聲明為了避免寫錯變量名引起的麻煩,可以要求使用變量前必須先必須進(jìn)行聲明。在模塊頂部的聲明部分加入語句:OptionExplicit在VBE環(huán)境中進(jìn)行設(shè)置Access將自動在數(shù)據(jù)庫所有的新模塊中的聲明部分生成一個OptionExplicit語句。7.2.3運(yùn)算符在VBA編程語言中,提供許多運(yùn)算符來完成各種形式的運(yùn)算和處理。根據(jù)參與運(yùn)算的數(shù)據(jù)類型的不同,可以分成4種類型的運(yùn)算符:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符和連接運(yùn)算符。1.算術(shù)運(yùn)算符算術(shù)運(yùn)算符用于算術(shù)運(yùn)算,VBA提供了8種基本的算術(shù)運(yùn)算符運(yùn)算符運(yùn)算關(guān)系優(yōu)先級表達(dá)式例子^指數(shù)運(yùn)算12^4結(jié)果為16-取負(fù)2-5結(jié)果為-5,-(-5)結(jié)果為5*乘法34*5結(jié)果為20/浮點除法310/4結(jié)果為2.5\整數(shù)除法410\4結(jié)果為2,11.5\4結(jié)果為3Mod取模運(yùn)算54Mod3結(jié)果為1,-12.7Mod5結(jié)果為-3+加法運(yùn)算64+16\3結(jié)果為9,6+8Mod-5結(jié)果為9-減法運(yùn)算64*3+2^3結(jié)果為20s=pi*r^2運(yùn)算符運(yùn)算符和數(shù)據(jù)(常量/變量)組成一個表達(dá)式,表達(dá)一個運(yùn)算關(guān)系7.2.3運(yùn)算符2.關(guān)系運(yùn)算符關(guān)系運(yùn)算符用于關(guān)系運(yùn)算,關(guān)系表達(dá)式的運(yùn)算結(jié)果為邏輯值。若關(guān)系成立,結(jié)果為TRUE,若關(guān)系不成立,結(jié)果為FALSE。運(yùn)算符名

稱例

子說

明<

小于"3"<5值為:True,強(qiáng)制轉(zhuǎn)換為數(shù)值型<=小于或等于3<=5值為:True>

大于0>(1>0)值為:True,強(qiáng)制轉(zhuǎn)換為數(shù)值型>=大于或等于"aa">="ab"值為:False=等于1=True值為:False,強(qiáng)制轉(zhuǎn)換為數(shù)值型<>

不等于1<>True值為:True,強(qiáng)制轉(zhuǎn)換為數(shù)值型7.2.3運(yùn)算符3.邏輯運(yùn)算符邏輯運(yùn)算符的操作數(shù)都是邏輯值(True/False),結(jié)果也是邏輯值。邏輯運(yùn)算符可以表示復(fù)雜條件。運(yùn)算符名稱例

子說

明And與(5>6)And(2<4)值為:False,兩個表達(dá)式的值均為真,結(jié)果才為真,否則為假Or或(5>6)Or(2<4)值為:True,兩個表達(dá)式中只要有一個值為真,結(jié)果就為真,只有兩個表達(dá)式的值均為假,結(jié)果才為假Not非Not(1>0)值為:False,由真變假或由假變真,進(jìn)行取“反”操作7.2.3運(yùn)算符5)連接運(yùn)算符連接運(yùn)算用于將兩個字符串連接生成一個新字符串。用來進(jìn)行連接的運(yùn)算符有兩個:”&”和”+”。&運(yùn)算符用來強(qiáng)制進(jìn)行兩個字符串的連接,對于非字符串類型的數(shù)據(jù),先將其轉(zhuǎn)換為字符串類型,再進(jìn)行連接運(yùn)算。+運(yùn)算符如果兩個表達(dá)式都為字符串,則將兩個字符串連接;如果一個是字符串而另一個是數(shù)值型數(shù)據(jù),則先將字符串轉(zhuǎn)換為數(shù)值,再進(jìn)行加法運(yùn)算。如果該字符串無法轉(zhuǎn)換為數(shù)值型數(shù)據(jù),則出現(xiàn)錯誤。"你好!"&"朋友" '結(jié)果為"你好!朋友""你好!"+"朋友" '結(jié)果為"你好!朋友""111"&"222" '結(jié)果為"111222""111"+"222" '結(jié)果為111222"111"&222 '結(jié)果為"111222"111&222 '結(jié)果為"111222"111+"aaa" '提示出錯信息 7.2.3運(yùn)算符4.運(yùn)算符的優(yōu)先順序當(dāng)一個表達(dá)式中存在多種操作時,VBA會按一定的順序進(jìn)行求值,稱這個順序為運(yùn)算符的優(yōu)先順序。算術(shù)運(yùn)算符連接運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符賦值運(yùn)算符和復(fù)合賦值運(yùn)算符說明:(1)同級運(yùn)算按照它們從左到右出現(xiàn)的順序進(jìn)行計算。(2)可以用括號改變優(yōu)先順序,強(qiáng)制表達(dá)式的某些部分優(yōu)先運(yùn)行。(3)括號內(nèi)的運(yùn)算總是優(yōu)先于括號外的運(yùn)算,在括號之內(nèi),運(yùn)算符的優(yōu)先順序不變。7.2.4VBA的常用函數(shù)在VBA中,函數(shù)完成特定功能。自定義函數(shù)[Private|Public][Static]Function

函數(shù)名([形參表])[As類型]

語句列

[函數(shù)名=返回值][ExitFunction]

語句列

[Return返回值]EndFunction標(biāo)準(zhǔn)函數(shù)標(biāo)準(zhǔn)函數(shù)一般用于表達(dá)式中,有的能和語句一樣使用。標(biāo)準(zhǔn)函數(shù)的調(diào)用格式:函數(shù)名([<參數(shù)1>][,<參數(shù)2>]…[,<參數(shù)n>])其中,函數(shù)名必不可少,參數(shù)可以是一個或多個常量、變量或表達(dá)式,個別函數(shù)是無參函數(shù)。每個函數(shù)被調(diào)用時,都會返回一個值。函數(shù)的參數(shù)和返回值都有一個特定的數(shù)據(jù)類型相對應(yīng)。7.2.4VBA的常用函數(shù)1.?dāng)?shù)學(xué)函數(shù)函數(shù)名功能示例Sin(x)返回x的正弦值,x為弧度Sin(30*3.141593/180)結(jié)果為0.50000005000000569Cos(x)返回x的余弦值,x為弧度Cos(3.141593/4)結(jié)果為0.70710671994929331Tan(x)返回x的正切值,x為弧度Tan(0)結(jié)果為0Atn(x)返回x的反正切值,x為弧度Atn(0)結(jié)果為0Sqr(x)返回x的平方根Sqr(25)結(jié)果為5Abs(x)返回x的絕對值A(chǔ)bs(-3.3)結(jié)果為3.3Sign(x)判斷x的符號,若x>0,返回值為1;若x<0,返回值為-1;若x=0,返回值為0Sgn(6)結(jié)果為1Exp(x)返回以e為底的指數(shù)(ex)Exp(1)結(jié)果為2.7182818284590451Log(x)返回x的自然對數(shù)(lnx)Log(1)結(jié)果為0Round(x)返回x進(jìn)行四舍五入取整Round(6.5)結(jié)果為6Int(x)返回不大于x的最大整數(shù)Int(3.25)結(jié)果為3,Int(-3.25)結(jié)果為-4Fix(x)返回x的整數(shù)部分Fix(3.25)結(jié)果為3,F(xiàn)ix(-3.25)結(jié)果為-3Rnd[(x)]產(chǎn)生一個(0,1)范圍內(nèi)的隨機(jī)數(shù)

先使用無參數(shù)的Randomize語句初始化隨機(jī)數(shù)生成器,以產(chǎn)生不同的隨機(jī)數(shù)序列,每次調(diào)用Rnd即可得到這個隨機(jī)數(shù)序列中的一個。Rnd函數(shù)產(chǎn)生的隨機(jī)數(shù)為單精度數(shù),若要產(chǎn)生隨機(jī)整數(shù),可利用取整函數(shù)來實現(xiàn)。要產(chǎn)生區(qū)間[m,n]之間的隨機(jī)整數(shù),可用如下表達(dá)式來實現(xiàn)。Int(Rnd()*(n-m+1)+m))7.2.4VBA的常用函數(shù)2.字符串函數(shù)字符串函數(shù)完成字符串的處理功能。函數(shù)名功能示例LTrim(s)刪除字符串s左邊的空格LTrim("AB")結(jié)果為"AB"RTrim(s)刪除字符串s右邊的空格RTrim("AB")結(jié)果為"AB"Trim(s)刪除字符串s兩邊的空格Trim("AB")結(jié)果為"AB"Left(s,n)截取字符串s左邊的n個字符,生成子串Left("ABC123",4)結(jié)果為"ABC1"Right(s,n)截取字符串s右邊的n個字符,生成子串Right("ABC123",4)結(jié)果為"C123"Mid(s,m,n)從字符串s的第m個字符位置開始,取出n個字符Mid("ABC123",2,3)結(jié)果為"BC1"Len(s)求字符串s的長度(字符數(shù))Len("人數(shù)1234")結(jié)果為6Space(n)返回由n個空格組成的字符串"A"+Space(3)+"B"結(jié)果為"AB"Ucase(s)將字符串s中小寫字母轉(zhuǎn)換為大寫字母Ucase("Hello")結(jié)果為"HELLO"Lcase(s)將字符串s中大寫字母轉(zhuǎn)換為小寫字母Lcase("Hello")結(jié)果為"hello"InStr(s1,s2)檢索字符串s2在字符串s1中最早出現(xiàn)的位置InStr("ABC123","123")結(jié)果為47.2.4VBA的常用函數(shù)3.日期與時間函數(shù)函數(shù)名功能示例Date()返回系統(tǒng)當(dāng)前的日期date()結(jié)果為2023/10/24Time()返回系統(tǒng)當(dāng)前的時間time()結(jié)果為13:45:05Now[()]返回系統(tǒng)當(dāng)前的日期和時間now()結(jié)果為2023/10/2413:45:36Hour(<時間表達(dá)式>)返回時間表達(dá)式小時的整數(shù)Hour(#8:45:15#)結(jié)果為8Minute(<時間表達(dá)式>)返回時間中的分鐘的整數(shù)Minute(#8:45:15#)結(jié)果為45Second(<時間表達(dá)式>)返回時間中的秒的整數(shù)Second(#8:45:15#)結(jié)果為15Year(<日期表達(dá)式>)返回日期中的年份數(shù)Year(#2022-11-4#)結(jié)果為2022Month(<日期表達(dá)式>)返回日期中的月份數(shù)Month(#2022-11-4#)結(jié)果為11Day(<日期表達(dá)式>)返回日期中的日期數(shù)Day(#2022-11-4#)結(jié)果為4DateSerial(表達(dá)式1,表達(dá)式2,表達(dá)式3)由表達(dá)式1為年,表達(dá)式2為月,表達(dá)式3為日而組成的日期值DateSerial(2022,11,4)結(jié)果為#2022/11/4#7.2.4VBA的常用函數(shù)4.類型轉(zhuǎn)換函數(shù)類型轉(zhuǎn)換函數(shù)的功能是將一種特定的數(shù)據(jù)類型轉(zhuǎn)換成指定的數(shù)據(jù)類型。函數(shù)名功能示例Val(<字符串表達(dá)式>)將字符串字符串表達(dá)式轉(zhuǎn)換成對應(yīng)的數(shù)值Val("-123.45")結(jié)果為-123.45Str(數(shù)值表達(dá)式>)將數(shù)值表達(dá)式轉(zhuǎn)換成對應(yīng)的字符串Str(123.45)結(jié)果為"123.45"Chr(n)將ASCII碼值n轉(zhuǎn)換成對應(yīng)的字符Chr(65)結(jié)果為"A"Asc(s)將字符串s中的首個字符轉(zhuǎn)換為ASCII碼值A(chǔ)sc("BCD")結(jié)果為667.2.4VBA的常用函數(shù)5.檢查函數(shù)檢查函數(shù)返回邏輯值,判斷檢查條件是否成立。函數(shù)名功能示例IsDate(表達(dá)式)判斷表達(dá)式是否為日期,返回Boolean值IsDate(#2013-10-10#)結(jié)果為TrueIsEmpty(變量)判斷變量是否已被初始化。若已經(jīng)初始化,返回0;否則,返回1。

IsNumeric(表達(dá)式)判斷表達(dá)式是否為數(shù)值型數(shù)據(jù),返回Boolean值IsNumeric("北京")結(jié)果為FalseIsNull(表達(dá)式)判斷表達(dá)式是否不包含任何有效數(shù)據(jù)

Part.03VisualBasic.NETVBA常用語句7.3.1語句的書寫規(guī)則VBA程序是由若干條VBA語句構(gòu)成。一條VBA語句是能夠完成某項操作的一個完整命令。在編寫程序代碼時要遵循一定的規(guī)則,這樣寫出的程序既能被VBA正確地識別,又能增加程序的可讀性。(1)一條語句寫在一行上,如果將多條語句寫在一行上,語句之間要用英文的冒號”:”隔開。(2)當(dāng)一條語句較長而且一行寫不下時,可以使用續(xù)行功能,用續(xù)行符”_”將較長的語句分為兩行或多行。在使用續(xù)行符時,在它前面至少要加一個空格,并且續(xù)行符只能出現(xiàn)在行尾。(3)在VBA代碼中,不區(qū)分字母的大小寫。(4)當(dāng)輸入一行語句并按【Enter】鍵后,該行代碼若以紅色文本顯示,代表可能顯示一個出錯信息,則必須找出語句中的錯誤并更正它。7.3.2注釋語句注釋語句用于對程序或語句的功能給出解釋或說明,以增加程序代碼的可讀性。在VBA中,注釋語句可以添加到程序模塊的任何位置,一般被顯示成綠色文本。注釋語句有以下兩種添加方式:Rem語句,格式如下:Rem

注釋內(nèi)容這種注釋語句需要單獨(dú)占一行寫。若寫在某個語句之后,則需要用冒號“:”隔開。‘注釋內(nèi)容這種注釋語句可以直接放在其他語句之后而無需分隔符。例如:Rem

聲明三個變量DimrAsSingle,SAsSingle,VAsSingleS=pi*r^2 '計算圓的面積V=4/3*pi*r^3:Rem計算球的體積刪除注釋塊設(shè)置注釋塊7.3.3VBA賦值語句賦值語句用于將指定的值賦給某個變量(或?qū)ο蟮哪硞€屬性)。賦值語句的格式為:[Let]名稱=表達(dá)式說明:Let是可選項,表示賦值,通常省略。在VBA編程中使用ADO對象操作數(shù)據(jù)庫時,對ADO對象賦值需用Set關(guān)鍵字。名稱:變量或?qū)傩缘拿Q。表達(dá)式:可以是算術(shù)表達(dá)式、字符串表達(dá)式、關(guān)系型表達(dá)式或邏輯表達(dá)式。計算所得的表達(dá)式值將賦給賦值號”=”左邊的變量或?qū)ο蟮膶傩浴5潜仨氉⒁?,賦值號兩邊的數(shù)據(jù)類型必須一致,否則會出現(xiàn)”類型不匹配”的錯誤。賦值語句是先計算(表達(dá)式),然后再賦值。例如:N=-4+3*7MOD5^(2\4) '把右端表達(dá)式的值-4賦給變量NLabel1.Caption="班級名稱" '把字符串“班級名稱”賦給標(biāo)簽Label1的Caption屬性。7.3.4VBA輸入/輸出語句雖然VBA程序設(shè)計采用了事件驅(qū)動的編程機(jī)制,將一個程序分成幾個較小的事件過程,但就某一個事件過程內(nèi)的程序流程來看,仍然采用結(jié)構(gòu)化的程序設(shè)計方法,由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu)組成。Input輸入Process操作Output輸出題目缺失的數(shù)據(jù)(或計算)結(jié)果補(bǔ)充題目缺失數(shù)據(jù)將結(jié)果輸出到顯示器圖程序基本設(shè)計模塊IPO7.3.4VBA輸入/輸出語句對于一些簡單信息的輸入和輸出,可以使用對話框?qū)崿F(xiàn)用戶與應(yīng)用程序之間交換信息。VBA提供的內(nèi)部對話框有兩種:信息對話框和輸入對話框,分別由函數(shù)InputBox和MsgBox實現(xiàn)。1.InputBox函數(shù)InputBox函數(shù)的功能是顯示一個能接收用戶輸入的對話框,并返回用戶在此對話框中輸入的信息。其語法格式為:InputBox(prompt[,title][,default][,xpos][,ypos])說明:prompt:必選參數(shù),用于顯示對話框中的信息,形式為字符串表達(dá)式。title:可選參數(shù),指定對話框標(biāo)題欄中顯示的信息,形式為字符串表達(dá)式。如果省略title,系統(tǒng)會把應(yīng)用程序名放入標(biāo)題欄中。default:可選參數(shù),指定顯示在對話框中文本框內(nèi)的內(nèi)容,形式為字符串表達(dá)式,其作用是在沒有其它輸入時作為函數(shù)返回值的缺省值。如果省略default,則文本框為空。xpos和ypos:都是可選參數(shù),指定對話框的左邊與屏幕左邊的水平距離和對話框的上邊與屏幕上邊的距離,形式是數(shù)值表達(dá)式。如果省略Xpos,則對話框會在水平方向居中。如果省略Ypos,則對話框被放置在屏幕垂直方向距下邊大約三分之一的位置。如果用戶單擊”O(jiān)K”按鈕或按下【Enter】鍵,則InputBox函數(shù)返回文本框中的內(nèi)容。如果用戶單擊”Cancel”按鈕,則此函數(shù)返回一個長度為零的字符串("")。注意:如果要省略某些位置參數(shù),則必須加入相應(yīng)的逗號分界符。例如:DimsAsStrings=InputBox("請輸入你的年齡:","輸入年齡","18",1000,200)7.3.4VBA輸入/輸出語句2.MsgBox函數(shù)該函數(shù)的功能是打開一個消息對話框,等待用戶單擊按鈕,然后返回一個整數(shù),指示用戶單擊了哪個按鈕。MsgBox函數(shù)調(diào)用格式如下:MsgBox(prompt[,buttons][,title])說明:prompt:必填參數(shù),用于顯示對話框中的消息,形式為字符串表達(dá)式。。(跟前面介紹inputbox函數(shù)的風(fēng)格不一樣啦)buttons:可選參數(shù),指定對話框顯示的按鈕數(shù)目及按鈕類型,使用的圖標(biāo)樣式,默認(rèn)按鈕的標(biāo)識以及消息框的樣式等,形式為整型表達(dá)式。如果省略buttons,則默認(rèn)值為0。分組常量值說明按鈕類型與數(shù)目0vbOKOnly確定按鈕1vbOKCancel確定和取消按鈕2vbAbortRetryIgnore終止、重試和忽略按鈕3vbYesNoCancel是、否和取消按鈕4vbYesNo是和否按鈕5vbRetryCancel重試和取消按鈕圖標(biāo)樣式16vbCritical停止圖標(biāo)32vbExclamation感嘆號(?。﹫D標(biāo)48vbQuestion問號(?)圖標(biāo)64vbInformation信息圖標(biāo)默認(rèn)按鈕0vbDefaultButton1指定默認(rèn)按鈕為第一按鈕256vbDefaultButton2指定默認(rèn)按鈕為第二按鈕512vbDefaultButton3指定默認(rèn)按鈕為第三按鈕7.3.4VBA輸入/輸出語句2.MsgBox函數(shù)MsgBox(prompt[,buttons][,title])說明:title:可選參數(shù),用于指定對話框的標(biāo)題,形式為字符串表達(dá)式。如果省略本參數(shù),則將應(yīng)用程序名作為對話框的標(biāo)題。MsgBox函數(shù)調(diào)用時有函數(shù)返回值,返回的值指明了在對話框中選擇哪一個按鈕。如果省略了某些可選項,必須加入相應(yīng)的逗號分隔符。若不需要返回值,則可以使用MsgBox的命令形式:MsgBox信息內(nèi)容[,對話框類型[,對話框標(biāo)題]]【例】msg=MsgBox("請確認(rèn)輸入的數(shù)據(jù)是否正確!",3+48+0,"數(shù)據(jù)檢查")返回值常

量按

鈕1vbOK確定按鈕2vbCancel取消按鈕3vbAbort終止按鈕4vbRetry重試按鈕5vbIgnore忽略按鈕6vbYes是7vbNo否Part.04VisualBasic.NETVBA程序流程控制語句7.4.1順序結(jié)構(gòu)雖然VBA程序設(shè)計采用了事件驅(qū)動的編程機(jī)制,將一個程序分成幾個較小的事件過程,但就某一個事件過程內(nèi)的程序流程來看,仍然采用結(jié)構(gòu)化的程序設(shè)計方法,由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu)組成順序結(jié)構(gòu)是指程序的執(zhí)行總是按照語句出現(xiàn)的先后次序,自頂向下地順序執(zhí)行的一種線性流程結(jié)構(gòu),它是程序設(shè)計過程中最基本、最簡單的程序結(jié)構(gòu)。在該結(jié)構(gòu)中,各操作塊(簡稱塊,對應(yīng)于程序中的“程序段”)按照出現(xiàn)的先后順序依次執(zhí)行。它是任何程序的主體基本結(jié)構(gòu),即使在選擇結(jié)構(gòu)或循環(huán)結(jié)構(gòu)中,也常以順序結(jié)構(gòu)作為其子結(jié)構(gòu)?!纠坑嬎銏A面積,圓的半徑要求從鍵盤輸入到第一個文本框中,計算結(jié)果顯示在第二個文本框中,計算由命令按鈕控制。7.4.2選擇結(jié)構(gòu)在程序設(shè)計中經(jīng)常遇到需要判斷的問題,它需要根據(jù)不同的情況采取不同的解決問題的方法。在VBA中,能夠?qū)崿F(xiàn)選擇結(jié)構(gòu)的語句有以下3種:單行結(jié)構(gòu)If語句多行結(jié)構(gòu)If語句多分支控制結(jié)構(gòu)SelectCase語句7.4.2選擇結(jié)構(gòu)1.單行結(jié)構(gòu)If語句If<條件>Then語句1[Else

語句2]說明:<條件>是一個邏輯表達(dá)式,或表達(dá)式的數(shù)據(jù)類型可隱式轉(zhuǎn)換為Boolean類型。語句中的[Else語句2]部分可以省略,此時將語句2看作一個空操作,即不做任何處理。省略Else部分后,If語句的格式變?yōu)椋?/p>

If<條件>Then語句1語句1和語句2可以是一個語句,也可以是用冒號分隔的多個語句。例如:實現(xiàn)從x和y中選擇較大的一個加1后賦值給變量c。

Ifx>yThenx=x+1:c=xElsey=y+1:c=y單行結(jié)構(gòu)If語句一般不提倡編寫得太復(fù)雜。x>yx=x+1c=xy=y+1c=y7.4.2選擇結(jié)構(gòu)2.多行結(jié)構(gòu)If語句(塊結(jié)構(gòu)If語句)塊結(jié)構(gòu)If語句是將單行結(jié)構(gòu)If語句分成多行來書寫:If條件Then

語句塊1[Else

語句塊2]EndIf【例】根據(jù)下面公式,輸入x,計算y的值。7.4.2選擇結(jié)構(gòu)3.多分支選擇結(jié)構(gòu)If…Then…ElseIf當(dāng)要處理的問題有多個可能出現(xiàn)的情況時,必然需要提供多個分支。VBA提供的多分支選擇結(jié)構(gòu)的語法格式為:If<條件>1Then

語句塊1[ElseIf條件2Then

語句塊2……][Else

其他語句塊]EndIf條件1條件3條件2語句塊1語句塊2語句塊3其它語句塊7.4.2選擇結(jié)構(gòu)3.多分支選擇結(jié)構(gòu)If…Then…ElseIf【例】某百貨公司為了促銷,采用購物打折扣的優(yōu)惠辦法,每位顧客一次購物:(1)在1000元以上者,按九五折優(yōu)惠。(2)在2000元以上者,按九折優(yōu)惠。(3)在3000元以上者,按八五折優(yōu)惠。(4)在5000元以上者,按八折優(yōu)惠。編寫程序,輸入購物款數(shù),計算并輸出優(yōu)惠價。分析:設(shè)購物款數(shù)為x元,優(yōu)惠價為y元,優(yōu)惠付款公式為:7.4.2選擇結(jié)構(gòu)4.多分支選擇結(jié)構(gòu)SelectCase在實現(xiàn)多分支選擇時,除了使用帶有ElseIf子句的塊If語句,還可以采用VBA提供的SelectCase語句。SelectCase語句的語法格式為:SelectCase測試表達(dá)式

Case

表達(dá)式表1

語句塊1[Case

表達(dá)式表2

語句塊2……][CaseElse

其他語句塊]EndSelect7.4.2選擇結(jié)構(gòu)4.多分支選擇結(jié)構(gòu)SelectCase說明:(1)測試條件:必要參數(shù),形式為數(shù)值表達(dá)式或字符串表達(dá)式。(2)在Case子句中,“表達(dá)式表“為必要參數(shù),用來測試其中是否有值與“測試條件“相匹配。Case子句中的“表達(dá)式“是一個或多個表達(dá)式的列表。當(dāng)使用多個表達(dá)式的列表時,表達(dá)式與表達(dá)式之間要用逗號(,)隔開。形

式示

例說

明表達(dá)式Case100*a數(shù)值或字符串表達(dá)式表達(dá)式1To表達(dá)式2Case1000To2000Case"a"To"n"用來指定一個值范圍,較小的值要出現(xiàn)在To之前Is關(guān)系運(yùn)算表達(dá)式CaesIs<3000可以配合比較運(yùn)算符來指定一個數(shù)值范圍。如果沒有提供,則Is關(guān)鍵字會被自動插入7.4.2選擇結(jié)構(gòu)4.多分支選擇結(jié)構(gòu)SelectCase說明:(3)語句列:可選參數(shù),是一條或多條語句,當(dāng)“表達(dá)式表“中有值與“測試條件“相匹配時執(zhí)行。(4)CaseElse子句用于指明其他語句列,當(dāng)測試條件和所有的Case子句“表達(dá)式表”中的值都不匹配時,則會執(zhí)行這些語句。雖然不是必要的,但是在SelectCase區(qū)塊中,最好還是加上CaseElse語句來處理不可預(yù)見的測試條件值。如果沒有Case值匹配測試條件,而且也沒有CaseElse語句,則程序會從EndSelect之后的語句繼續(xù)執(zhí)行。【例】在上一例題中使用SelectCase語句來計算優(yōu)惠價。7.4.3循環(huán)結(jié)構(gòu)在程序中,經(jīng)常遇到對某一程序段需要重復(fù)執(zhí)行,這種被重復(fù)執(zhí)行的程序結(jié)構(gòu)叫循環(huán)結(jié)構(gòu),被重復(fù)執(zhí)行的程序段稱為循環(huán)體。VBA提供常用的循環(huán)結(jié)構(gòu):計數(shù)循環(huán)(For...Next循環(huán))Do循環(huán)(Do...Loop循環(huán))1.For...Next語句當(dāng)循環(huán)次數(shù)已知時,常常使用計數(shù)循環(huán)語句For...Next來實現(xiàn)循環(huán)。For...Next語法結(jié)構(gòu)如下:For

循環(huán)變量=初值To終值[Step步長]

語句塊1[ExitFor]

語句塊2Next[循環(huán)變量]【例】利用For...Next語句求1+2+3+…+100之和i=初值i<=終值循環(huán)體語句i=i+步長值7.4.3循環(huán)結(jié)構(gòu)2.Do…Loop語句Do…Loop語句根據(jù)給定條件成立與否決定是否執(zhí)行循環(huán)體內(nèi)的語句,有兩種語法形式。前測型循環(huán)結(jié)構(gòu):Do[While|Until條件]

語句塊1[ExitDo]

語句塊2Loop后測型循環(huán)結(jié)構(gòu):Do

語句塊1[ExitDo]

語句塊2Loop[While|Until條件]初始化變量測試條件循環(huán)體語句noyesnoyes7.4.3循環(huán)結(jié)構(gòu)【例】一張紙厚0.2毫米,假設(shè)其足夠大,問對折多少次高度能夠超過珠穆朗瑪峰8848米的高度?Part.05VisualBasic.NET數(shù)組7.5.1數(shù)組的概念是一種構(gòu)造的數(shù)據(jù)類型由一組相同數(shù)據(jù)類型的元素組成數(shù)組元素在內(nèi)存中占用一組連續(xù)的存儲單元用數(shù)組名標(biāo)志這一組數(shù)據(jù),用下標(biāo)指明元素在數(shù)組中的序號通常使用循環(huán)控制數(shù)組下標(biāo),對數(shù)組元素進(jìn)行操作900math901882573…7931intintintintintintmath230131Math(31)數(shù)組名和下標(biāo)唯一標(biāo)志一個數(shù)組元素下標(biāo):一組連續(xù)整數(shù)下標(biāo)下界下標(biāo)上界7.5.2數(shù)組的聲明Dim

數(shù)組名(下標(biāo)1上界[,下標(biāo)2上界,…])AS

數(shù)據(jù)類型Dimmath(31)asintegerConstnasinteger=19Dimfibonacci(n)asinterger ‘可以使用常量定義數(shù)組下標(biāo)上界Dima(3.5)asinterge ‘下標(biāo)必須是整數(shù),否則四舍五入取整數(shù)組下標(biāo)下界默認(rèn)值是0,但可以在模塊的聲明部分使用OptionBase語句進(jìn)行更改:OptionBase1此模塊中的所有數(shù)組下標(biāo)默認(rèn)從1開始。也可以使用To關(guān)鍵字來更改數(shù)組下標(biāo)下界:Dimtemp(1to15)asstring()數(shù)據(jù)類型數(shù)組的維數(shù)和數(shù)組元素的上/下屆(個數(shù))數(shù)組元素的數(shù)據(jù)類型數(shù)組的維數(shù)和數(shù)組元素的上/下屆(個數(shù))7.5.1數(shù)組的概念數(shù)組名稱與下標(biāo)規(guī)則如下:(1)數(shù)組的命名規(guī)則與簡單變量規(guī)則相同。(2)下標(biāo)必須是整數(shù),否則系統(tǒng)將四舍五入取整。(3)下標(biāo)必須用括號括起來。(4)在引用數(shù)組元素時,下標(biāo)可以是整型的常量、變量或表達(dá)式,還可以是一個整型的數(shù)組元素。(5)下標(biāo)的最大值和最小值分別被稱為數(shù)組的上界和下界,下標(biāo)是上、下界范圍內(nèi)的一組連續(xù)整數(shù)。引用數(shù)組元素時,不可超出數(shù)組聲明時的上、下界范圍。7.5.2數(shù)組的聲明下標(biāo)的個數(shù)決定了數(shù)組的維數(shù)。一維數(shù)組僅有一個下標(biāo),二維數(shù)組則有兩個下標(biāo),……,依此類推。二維數(shù)組可以對應(yīng)一張二維表。Dimfares(25,6)assingle三維數(shù)組可以這樣定義:Dimtemp1(10,3,4)asString7.5.2數(shù)組的聲明在聲明時指定維數(shù)和每一維上、下界的數(shù)組,稱為靜態(tài)數(shù)組。靜態(tài)數(shù)組元素的個數(shù)是固定的。但事先無法確定數(shù)組元素個數(shù)的情況下,需要使用動態(tài)數(shù)組,以在運(yùn)行時改變數(shù)組的大小。使用動態(tài)數(shù)組可以更加有效地利用內(nèi)存。聲明動態(tài)數(shù)組的方法與靜態(tài)數(shù)組的聲明方法類似,不同的是提供一個空維列表,建立一個空維數(shù)組:Dimtemp2()asString然后在過程中使用Redim語句重新定義數(shù)組大小:Redim

temp2(10)Redim語句只能在過程中使用,并且不能改變數(shù)組維數(shù)的個數(shù)以及數(shù)組的數(shù)據(jù)類型。每次執(zhí)行Redim語句,通常會自動把數(shù)組原有數(shù)據(jù)清空。如果希望保留數(shù)組中的數(shù)據(jù),需要使用Preserve關(guān)鍵字:Redimpreservetemp2(100)7.5.3數(shù)組的應(yīng)用【例】使用數(shù)組完成Fibonacci數(shù)列的前20項。分析:Fibonacci數(shù)列又稱黃金分割數(shù)列、兔子數(shù)列,指的是這樣的數(shù)列:1,1,2,3,5,8,13,…。Fibonacci數(shù)列第1、2項為初始化值1,從第三項開始值為其前兩項之和。【例】計算一個5*5方陣主對角線之和。分析:n*n方陣的主對角線為其左上角數(shù)(0,0)到右下角數(shù)(n-1,n-1)的對角線,副對角線為其右上角數(shù)(0,n-1)到左下角數(shù)(n-1,0)的對角線。提示:數(shù)組元素的初始值在[1,100]隨機(jī)得到。主對角線數(shù)之和即所有數(shù)組元素arrayA(intI,intI)之和。Part.06VisualBasic.NET過程的創(chuàng)建和調(diào)用7.6.1Sub子過程一個模塊中通常包含一個或多個過程,模塊功能的實現(xiàn)就是通過執(zhí)行具體的過程來完成的,本節(jié)將通過實例介紹過程創(chuàng)建、過程調(diào)用和參數(shù)傳遞的使用。VBA程序中的過程分為兩種類型:Sub子過程和Function函數(shù)過程。1.Sub子過程的定義[Private|Public][Static]Sub過程名([形參表])

語句序列

[ExitSub]語句序列EndSub說明:(1)Private|Public,如果使用Public,表示過程在標(biāo)準(zhǔn)模塊和類模塊之外可以訪問;如果使用Private,則過程僅能在標(biāo)準(zhǔn)模塊和類模塊的內(nèi)部訪問;如果用Static,則該過程中所有局部變量的存儲空間只分配一次,且這些變量的值在整個程序運(yùn)行期間都被保留下來。(2)“形參表”描述過程的需求,形式類似于聲明變量。它指明了從主調(diào)過程傳遞給被調(diào)過程變量的個數(shù)和類型,各變量名之間用逗號分隔。形參表中的語法為:[ByVal|ByRef]變量名[()][As類型]其中:ByVal表示該參數(shù)按值傳遞,ByRef(默認(rèn)值)表示該參數(shù)按地址傳遞。“變量名”代表參數(shù)變量的名稱,后面帶有一對圓括號表示形參為數(shù)組?!癆s類型”表示參數(shù)變量或數(shù)組的數(shù)據(jù)類型。(3)在過程內(nèi)部,不能再定義過程,但可以調(diào)用其他Sub過程或Function過程。7.6.1Sub子過程2.Sub子過程的創(chuàng)建Sub子過程的創(chuàng)建有以下兩種方法:在標(biāo)準(zhǔn)模塊或類模塊的代碼窗口直接輸入使用“添加過程”對話框使用“添加過程”對話框建立過程的方法為:(1)在數(shù)據(jù)庫窗口,雙擊模塊3打開該模塊。(2)選擇“插入”菜單中的“過程”命令,打開“添加過程”對話框。(3)在“名稱”文本框中輸入過程名swap。從“類型”組中選擇子過程類型(Sub),從“范圍”組中選擇公有范圍(Public)。(4)單擊“確定”按鈕,建立一個Sub過程。7.6.1Sub子過程3.Sub子過程的調(diào)用Sub子過程的調(diào)用是通過一條語句實現(xiàn)的,有以下兩種形式。使用Call語句:Call過程名([實參表])直接使用過程名:過程名[<實參表>]【例】從鍵盤任意輸入3個數(shù),按從大到小的順序輸出。分析:由例7.5可知,排序算法涉及到數(shù)據(jù)的交換,因此可以利用交換兩個變量值的Sub子過程swap,來解決該問題。7.6.2Function函數(shù)過程1.Function過程的定義Function過程與Sub過程不同的是Function過程需要向主調(diào)用過程返回一個值。[Private|Public][Static]Function函數(shù)名([形參表])[As類型]

語句列

[函數(shù)名=返回值][ExitFunction]

語句列

[Return返回值]EndFunction說明:(1)“As類型”指定Function過程返回值的類型,可以是Integer、Long、Single、Double、Currency、String或Boolean等。默認(rèn)是Variant。(2)“返回值”是一個與“As類型”指定類型一致的表達(dá)式,其值即為函數(shù)的結(jié)果。通過Function過程返回值的方法有兩種:函數(shù)名=返回值,通過給函數(shù)名賦值的方法返回結(jié)果。Return返回值,通過使用Return語句返回結(jié)果。7.6.2Function函數(shù)過程2.Function過程的調(diào)用調(diào)用Function過程,可以像使用VBA的內(nèi)部函數(shù)一樣來調(diào)用Function過程,即將函數(shù)使用在表達(dá)式中。調(diào)用形式:函數(shù)過程名([實參1][,實參2][,…])【例】編寫一個求整數(shù)階乘的Function過程,三次調(diào)用它,計算1!+3!+5!的值。7.6.3過程調(diào)用中參數(shù)的傳遞1.形式參數(shù)和實際參數(shù)形式參數(shù)是指在定義通用過程時,出現(xiàn)在Sub或Function語句子過程名/函數(shù)名后的變量名,是接收來自主調(diào)過程數(shù)據(jù)的變量。形參表中的各個變量之間用逗號分隔。實際參數(shù)是指在調(diào)用Sub或Function過程時,主調(diào)過程傳送給被調(diào)用的Sub或Function過程的常量、變量或表達(dá)式。實參表可由常量、表達(dá)式、有效的變量名、數(shù)組名(后跟左、右括號)組成,實參表中各參數(shù)用逗號分隔。2.參數(shù)傳遞傳遞參數(shù)的方式有兩種:如果調(diào)用語句中的實際參數(shù)是常量或表達(dá)式,或者定義過程時選用ByVal關(guān)鍵字,則按值傳遞(亦稱傳值)。如果調(diào)用語句中的實際參數(shù)為變量,或者定義過程時選用ByRef關(guān)鍵字,則按地址傳遞(亦稱傳址)。默認(rèn)情況下,按地址傳遞參數(shù)。7.6.3過程調(diào)用中參數(shù)的傳遞按地址傳遞按地址傳遞是在調(diào)用過程時,將實參的地址傳給形參。因此,如果在被調(diào)用過程中修改了形參的值,則主調(diào)用過程中實參的值也跟著發(fā)生變化。按值傳遞按值傳遞是主調(diào)用過程將實參的值復(fù)制后傳給被調(diào)用過程的形參。因此,即使在被調(diào)用過程中修改了形參的值,主調(diào)用過程中實參的值也不會跟著發(fā)生變化?!纠烤帉慡ub過程,實現(xiàn)按利率0.05對銀行存款一年后金額的計算。分析:參數(shù)分別設(shè)置為按值傳遞和按地址傳遞,體會兩種傳遞機(jī)制的不同。Part.07VisualBasic.NET事件及事件驅(qū)動7.7.1事件及事件驅(qū)動的定義事件是能夠被窗體或控件識別的動作。事件驅(qū)動程序在事件被觸發(fā)時執(zhí)行事件代碼。VBA的每一個窗體和控件都有一套預(yù)先定義好的事件。事件一旦被觸發(fā),相關(guān)事件過程的代碼就會執(zhí)行。VBA的對象能夠自動識別一套預(yù)定義的事件,但是它們是否響應(yīng)事件以及如何響應(yīng)是由程序員在事件過程EventProcedure中編寫的代碼來決定的。很多對象能夠識別相同的事件,但是執(zhí)行的是不同的事件過程的代碼。比如,當(dāng)用戶單擊了窗體userform,事件過程userform_click中的代碼就會被執(zhí)行;當(dāng)用戶單擊了名為Command1的命令按鈕,事件過程Command1_click中的代碼就會被執(zhí)行。7.7.2事件的分類1.鍵盤事件鍵盤事件是用戶操作鍵盤引發(fā)的事件。常用的鍵盤事件有KeyDown,KeyUp,KeyPress。1)KeyDown事件當(dāng)在某對象上按下鍵盤任意鍵都會觸發(fā)該事件。PrivateSub對象名_KeyDown(KeyCodeAsInteger,ShiftAsInteger)……EndSub參數(shù)KeyCode為按鍵的位置碼,Shift為Shift、Ctrl和Alt三個狀態(tài)鍵的狀態(tài)。2)KeyUp事件當(dāng)在某對象上釋放鍵盤任意鍵都會觸發(fā)該事件。PrivateSub對象名_KeyUp(KeyCodeAsInteger,ShiftAsInteger)……EndSub3)KeyPress事件當(dāng)在某對象上按下鍵盤任意字符鍵都會觸發(fā)該事件。PrivateSub對象名_KeyPress(KeyAsciiAsInteger)……EndSub參數(shù)KeyAscii為按下字符鍵對應(yīng)的Ascii碼值。7.7.2事件的分類【例】測試鍵盤事件發(fā)生的先后順序。分析:鍵盤有KeyUp、KeyDown和KeyPress三個事件,通過鍵入鍵盤上任意一個字符來測試三個事件發(fā)生的先后順序。7.7.2事件的分類2.鼠標(biāo)事件鼠標(biāo)事件是在操作鼠標(biāo)時引發(fā)的事件。常用的鼠標(biāo)事件有Click、DblClick、MouseDown、MouseUp、MouseMove等。1)Click事件在某對象上單擊鼠標(biāo)左鍵觸發(fā)的事件。PrivateSub對象名_Click()……EndSub2)DblClick事件在某對象上雙擊鼠標(biāo)左鍵觸發(fā)的事件。PrivateSub對象名_DblClick(CancelAsInteger)……EndSub參數(shù)Cancel決定該操作是否有效。3)MouseDown事件在某對象上按下鼠標(biāo)左鍵觸發(fā)的事件。PrivateSub對象名_MouseDown(ButtonAsInteger,ShiftasInteger,XAsSingle,YAsSingle)……EndSub參數(shù)Button為按鍵信息,Shift為三個狀態(tài)鍵(Ctrl、Shift和Alt)的狀態(tài),X和Y表示鼠標(biāo)所在的位置。7.7.2事件的分類2.鼠標(biāo)事件4)MouseUp事件在某對象上釋放鼠標(biāo)左鍵觸發(fā)的事件。PrivateSub對象名_MouseUp(ButtonAsInteger,ShiftasInteger,XAsSingle,YAsSingle)……EndSub參數(shù)Button為按鍵信息,Shift為三個狀態(tài)鍵(Ctrl、Shift和Alt)的狀態(tài),X和Y表示鼠標(biāo)所在的位置。5)MouseMove事件在某對象上鼠標(biāo)發(fā)生位移時觸發(fā)的事件。PrivateSub對象名_MouseMove(ButtonAsInteger,ShiftasInteger,XAsSingle,YAsSingle)……EndSub參數(shù)Button為按鍵信息,Shift為三個狀態(tài)鍵(Ctrl、Shift和Alt)的狀態(tài),X和Y表示鼠標(biāo)所在的位置?!纠繙y試鼠標(biāo)事件,當(dāng)用鼠標(biāo)單擊窗體的主體節(jié)時窗體背景色設(shè)置為紅色,雙擊時顯示綠色,單擊鼠標(biāo)右鍵時顯示藍(lán)色。分析:新建一個窗體,然后在窗體的Click、DbClick以及MouseDown事件下,書寫代碼,通過設(shè)置窗體的BackColor屬性以達(dá)到改變窗體背景色的目的。7.7.2事件的分類3.窗口事件窗口事件是指操作窗口時觸發(fā)的事件。常用的事件有Open、Load、Resize、Activate、Current、UnLoad、DeActivate和Close事件等。1)Open事件在打開一個窗體或報表時觸發(fā)該事件。PrivateSub對象名_Open(CancelAsInteger)……EndSub參數(shù)Cancel決定操作是否有效。當(dāng)Cancel取值為0時窗口打開,當(dāng)Cancel取值為1時則不打開。2)Close事件在關(guān)閉一個窗體或報表時觸發(fā)該事件。PrivateSub對象名_Close()……EndSub7.7.2事件的分類3.窗口事件3)Load事件在一個窗體或報表被加載時觸發(fā)該事件。PrivateSub對象名_Load()……EndSub該事件通常用來進(jìn)行窗體的初始化工作。4)UnLoad事件在一個窗體或報表被卸載時觸發(fā)該事件。PrivateSub對象名_UnLoad(CancelAsInteger)……EndSub【例】測試窗口事件發(fā)生的先后順序。分析:當(dāng)運(yùn)行一個窗體的時候,常用的窗口事件執(zhí)行順序是什么呢?可以通過新建一個窗體,然后在窗體的不同事件下彈出一個消息框,用來驗證窗口事件的執(zhí)行順序。7.7.2事件的分類4.對象事件對象事件是指當(dāng)對對象進(jìn)行操作時所觸發(fā)的事件,也稱操作事件。常用的對象事件有GetFocus、LostFocus、BeforeUpdate、AfterUpdate和Change。1)GetFocus事件當(dāng)一個對象由沒有獲得焦點的狀態(tài)變?yōu)楂@得焦點的狀態(tài)時觸發(fā)的事件。PrivateSub對象名_GetFocus()……EndSub2)LostFocus事件當(dāng)一個對象由獲得焦點的狀態(tài)變?yōu)槭ソ裹c的狀態(tài)時觸發(fā)的事件。PrivateSub對象名_LostFocus()……EndSub7.7.2事件的分類4.對象事件3)AfterUpdate事件對象中的數(shù)據(jù)被修改或記錄被更新之后,當(dāng)按下鍵,或?qū)⒔裹c從該對象上移開時所觸發(fā)的事件。PrivateSub對象名_AfterUpdate(CancelAsInteger)……EndSub4)BeforeUpdate事件對象中的數(shù)據(jù)被修改時,當(dāng)按下鍵,或?qū)⒔裹c從該對象上移開時所觸發(fā)的事件。PrivateSub對象名_BeforeUpdate(CancelAsInteger)……EndSub該事件可以檢驗輸入數(shù)據(jù)的有效性。當(dāng)輸入無效數(shù)據(jù)時,可以將參數(shù)Cancel設(shè)置為1,此時就無法將焦點從該對象上移開。5)Change事件當(dāng)對象中數(shù)據(jù)的修改得到認(rèn)可后觸發(fā)的事件。PrivateSub對象名_Change()……EndSub7.7.2事件的分類4.對象事件【例】對于如圖7.31所示的學(xué)生信息錄入窗體,要求對學(xué)號性別文本框控件(名稱為txtXH)進(jìn)行數(shù)據(jù)校驗,要求該文本框內(nèi)容只能夠輸入12位學(xué)號,否則不能夠更新到數(shù)據(jù)庫。分析:這里可以使用BeforeUpdate事件,當(dāng)數(shù)據(jù)不滿足要求時將Cancel參數(shù)設(shè)置為1,無法將焦點從該對象上移開,必須輸入合法的數(shù)據(jù)。7.7.2事件的分類5.Timer事件Timer事件發(fā)生在窗體的TimerInterval屬性指定的規(guī)則時間間隔內(nèi)。PrivateSub對象名_Timer()……EndSub通過Timer事件發(fā)生時運(yùn)行宏或事件過程,可以控制在每一計時器時間間隔內(nèi)需要Access完成的操作。比如,可以在規(guī)定的時間間隔內(nèi)重新查詢記錄或重畫屏幕。窗體的TimerInterval屬性以毫秒為單位,指定事件的時間間隔。間隔可以從0~2,147,483,647ms。將TimerInterval屬性設(shè)置為0時,將阻止Timer事件的發(fā)生?!纠渴褂肨imer事件實現(xiàn)標(biāo)簽文字的動態(tài)效果。分析:新建一個窗體,在窗體上添加一個標(biāo)簽,名稱為label1,利用Timer事件,按照一定時間間隔,使label1的標(biāo)題位置不斷發(fā)生變化,從而達(dá)到標(biāo)簽文字的動態(tài)效果7.7.3事件驅(qū)動的程序設(shè)計方法所謂事件驅(qū)動就是程序在執(zhí)行一個進(jìn)程中可以接受一個外部事件的驅(qū)動而進(jìn)入另一個進(jìn)程,而不必先關(guān)閉并退出當(dāng)前進(jìn)程。事件驅(qū)動程序設(shè)計意圖是把靈活的工作環(huán)境交給用戶,用戶使用程序時,可以在一個事件(正在進(jìn)行工作時)尚未結(jié)束時驅(qū)動另一個事件的發(fā)生。事件驅(qū)動程序設(shè)計是一種全新的程序設(shè)計方法,它不是由事件的順序來控制,而是由事件的發(fā)生來控制,而這種事件的發(fā)生是隨機(jī)的、不確定的,并沒有預(yù)定的順序,這樣就允許程序的用戶用各種合理的順序來安排程序的流程。對于需要用戶交互的應(yīng)用程序來說,事件驅(qū)動的程序設(shè)計有著過程驅(qū)動方法無法替代的優(yōu)點。它是一種面向用戶的程序設(shè)計方法,它在程序設(shè)計過程中除了完成所需功能之外,更多的考慮了用戶可能的各種輸入,并針對性的設(shè)計相應(yīng)的處理程序。它是一種“被動”式程序設(shè)計方法,程序開始運(yùn)行時,處于等待用戶輸入事件。Part.08VisualBasic.NETDoCMD對象7.8.1程序?qū)Ш紸ccess提供了一個非常重要的對象DoCmd,在VBA編程中經(jīng)常用DoCmd對象的相關(guān)方法操作Access數(shù)據(jù)庫的對象,比如打開窗體、關(guān)閉窗體、運(yùn)行查詢、打開報表、設(shè)置控件屬性值等功能

溫馨提示

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

評論

0/150

提交評論