access模塊PPT課件_第1頁(yè)
access模塊PPT課件_第2頁(yè)
access模塊PPT課件_第3頁(yè)
access模塊PPT課件_第4頁(yè)
access模塊PPT課件_第5頁(yè)
已閱讀5頁(yè),還剩80頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、10101 1模塊的基本知識(shí)模塊的基本知識(shí) 模塊是Access 2003對(duì)象之一,起著存放用戶(hù)為實(shí)現(xiàn)某種操作而編寫(xiě)的VBA代碼的作用,模塊中的每一個(gè)過(guò)程都可以是一個(gè)子程序或一個(gè)函數(shù)過(guò)程。其中子程序又稱(chēng)為Sub過(guò)程,它完成某一特定的操作,沒(méi)有返回值,通常以Sub開(kāi)始, End Sub結(jié)束。函數(shù)過(guò)程又稱(chēng)為Function過(guò)程,是一種能返回具體值的過(guò)程,通常以Function,并以End Function語(yǔ)句結(jié)束。 第1頁(yè)/共85頁(yè)10101 11 1模塊的分類(lèi)模塊的分類(lèi) 在Access 2003中,有類(lèi)模塊和標(biāo)準(zhǔn)模塊兩種。1 1類(lèi)模塊類(lèi)模塊 類(lèi)模塊是指包含新對(duì)象定義的模塊,用戶(hù)每創(chuàng)建一個(gè)新對(duì)象,就

2、會(huì)新建一個(gè)類(lèi)模塊。窗體模塊和報(bào)表模塊都是類(lèi)模塊,它們各自與某一窗體或報(bào)表相聯(lián)。窗體和報(bào)表模塊通常都有含有事件過(guò)程,該過(guò)程用于響應(yīng)窗體或報(bào)表中的事件??梢允褂檬录^(guò)程來(lái)控制窗體或報(bào)表的行為,以及它們對(duì)用戶(hù)操作的響應(yīng)。例如:用鼠標(biāo)單擊某個(gè)命令按鈕。2 2標(biāo)準(zhǔn)模塊標(biāo)準(zhǔn)模塊 標(biāo)準(zhǔn)模塊是指存放在整個(gè)數(shù)據(jù)庫(kù)中可用的函數(shù)和子程序的模塊。標(biāo)準(zhǔn)模塊包括通用過(guò)程和常用過(guò)程。通用過(guò)程不與任何對(duì)象相關(guān)聯(lián),常用過(guò)程可在數(shù)據(jù)庫(kù)的任何位置運(yùn)行。 第2頁(yè)/共85頁(yè)10101 12 Microsoft Visual Basic2 Microsoft Visual Basic編輯編輯器器 Microsoft Visual Bas

3、ic編輯器是用于創(chuàng)建模塊的一個(gè)開(kāi)發(fā)工具。1 1打開(kāi)打開(kāi)Microsoft Visual BasicMicrosoft Visual Basic編輯器編輯器 啟動(dòng)Microsoft Visual Basic編輯器的方法主要有以下幾種。 (1)在數(shù)據(jù)庫(kù)窗口中,單擊“工具”菜單的“宏”命令,然后在“宏”子菜單中單擊“Visual Basic編輯”命令。 (2)在數(shù)據(jù)庫(kù)窗口中單擊“模塊”對(duì)象,然后單擊工具欄的“新建”按鈕。 (3)單擊“插入”菜單中的“模塊”命令。 (4)在窗體或報(bào)表的設(shè)計(jì)視圖中單擊工具欄中的“代碼”按鈕。 啟動(dòng)后的Microsoft Visual Basic編輯器窗口如圖10-1所示

4、。 第3頁(yè)/共85頁(yè)圖10-1 Microsoft Visual Basic編輯器窗口第4頁(yè)/共85頁(yè) 在圖10-1窗口中,分為左右兩部分,其中左邊部分是“工程資源管理器”,當(dāng)前數(shù)據(jù)庫(kù)中的所有模塊及Access 2003類(lèi)對(duì)象都列在該窗口中,用戶(hù)可在窗口中選擇各種模塊或?qū)ο?,只要雙擊某模塊的名字,就能打開(kāi)或查看其代碼。窗口的右邊是代碼窗口,它用來(lái)顯示當(dāng)前選定過(guò)程的代碼,也可在該窗口中輸入當(dāng)前選定過(guò)程的代碼。 第5頁(yè)/共85頁(yè)10102VBA2VBA程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ) 一個(gè)好的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)離不開(kāi)模塊,而要設(shè)計(jì)一個(gè)好的模塊,更離不開(kāi)VBA程序設(shè)計(jì)。因此,我們必須掌握VBA程序設(shè)計(jì)基本知識(shí),

5、才能設(shè)計(jì)出一個(gè)理想的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)。 10102 21 1程序書(shū)寫(xiě)的格式程序書(shū)寫(xiě)的格式1注釋語(yǔ)句 注釋是對(duì)程序的說(shuō)明,有時(shí)也利用注釋語(yǔ)句屏蔽一條語(yǔ)句以觀察變化、發(fā)現(xiàn)問(wèn)題和錯(cuò)誤。Visual Basic中的注釋語(yǔ)句有兩個(gè),分別是Rem和撇號(hào)“”,Rem通常放在某程序或程序段的首行,對(duì)整個(gè)程序或程序段的功能作說(shuō)明,“”通常放在某語(yǔ)句行的后面,對(duì)所在行的功能作說(shuō)明。其格式如下: 第6頁(yè)/共85頁(yè) Rem 注釋內(nèi)容 或 注釋內(nèi)容 說(shuō)明:說(shuō)明: (1)在Rem關(guān)鍵字與注釋內(nèi)容之間要加一個(gè)空格。例如:Rem 這是一個(gè)標(biāo)題 這是一個(gè)標(biāo)題 (2)任何字符都可以放在注釋行中作為注釋內(nèi)容。注釋語(yǔ)句通常放在過(guò)程、模

6、塊的開(kāi)頭作為標(biāo)題,也可以放在執(zhí)行語(yǔ)句的后面。在這種情況下,注釋語(yǔ)句必須是最后一個(gè)語(yǔ)句,且Rem前必須用冒號(hào)(:)與語(yǔ)句隔開(kāi)。但若用撇號(hào),則在其他語(yǔ)句后不必加冒號(hào)。例如:第7頁(yè)/共85頁(yè)Text1.text=Good morning! This is a testText1.text=Good morning! :Rem This is a test (3)注釋語(yǔ)句不能放在續(xù)行符的后面。 2 2連寫(xiě)和換行連寫(xiě)和換行 (1)連寫(xiě) 在VBA中,通常一行書(shū)寫(xiě)一個(gè)VBA語(yǔ)句,也可以在一行書(shū)寫(xiě)多個(gè)VBA語(yǔ)句,這時(shí)需要用“:”將幾個(gè)VBA語(yǔ)句分隔。 如:Dim No As Integer Dim Name

7、As String可寫(xiě)成下面一行 Dim No As Integer :Dim Name As String (2)換行 有時(shí)代碼太長(zhǎng),書(shū)寫(xiě)起來(lái)很不方便,這時(shí)可將其分成多行書(shū)寫(xiě),但必須在行尾加上“ ”。第8頁(yè)/共85頁(yè)10102 22VBA2VBA中的數(shù)據(jù)類(lèi)型中的數(shù)據(jù)類(lèi)型 數(shù)據(jù)是指能夠輸入到計(jì)算機(jī)中,并能被計(jì)算機(jī)識(shí)別和加工處理的符號(hào)的集合。數(shù)值、字符、圖形、圖像和聲音等都是數(shù)據(jù)。數(shù)據(jù)是計(jì)算機(jī)程序處理的對(duì)象,也是運(yùn)算產(chǎn)生的結(jié)果。計(jì)算機(jī)處理的數(shù)據(jù)必須是有組織的,并按一定結(jié)構(gòu)進(jìn)行存儲(chǔ)的數(shù)據(jù)。因此,計(jì)算機(jī)中的數(shù)據(jù)都有自己的數(shù)據(jù)類(lèi)型。不同類(lèi)型的數(shù)據(jù)其取值范圍、所適應(yīng)的運(yùn)算都不相同,在內(nèi)存中所分配的存儲(chǔ)單

8、元數(shù)目也不同,因此,正確區(qū)分和使用不同的數(shù)據(jù)類(lèi)型,可使程序在運(yùn)行時(shí)占用較少的內(nèi)存,確保程序運(yùn)行的正確性和可靠性。VBA的標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型有11種,如表10-1所示。 第9頁(yè)/共85頁(yè)表表10-1 VBA變量的標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型變量的標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型關(guān)鍵字關(guān)鍵字說(shuō)明符說(shuō)明符數(shù)據(jù)范圍數(shù)據(jù)范圍所占字節(jié)數(shù)所占字節(jié)數(shù)整型整型IntegerInteger% %-32768-3276832767327672 2長(zhǎng)整型長(zhǎng)整型LongLong& &-2147483648-2147483648214748364721474836474 4單精度型單精度型SingleSingle! !1.401298E-451.

9、401298E-453.402823E383.402823E38-1.79769313486232E308-1.79769313486232E308- -4.9406564584124E3244.9406564584124E3244 4雙精度型雙精度型DoubleDouble# #4.9406564584124E3244.9406564584124E3241.79769313486232E3081.79769313486232E3088 8貨幣型貨幣型CurrencyCurrency -922337203685477.5808-922337203685477.580892 337203 92

10、337203 685477.5807685477.58078 8字符型字符型StringString$ $與字符長(zhǎng)度有關(guān)與字符長(zhǎng)度有關(guān)字節(jié)型字節(jié)型ByteByte無(wú)無(wú)0 02552551 1布爾型布爾型BooleanBoolean無(wú)無(wú)TrueTrue、FalseFalse2 2日期型日期型DateDate無(wú)無(wú)100100年年1 1月月1 1日日99999999年年1212月月3131日日8 8對(duì)象型對(duì)象型ObjectObject無(wú)無(wú)任何任何ObjectObject4 4變體型變體型VariantVariant無(wú)無(wú)根據(jù)需要分配根據(jù)需要分配第10頁(yè)/共85頁(yè)1 1數(shù)值型數(shù)據(jù)數(shù)值型數(shù)據(jù) VBA的數(shù)值

11、型(Numeric)數(shù)據(jù)主要分為整型和浮點(diǎn)型(實(shí)型),另外還有貨幣型和字節(jié)型。其中整型可分為整型和長(zhǎng)整型,浮點(diǎn)型可分為單精度和雙精度浮點(diǎn)型。2 2字符型數(shù)據(jù)字符型數(shù)據(jù) 字符型數(shù)據(jù)是一組由計(jì)算機(jī)字符組成的序列,即字符串,每個(gè)字符都以ASCII編碼表示,即用一個(gè)字節(jié)表示。在VBA中,字符串要用雙引號(hào)括起來(lái),其中長(zhǎng)度為0的字符串稱(chēng)為空字符串。字符型的類(lèi)型說(shuō)明符為“$”。 第11頁(yè)/共85頁(yè) VBA有兩種類(lèi)型的字符串:變長(zhǎng)字符串和定長(zhǎng)字符串。變長(zhǎng)字符串是指字符的長(zhǎng)度是不固定的,隨著對(duì)字符串變量賦予新的字符串,它的長(zhǎng)度可隨時(shí)變化,最大長(zhǎng)度為251-1個(gè)字符,如果沒(méi)有說(shuō)明一個(gè)字符是哪種類(lèi)型,默認(rèn)為變長(zhǎng)字符

12、串。 定長(zhǎng)字符串是指它在程序執(zhí)行過(guò)程中,始終保持其長(zhǎng)度不變的字符串,定長(zhǎng)字符串的最大長(zhǎng)度為65535個(gè)字符。例如,可規(guī)定學(xué)生學(xué)號(hào)的長(zhǎng)度為8位,如果不足8位則用空格將不足的部分填滿(mǎn),如果長(zhǎng)度超過(guò)8位則截去超出部分的字符。 第12頁(yè)/共85頁(yè)3 3布爾型(布爾型(BooleanBoolean)數(shù)據(jù))數(shù)據(jù) 布爾型數(shù)據(jù)是一個(gè)邏輯值,用兩個(gè)字節(jié)存儲(chǔ),它有兩種取值,即True(真)或False(假)。任何只有兩種狀態(tài)的數(shù)據(jù),如True/False、Yes/No、On/Off等,都可以表示為布爾型。當(dāng)把數(shù)值型轉(zhuǎn)換為布爾型時(shí),0會(huì)轉(zhuǎn)換為False,其他非0值轉(zhuǎn)換為T(mén)rue;當(dāng)把布爾值轉(zhuǎn)換為數(shù)值型時(shí),F(xiàn)alse

13、轉(zhuǎn)換為0,True轉(zhuǎn)換為1。 4 4日期型(日期型(DateDate)數(shù)據(jù))數(shù)據(jù) 日期型數(shù)據(jù)用來(lái)表示日期和時(shí)間,可以表示多種格式的日期和時(shí)間。日期型數(shù)據(jù)用兩個(gè)“#”符號(hào)把表示日期和時(shí)間的值括起來(lái),就像字符串?dāng)?shù)據(jù)用雙引號(hào)括起來(lái)一樣。例如,#10/28/2001#、#10-28-2001#、#10/28/2001 10:46:01 pm#等。 第13頁(yè)/共85頁(yè)5 5對(duì)象型(對(duì)象型(ObjectObject)數(shù)據(jù))數(shù)據(jù) Object變量可用來(lái)引用應(yīng)用程序中或某些其他應(yīng)用程序中的對(duì)象。然后用Set語(yǔ)句指定一個(gè)被聲明為Object的變量去引用應(yīng)用程序所識(shí)別的任何實(shí)際對(duì)象。例如:Dim ObjDb As

14、 ObjectDim ObjDb As ObjectSet ObjDb=OpenDatabase(C:Vb6student.mdb)Set ObjDb=OpenDatabase(C:Vb6student.mdb)6 6變體型(變體型(VariantVariant)數(shù)據(jù))數(shù)據(jù) 變體型數(shù)據(jù)是一種可變的數(shù)據(jù)類(lèi)型,可以表示任何值,包括數(shù)值、字符串、日期等。變體型數(shù)據(jù)表示數(shù)值型數(shù)據(jù)時(shí),占用16個(gè)字節(jié)的存儲(chǔ)空間,最大可達(dá)Double類(lèi)型的取值范圍。表示字符串時(shí),則占用的存儲(chǔ)空間等于字符串的長(zhǎng)度。 第14頁(yè)/共85頁(yè)7 7自定義數(shù)據(jù)類(lèi)型自定義數(shù)據(jù)類(lèi)型 在VBA語(yǔ)言中,用戶(hù)自定義的數(shù)據(jù)類(lèi)型通過(guò)Type語(yǔ)句來(lái)實(shí)

15、現(xiàn)。其格式如下: Type 數(shù)據(jù)類(lèi)型名 數(shù)據(jù)類(lèi)型 元素名 As 類(lèi)型名 數(shù)據(jù)類(lèi)型 元素名 As 類(lèi)型名 數(shù)據(jù)類(lèi)型 元素名 As 類(lèi)型名 End Type第15頁(yè)/共85頁(yè)10102 23 3常量常量 常量是指在整個(gè)程序運(yùn)行期間其值不會(huì)發(fā)生變化的量。VBA的常量包括數(shù)值常量、字符常量、符號(hào)常量、固有常量和系統(tǒng)定義常量5種。其中數(shù)值常量和字符常量最常用。數(shù)值常量由數(shù)字組成,表示具體的數(shù)值,如23876。字符常量由定界(引號(hào))將字符括起來(lái),如abc。下面介紹其他3種常量。 1 1符號(hào)常量符號(hào)常量 對(duì)于一個(gè)具有特定意義的數(shù)字或字符串,或在程序中需要反復(fù)使用的相同值,可以用符號(hào)常量來(lái)代表。一般用Cons

16、t語(yǔ)句來(lái)說(shuō)明符號(hào)常量,例如:Const cpi=3.1415 第16頁(yè)/共85頁(yè)2.2.固有常量固有常量 固有常量是Access 2003或VBA的一部分,是在Access或VBA的類(lèi)庫(kù)中定義的。Access或VBA包含了許多預(yù)定義的固有常量。固有常量使用兩個(gè)字母的前綴,表示該常量所在的對(duì)象庫(kù)。來(lái)自VB的固有常量以“VB”開(kāi)頭,來(lái)自Access的固有常量以“AC”開(kāi)頭,而來(lái)自ADO(ActiveX Data Objects)庫(kù)的常量以“AD”開(kāi)頭。所有的固有常量都包含在類(lèi)型庫(kù)中,只有在模塊引用了常量,被引用的常量才能裝到內(nèi)存中。要查看這些常量可以使用Access中的對(duì)象瀏覽器。例如:acfor

17、m, adAddNew, vbCurrency。第17頁(yè)/共85頁(yè)10102 24 4 變量變量 在程序中處理數(shù)據(jù)時(shí),對(duì)于輸入的數(shù)據(jù)、參加運(yùn)算的數(shù)據(jù)、運(yùn)行結(jié)果等臨時(shí)數(shù)據(jù),通常將它暫時(shí)存儲(chǔ)在計(jì)算機(jī)的內(nèi)存中。在VBA中,可以用名稱(chēng)表示內(nèi)存位置,這樣就能訪(fǎng)問(wèn)內(nèi)存中的數(shù)據(jù)。一個(gè)有名稱(chēng)的內(nèi)存位置稱(chēng)為變量(Variable)。和其他語(yǔ)言一樣,VBA也用變量存儲(chǔ)數(shù)據(jù)值。每個(gè)變量都有一個(gè)名稱(chēng)和相應(yīng)的數(shù)據(jù)類(lèi)型,通過(guò)名稱(chēng)來(lái)引用一個(gè)變量。數(shù)據(jù)類(lèi)型決定了該變量的存儲(chǔ)方式。第18頁(yè)/共85頁(yè)1 1變量的命名規(guī)則變量的命名規(guī)則 變量代表在程序執(zhí)行過(guò)程中其值可以改變的存儲(chǔ)單元,這個(gè)存儲(chǔ)單元的名稱(chēng)稱(chēng)為變量名。VBA變量名的命

18、名規(guī)則如下: (1)以字母或漢字開(kāi)頭,后可跟字母、數(shù)字或下畫(huà)線(xiàn),長(zhǎng)度小于等于255個(gè)字符。 (2)不能使用VBA中的關(guān)鍵字。 (3)VBA語(yǔ)言中不區(qū)分變量名的大小寫(xiě)。 (4)為了增加程序的可讀性,可在變量名前加一個(gè)縮寫(xiě)的前綴來(lái)表明該變量的數(shù)據(jù)類(lèi)型。如strAbc(字符串變量)、iCount(整型變量)、dblx(雙精度變量)等。第19頁(yè)/共85頁(yè)2 2變量的聲明變量的聲明 任何變量都屬于一定的數(shù)據(jù)類(lèi)型,包括基本數(shù)據(jù)類(lèi)型和用戶(hù)自定義的數(shù)據(jù)類(lèi)型。聲明變量就是用一個(gè)語(yǔ)句來(lái)定義變量的類(lèi)型。聲明變量的語(yǔ)句并不把值分配給變量,而是告知變量將包含什么類(lèi)型的數(shù)據(jù),在VBA中聲明變量分為顯式聲明(先聲明,后使用

19、)和隱式聲明(不聲明變量而直接使用)兩種。聲明變量的一般格式如下:Dim|Static|Private|Public As ,As . 其中,應(yīng)遵循標(biāo)準(zhǔn)的變量命名約定,As是關(guān)鍵字,用來(lái)定義被聲明變量的數(shù)據(jù)類(lèi)型或?qū)ο箢?lèi)型。 Dim、Static定義過(guò)程級(jí)的變量,變量只有在聲明它們的過(guò)程中才能被識(shí)別,所以稱(chēng)之為局部變量。第20頁(yè)/共85頁(yè)例如:例如:Dim Count As Single 定義Count為單精度浮點(diǎn)數(shù)Static PutIn As String 定義PutIn為字符串型變量Dim Var 定義Var為缺省的Variant 類(lèi)型 Private定義私有模塊級(jí)變量,變量對(duì)該模塊的所有

20、過(guò)程都可用,但對(duì)其他模塊的代碼不可用。例如:Private Intvalue As IntegerPublic主要在全局模塊中使用,定義的變量是全局變量,作用范圍為整個(gè)應(yīng)用程序。例如:Public PI As SinglePublic AA As Integer第21頁(yè)/共85頁(yè)10.2.510.2.5運(yùn)算符和表達(dá)式運(yùn)算符和表達(dá)式 常量、變量及它們的數(shù)據(jù)類(lèi)型是程序要進(jìn)行加工和處理的運(yùn)算對(duì)象,即數(shù)據(jù),而要對(duì)這些數(shù)據(jù)進(jìn)行加工、處理和運(yùn)算,還必須使用運(yùn)算符,以表明對(duì)數(shù)據(jù)實(shí)施的是何種操作。VBA的運(yùn)算符有算術(shù)運(yùn)算符、連接運(yùn)算符、關(guān)系運(yùn)算符和邏輯運(yùn)算符。用運(yùn)算符號(hào)將常量、變量或函數(shù)連接起來(lái)的有意義的式子

21、稱(chēng)為表達(dá)式,表達(dá)式按其所含運(yùn)算符和運(yùn)算對(duì)象的不同,可分為算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式和字符串表達(dá)式等。1 1運(yùn)算符運(yùn)算符(1)算術(shù)運(yùn)算符算術(shù)運(yùn)算符用來(lái)對(duì)數(shù)值型數(shù)據(jù)執(zhí)行簡(jiǎn)單的算術(shù)運(yùn)算。在VBA中共有8種算術(shù)運(yùn)算符,如表10-2所示。 第22頁(yè)/共85頁(yè)表10-2 算術(shù)運(yùn)算符運(yùn)算符運(yùn)算符含義含義表達(dá)式舉例表達(dá)式舉例說(shuō)說(shuō) 明明優(yōu)優(yōu) 先先 級(jí)級(jí)舉舉 例例結(jié)結(jié) 果果指數(shù)指數(shù)4364進(jìn)行乘方運(yùn)算,進(jìn)行乘方運(yùn)算,43是是431-取負(fù)取負(fù)- -10- -10進(jìn)行單目運(yùn)算,進(jìn)行單目運(yùn)算,10取負(fù)取負(fù)2*乘乘8*2163除除7/23.53整除整除723整除結(jié)果取商的整數(shù)部分整除結(jié)果取商的整數(shù)部分4Mod求余

22、求余7 Mod 21結(jié)果是兩個(gè)數(shù)相除后之余結(jié)果是兩個(gè)數(shù)相除后之余5+加加10+212“+”也可以是字符串連接符也可以是字符串連接符6-減減7.4- -34.46第23頁(yè)/共85頁(yè)說(shuō)明:說(shuō)明: 算術(shù)運(yùn)算符中,除負(fù)號(hào)“-”是單目運(yùn)算符外,其余都是雙目運(yùn)算符(要求有兩個(gè)運(yùn)算量)。 “+”、“-”、“*”的概念和數(shù)學(xué)中的概念相同。 除法運(yùn)算有兩種。 “/”一般除法,運(yùn)算結(jié)果一般為單精度數(shù)。如果操作數(shù)有一個(gè)為雙精度數(shù),則結(jié)果為雙精度數(shù)。如7/3=2.333 333 333 33。 “”整除,整數(shù)除法,結(jié)果為整數(shù)。如73=2。 Mod運(yùn)算符是求兩數(shù)相除后的余數(shù)。例如:22 Mod 7 結(jié)果為18.6 Mo

23、d 3 結(jié)果為011.4 Mod 5.2 結(jié)果為1第24頁(yè)/共85頁(yè) 參加整除和求余運(yùn)算的運(yùn)算對(duì)象一般為整型值,當(dāng)運(yùn)算對(duì)象中含有小數(shù)點(diǎn)時(shí), Visual Basic會(huì)自動(dòng)將操作數(shù)四舍五入為整型或長(zhǎng)整型后再進(jìn)行運(yùn)算。例如,表達(dá)式52 Mod 526.45的結(jié)果為1。 (2) (2)字符串運(yùn)算符字符串運(yùn)算符 將兩個(gè)或多個(gè)字符串連接起來(lái)可以用字符串連接運(yùn)算符“&”或“+”,生成一個(gè)新的字符串。例如: “ABCD”+“EFGHI” 結(jié)果為: ABCDEFGHI “Visual Basic” & “程序設(shè)計(jì)教程” 結(jié)果為: Visual Basic程序設(shè)計(jì)教程 說(shuō)明:說(shuō)明:當(dāng)連接符兩旁的操作量都為字符串

24、時(shí),上述兩個(gè)連接符等價(jià)。區(qū)別是:“+” 運(yùn)算中兩個(gè)操作數(shù)均應(yīng)為字符串類(lèi)型。&運(yùn)算的兩個(gè)操作數(shù)既可為字符型也可為數(shù)值型,當(dāng)是數(shù)值型時(shí),系統(tǒng)自動(dòng)先將其轉(zhuǎn)換為數(shù)字字符,然后進(jìn)行連接操作??聪旅娴睦印5?5頁(yè)/共85頁(yè)100+123 結(jié)果為223100+23 結(jié)果為100123Abc+122 出錯(cuò)100 & 123 結(jié)果為100123100 & 123 結(jié)果為100123Abc & 123 結(jié)果為Abcl23Abc & 123 結(jié)果為Abcl23(3)(3)關(guān)系運(yùn)算符關(guān)系運(yùn)算符 關(guān)系運(yùn)算符都是雙目運(yùn)算,是用來(lái)比較兩個(gè)運(yùn)算量之間的關(guān)系,關(guān)系表達(dá)式的運(yùn)算結(jié)果為邏輯量。若關(guān)系成立,結(jié)果為T(mén)rue;若關(guān)系不

25、成立,結(jié)果為False。VBA提供的關(guān)系運(yùn)算符如表10-3所示。 第26頁(yè)/共85頁(yè)表10-3 關(guān)系運(yùn)算符運(yùn)算運(yùn)算符符含含 義義表達(dá)式舉例表達(dá)式舉例說(shuō)說(shuō) 明明舉舉 例例結(jié)結(jié) 果果=等于等于abc=ABCFalse小寫(xiě)小寫(xiě)abc不等于大寫(xiě)不等于大寫(xiě)ABC大于大于(2+3)4True先計(jì)算先計(jì)算2+3=5,5大于大于4=大于等于大于等于8=(10- -2)True或大于或等于都為真,或大于或等于都為真,8=10- -2小于小于 stringstringTrue第一個(gè)字符串中第一個(gè)字符是空格,第一個(gè)字符串中第一個(gè)字符是空格,空格的空格的ASCII碼小于碼小于s,所以結(jié)果為,所以結(jié)果為真真=小于等于小

26、于等于220=110False或小于或等于都為真,或小于或等于都為真,220大于大于110,所以為假所以為假不等于不等于2yTrue2不等于不等于y,所以結(jié)果為真,所以結(jié)果為真第27頁(yè)/共85頁(yè)關(guān)系運(yùn)算的規(guī)則如下:關(guān)系運(yùn)算的規(guī)則如下: 當(dāng)兩個(gè)操作式均為數(shù)值型,按數(shù)值大小比較。 字符串比較,則按字符的ASCII碼值從左到右一一比較,直到出現(xiàn)不同的字符為止。例如,ABCDEABRA,結(jié)果為False。 數(shù)值型與可轉(zhuǎn)換為數(shù)值型的數(shù)據(jù)比較,例如,29189,按數(shù)值比較,結(jié)果為False。 數(shù)值型與不能轉(zhuǎn)換成數(shù)值型的字符型比較,例如,77sdcd,不能比較,系統(tǒng)出錯(cuò)。 日期型數(shù)據(jù)進(jìn)行比較時(shí),首先將日期看

27、成yyyymmdd的八位整數(shù),然后再按數(shù)值進(jìn)行比較。 常見(jiàn)字符值的大小比較關(guān)系如下:空格09AZazb)Trueab為假,再進(jìn)行取反運(yùn)算,所為假,再進(jìn)行取反運(yùn)算,所以結(jié)果為真以結(jié)果為真And邏輯與邏輯與(5=3) And (95)True兩個(gè)表達(dá)式的值都為真,結(jié)果為真兩個(gè)表達(dá)式的值都為真,結(jié)果為真Or邏輯或邏輯或(xy) Or (45)True兩個(gè)表達(dá)式的值一個(gè)為真,結(jié)果為真兩個(gè)表達(dá)式的值一個(gè)為真,結(jié)果為真Xor邏輯異或邏輯異或(8=7) Xor (107)True兩個(gè)表達(dá)式的值一真一假,結(jié)果為真兩個(gè)表達(dá)式的值一真一假,結(jié)果為真Eqv邏輯等于邏輯等于(128) Eqv (cd)False兩個(gè)表

28、達(dá)式的值一真一假,結(jié)果為假兩個(gè)表達(dá)式的值一真一假,結(jié)果為假I(mǎi)mp邏輯蘊(yùn)含邏輯蘊(yùn)含(10=10) Imp (1222)True第一個(gè)表達(dá)式值為真,第二個(gè)為假,第一個(gè)表達(dá)式值為真,第二個(gè)為假,結(jié)果為真結(jié)果為真第29頁(yè)/共85頁(yè)說(shuō)明:說(shuō)明: 各邏輯運(yùn)算符的優(yōu)先級(jí)不相同,邏輯運(yùn)算符的優(yōu)先級(jí)從高到低依次為NotAndOrXorEqvImp。 VBA中常用的邏輯運(yùn)算符是Not、And和Or。它們用于將多個(gè)關(guān)系表達(dá)式進(jìn)行邏輯判斷。例如,數(shù)學(xué)上表示某個(gè)數(shù)在某個(gè)區(qū)域時(shí)用表達(dá)式10X=10 And X20 參與邏輯運(yùn)算的量一般都應(yīng)是邏輯型數(shù)據(jù),如果參與邏輯運(yùn)算的兩操作數(shù)是數(shù)值量,則以數(shù)值的二進(jìn)制值逐位進(jìn)行邏輯運(yùn)算

29、(0為False,1為T(mén)rue)。第30頁(yè)/共85頁(yè)2 2表達(dá)式表達(dá)式 (1)表達(dá)式的組成 表達(dá)式由常數(shù)、變量、函數(shù)、運(yùn)算符及圓括號(hào)按一定的規(guī)則組成。表達(dá)式通過(guò)運(yùn)算后返回一個(gè)結(jié)果,運(yùn)算結(jié)果的類(lèi)型由數(shù)據(jù)和運(yùn)算符共同決定。 (2)表達(dá)式的書(shū)寫(xiě)規(guī)則 運(yùn)算符不能相鄰。例如,a+*b是錯(cuò)誤的。 在一個(gè)表達(dá)式中出現(xiàn)的括號(hào)應(yīng)全部是圓括號(hào),且必須配對(duì)使用。 在一個(gè)算術(shù)表達(dá)式中,乘號(hào)“*”既不能省略,也不能用“ ”代替,如xy應(yīng)寫(xiě)成x*y。 表達(dá)式從左到右在同一基準(zhǔn)并排書(shū)寫(xiě),不能出現(xiàn)上下、標(biāo)。 第31頁(yè)/共85頁(yè) 要注意各種運(yùn)算符的優(yōu)先級(jí)別,為保持運(yùn)算順序,在書(shū)寫(xiě)VBA表達(dá)式時(shí)需要適當(dāng)添加括號(hào)“()”,若用到庫(kù)

30、函數(shù)必須按庫(kù)函數(shù)要求書(shū)寫(xiě)。例如,數(shù)學(xué)算式 應(yīng)寫(xiě)成(-b+Sqr(b*b-4*a*c)/(2*a),其中,Sqr為求平方根的函數(shù)名。 aacbb242第32頁(yè)/共85頁(yè)(3)日期表達(dá)式 日期型表達(dá)式由日期型常數(shù),變量,函數(shù),算術(shù)運(yùn)算符“+”、“-”和算術(shù)表達(dá)式組成。日期型數(shù)據(jù)之間只能進(jìn)行加、減運(yùn)算。由數(shù)字符號(hào)“#”所包圍的具有有效格式的字符序列為日期文字。有效的格式包括區(qū)域設(shè)置中指定的日期格式或國(guó)際日期格式。例如,#10/01/2008#表示2008年10月1日。有兩種情況: 兩個(gè)日期型數(shù)據(jù)相減,結(jié)果是一個(gè)數(shù)值型數(shù)據(jù)(兩個(gè)日期相差的天數(shù))。例如,#12/20/2008#-#12/10/2008#

31、的結(jié)果為數(shù)值型數(shù)據(jù)10。 一個(gè)表示天數(shù)的數(shù)值型數(shù)據(jù)與日期型數(shù)據(jù)相加、減,結(jié)果仍為日期型數(shù)據(jù)。例如,/#12/10/2008#+10的結(jié)果為日期型數(shù)據(jù)#12/20/2008#(在Visual Basic中,實(shí)際輸出結(jié)果的格式與系統(tǒng)設(shè)置有關(guān))。 第33頁(yè)/共85頁(yè)10.2.6 10.2.6 函數(shù)函數(shù) VBA中的函數(shù)與一般數(shù)學(xué)中函數(shù)的概念沒(méi)有什么根本區(qū)別。函數(shù)是一種特定的運(yùn)算,在程序中要使用一個(gè)函數(shù)時(shí),只要給出函數(shù)名及參數(shù),就能得到它的函數(shù)值。 在VBA語(yǔ)言中,有內(nèi)部函數(shù)和用戶(hù)自定義函數(shù)兩大類(lèi)。用戶(hù)自定義函數(shù)是用戶(hù)根據(jù)需要定義的函數(shù)(詳見(jiàn)過(guò)程)。內(nèi)部函數(shù)也稱(chēng)標(biāo)準(zhǔn)函數(shù),是VBA本身提供的大量的內(nèi)部函數(shù)

32、。在這些函數(shù)中,有些是通用的,有些與某種操作有關(guān)。這些函數(shù)可分為轉(zhuǎn)換函數(shù)、數(shù)學(xué)函數(shù)、字符串函數(shù)、日期與時(shí)間函數(shù)和隨機(jī)函數(shù)等。 第34頁(yè)/共85頁(yè)1. 1. 數(shù)學(xué)函數(shù)數(shù)學(xué)函數(shù) 數(shù)學(xué)函數(shù)用于各種數(shù)學(xué)運(yùn)算,包括三角函數(shù)、求平方根、絕對(duì)值及對(duì)數(shù)、指數(shù)函數(shù)等。常用數(shù)學(xué)函數(shù)如表10-5所示,其中參數(shù)N、N1、N2表示有效的數(shù)值表達(dá)式。函函 數(shù)數(shù) 名名含含 義義實(shí)實(shí) 例例結(jié)結(jié) 果果Abs(N)取絕對(duì)值取絕對(duì)值A(chǔ)bs(- -3.5)3.5Sin(N)正弦函數(shù)正弦函數(shù)Sin(0)0Cos(N)余弦函數(shù)余弦函數(shù)Cos(0)1Tan(N)正切函數(shù)正切函數(shù)Tan(0)0Atn(N)返回用弧度表示的反正切返回用弧度表示

33、的反正切值值A(chǔ)tn(1)0. .785 398 163 397 448Exp(N)以以E為底的指數(shù)函數(shù),即為底的指數(shù)函數(shù),即eNExp(3)20. .086Log(N)以以e為底為底N的自然對(duì)數(shù)的自然對(duì)數(shù)Log(10)2. .3表10-5 常用數(shù)學(xué)函數(shù)第35頁(yè)/共85頁(yè)Rnd(N)產(chǎn)生大于等于產(chǎn)生大于等于0小于小于1的隨機(jī)數(shù)的隨機(jī)數(shù)Rnd01之間之間的隨機(jī)數(shù)的隨機(jī)數(shù)Sgn(N)符號(hào)函數(shù)符號(hào)函數(shù)Sgn(- -3. .5)- -1Sqr(N)平方根平方根Sqr(9)3Fix(N)取整取整Fix(- -3. .5)- -3Int(N)取小于或等于取小于或等于N的最大整數(shù)的最大整數(shù)Int(- -3.

34、.5)Int(3. .5)- -43Round(N1,N2)四舍五入(若省略四舍五入(若省略N2則取整)則取整)Round(88.48,1)Round(88.43)88. .588OctS(N)十進(jìn)制轉(zhuǎn)換成八進(jìn)制十進(jìn)制轉(zhuǎn)換成八進(jìn)制Oct$(100)144Hex$(N)十進(jìn)制轉(zhuǎn)換成十六進(jìn)制十進(jìn)制轉(zhuǎn)換成十六進(jìn)制Hex(100)64第36頁(yè)/共85頁(yè)2 2字符串函數(shù)字符串函數(shù) VBA提供了大量的字符串函數(shù),具有很強(qiáng)的字符處理能力,常用字符串函數(shù)。如表10-6所示。表10-6常用字符串函數(shù)函函 數(shù)數(shù) 名名含含 義義實(shí)實(shí) 例例結(jié)結(jié) 果果Ltrim$(字符串表達(dá)字符串表達(dá)式式)去掉字符串中左邊的空格去掉字

35、符串中左邊的空格LTrim$( ABCD)ABCDRtrim$(字符串表達(dá)字符串表達(dá)式式)去掉字符串中右邊的空格去掉字符串中右邊的空格RTrim$(ABCD )ABCDLeft$(字符串字符串,字符字符個(gè)數(shù)個(gè)數(shù))返回從左邊開(kāi)始的指定數(shù)返回從左邊開(kāi)始的指定數(shù)目的字符目的字符Left(Visual Basic,6)VisualRight$(字符串字符串,字字符個(gè)數(shù)符個(gè)數(shù))返回從右端開(kāi)始的指定數(shù)返回從右端開(kāi)始的指定數(shù)目的字符目的字符Right(Visual Basic,5)BasicMid$(字符串字符串,起始起始位置位置,字符個(gè)數(shù)字符個(gè)數(shù))返回從起始位置開(kāi)始的指返回從起始位置開(kāi)始的指定個(gè)數(shù)子字符串

36、定個(gè)數(shù)子字符串,Mid$(ABCD,2,3)BCD第37頁(yè)/共85頁(yè)Len(字符串表達(dá)式字符串表達(dá)式)返回字符串的長(zhǎng)度返回字符串的長(zhǎng)度 Len(水電出版社水電出版社) 5LenB(字符串表達(dá)式字符串表達(dá)式)返回字符串中所占返回字符串中所占字節(jié)數(shù)字節(jié)數(shù)Len(水電出版社水電出版社)10Space(n)返回返回n個(gè)空格字符個(gè)空格字符Space(5) String$(n,字符串字符串)返回由首字符組成返回由首字符組成的的n個(gè)字符串個(gè)字符串String$(5, abc)aaaaaLcase(字符串表達(dá)式字符串表達(dá)式)大寫(xiě)字母轉(zhuǎn)換為小大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母寫(xiě)字母Lcase$(Abc)abcUcase(字

37、符串表達(dá)式字符串表達(dá)式)小寫(xiě)字母轉(zhuǎn)換為大小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母寫(xiě)字母Ucase$(abc)ABCAsc(字符串表達(dá)式字符串表達(dá)式)返回第一個(gè)字符的返回第一個(gè)字符的ASCII值值A(chǔ)sc(ab)97Chr(n)將將n的值轉(zhuǎn)換為對(duì)的值轉(zhuǎn)換為對(duì)應(yīng)的應(yīng)的ASCII字符字符Chr(65) AVal(字符串表達(dá)式字符串表達(dá)式)將將“字符串表達(dá)式字符串表達(dá)式”轉(zhuǎn)化為數(shù)值轉(zhuǎn)化為數(shù)值Val(23.56) 23.56Str(數(shù)值數(shù)值)將將“數(shù)值數(shù)值”轉(zhuǎn)換為轉(zhuǎn)換為字符串字符串Str(34. .56)34.56第38頁(yè)/共85頁(yè)3 3數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù)數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù) 在VBA編程中,經(jīng)常要進(jìn)行數(shù)據(jù)類(lèi)型的轉(zhuǎn)換,常用的數(shù)據(jù)

38、類(lèi)型轉(zhuǎn)換函數(shù)如表10-7所示。 表10-7 數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù)函函 數(shù)數(shù) 說(shuō)說(shuō) 明明Cint(x)把把x的小數(shù)部分四舍五入,轉(zhuǎn)換為小數(shù)的小數(shù)部分四舍五入,轉(zhuǎn)換為小數(shù)Ccur(x)把把x的值轉(zhuǎn)換為貨幣類(lèi)型值,小數(shù)部分最多保留的值轉(zhuǎn)換為貨幣類(lèi)型值,小數(shù)部分最多保留4位,位,且自動(dòng)四舍五入且自動(dòng)四舍五入Cdbl(x)把把x值轉(zhuǎn)換為雙精度數(shù)值轉(zhuǎn)換為雙精度數(shù)Clng(x)把把x的小數(shù)部分四舍五入轉(zhuǎn)換為長(zhǎng)整型數(shù)的小數(shù)部分四舍五入轉(zhuǎn)換為長(zhǎng)整型數(shù)Csng(x)把把x值轉(zhuǎn)換為單精度數(shù)值轉(zhuǎn)換為單精度數(shù)Cvar(x)把把x值轉(zhuǎn)換為變體類(lèi)型值值轉(zhuǎn)換為變體類(lèi)型值第39頁(yè)/共85頁(yè)4 4日期日期/ /時(shí)間函數(shù)時(shí)間函數(shù) 常用

39、的日期/時(shí)間函數(shù)如表10-8所示。表10-8 常用日期/時(shí)間函數(shù)函函 數(shù)數(shù) 名名返回類(lèi)返回類(lèi)型型功功 能能例例 子子返返 回回 值值Day(日期日期)Integer返回日期,返回日期,131的整數(shù)的整數(shù)Day(#2000/3/15#)15Month(日期日期)Integer返回月份,返回月份,112的整數(shù)的整數(shù)Month(#2000/3/15#)3Year(日期日期)Integer返回年份返回年份Year(#2000/3/15#)2000Weekday(日日期期)Integer返回星期幾返回星期幾Weekday(#2000/3/15#)4TimeDate返回當(dāng)前系統(tǒng)時(shí)間返回當(dāng)前系統(tǒng)時(shí)間Time

40、系統(tǒng)時(shí)間系統(tǒng)時(shí)間DateDate返回系統(tǒng)日期返回系統(tǒng)日期Date系統(tǒng)日期系統(tǒng)日期NowDate返回系統(tǒng)日期和時(shí)間返回系統(tǒng)日期和時(shí)間Now系統(tǒng)日期系統(tǒng)日期與時(shí)間與時(shí)間Hour(時(shí)間時(shí)間)Integer返回鐘點(diǎn),返回鐘點(diǎn),023的整數(shù)的整數(shù)Hour(#4:35:17PM#)16Minute(時(shí)間時(shí)間)Integer返回分鐘,返回分鐘,059的整數(shù)的整數(shù)Minute(#4:35:17PM#)35Second(時(shí)間時(shí)間)Integer返回秒鐘,返回秒鐘,059的整數(shù)的整數(shù)Second(#4:35:17PM#)17第40頁(yè)/共85頁(yè)9 92 27 VBA7 VBA的基本輸入的基本輸入/ /輸出函數(shù)輸出函

41、數(shù)1 1InputBox()InputBox()函數(shù)函數(shù) 在應(yīng)用程序中,常使用InputBox()函數(shù)向變量輸送數(shù)據(jù),它不需要在窗體中創(chuàng)建控件就能輸入變量的值,使用方便。InputBox()函數(shù)格式:InputBox(,標(biāo)題 ,x坐標(biāo) ,y坐標(biāo)幫助文件,內(nèi)容功能:按給定的提示信息顯示消息框,接收并返回用戶(hù)輸入的信息。其中:x坐標(biāo),y坐標(biāo)是指定消息框在屏幕上的顯示位置幫助文件:當(dāng)在輸入窗口選擇“幫助”時(shí)所調(diào)用的顯示文件。第41頁(yè)/共85頁(yè)例如,當(dāng)執(zhí)行下列命令后,將顯示圖10-2所示的輸入窗口。Name= InputBox(輸入查詢(xún)的學(xué)生姓名, 輸入命令演示, , , , demo.hlp, 10

42、)圖10-2 InputBox()函數(shù)輸入對(duì)話(huà)框第42頁(yè)/共85頁(yè)2 2MsgBOX() MsgBOX() 函數(shù):函數(shù): MsgBOX() 函數(shù)是產(chǎn)生消息框的函數(shù),消息框通常用來(lái)顯示一些提示信息,供用戶(hù)選擇,例如是選擇“確定”還是選擇“取消”等。 MsgBOX() 函數(shù)的格式: MsgBox (提示信息,消息類(lèi)型標(biāo)志+按鈕類(lèi)型+默認(rèn)按鈕,標(biāo)題信息,幫助文件,內(nèi)容) 功能:功能: 在程序運(yùn)行中顯示提示信息,產(chǎn)生一個(gè)對(duì)話(huà)框,等待用戶(hù)單擊選擇的按鈕,并返回一個(gè)整數(shù)值,用戶(hù)可根據(jù)返回的值,決定下一步的操作。其中:其中:提示信息是需要在屏幕上顯示的信息。 消息類(lèi)型標(biāo)志是顯示的圖形標(biāo)志。如表10-9 所示

43、 按鈕類(lèi)型是指顯示的按鈕類(lèi)型,如表10-10所示 第43頁(yè)/共85頁(yè) 默認(rèn)按鈕是在設(shè)定在多個(gè)按鈕中的默認(rèn)按鈕,如表10-11所示。 標(biāo)題是顯示框的標(biāo)題 幫助文件是當(dāng)在顯示的對(duì)話(huà)框中選擇了“幫助”時(shí),系統(tǒng)調(diào)用的幫助文件名。 表10-9 消息類(lèi)型圖形標(biāo)志符號(hào)常量符號(hào)常量值值vbCriticalvbCritical16 16 圖形圖形vbQuestionvbQuestion32 32 ?圖形?圖形vbExclamqtionvbExclamqtion48 48 !圖形!圖形vbInformationvbInformation64 i64 i圖形圖形第44頁(yè)/共85頁(yè)表10-10 按鈕類(lèi)型值符號(hào)常量符號(hào)

44、常量值值在消息對(duì)話(huà)框顯示的按鈕在消息對(duì)話(huà)框顯示的按鈕vbOkOnly0“確定確定”按鈕按鈕vbOkCancel1“確定確定”、“取消取消”按鈕按鈕vbAbortRetryIgnore2“終止終止”“”“重試重試”“”“忽略忽略”按鈕按鈕vbYesNoCancel3“是是”“”“否否”“”“取消取消”按鈕按鈕vbYesNo4“是是”“”“否否”按鈕按鈕vbRetryCancel5“重試重試”“”“取消取消”按鈕按鈕表10-11 默認(rèn)按鈕值符號(hào)常量符號(hào)常量值值缺省的活動(dòng)按鈕缺省的活動(dòng)按鈕vbDefaultButtion10第一個(gè)按鈕第一個(gè)按鈕vbDefaultButtion2256第二個(gè)按鈕第二個(gè)

45、按鈕vbDefaultButtion3512第三個(gè)按鈕第三個(gè)按鈕第45頁(yè)/共85頁(yè)例如,當(dāng)執(zhí)行下列命令后,將顯示圖10-3所示的窗口。MsgBox (“選擇正確嗎?”,vbQuestion+vbOKCancel+vbDefaultButtion1, “項(xiàng)目選擇”)圖10-3 MsgBOX() 函數(shù)執(zhí)行結(jié)果 第46頁(yè)/共85頁(yè)103VBA程序結(jié)構(gòu) VBA程序設(shè)計(jì)采用三種基本的控制結(jié)構(gòu),即順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。這三種基本的控制結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的基礎(chǔ),它可使程序結(jié)構(gòu)清晰、易讀性強(qiáng),以提高程序設(shè)計(jì)的質(zhì)量和效率。 第47頁(yè)/共85頁(yè)10.3.110.3.1順序結(jié)構(gòu)順序結(jié)構(gòu) 順序結(jié)構(gòu)是最簡(jiǎn)單的

46、程序結(jié)構(gòu),它按命令在程序中出現(xiàn)的先后次序執(zhí)行。執(zhí)行順序如圖10-4所示圖10-4 順序程序執(zhí)行流程第48頁(yè)/共85頁(yè)10103 32 2分支程序分支程序 程序中往往需要判斷某個(gè)表達(dá)式,通過(guò)判斷的結(jié)果轉(zhuǎn)向執(zhí)行不同的語(yǔ)句。 “分支程序”,是根椐對(duì)給定條件的判斷,選擇不同執(zhí)行路徑的程序結(jié)構(gòu)。通常根椐執(zhí)行路徑的分支數(shù)分為“簡(jiǎn)單分支結(jié)構(gòu)“、“雙分支選擇結(jié)構(gòu)”和“多分支選擇結(jié)構(gòu)”。1 1簡(jiǎn)單分支簡(jiǎn)單分支(If(IfThenThen語(yǔ)句語(yǔ)句) )(1)簡(jiǎn)單分支的格式: IF Then END IF 或: If Then 第49頁(yè)/共85頁(yè) 功能:首先判斷的值,若為真,則執(zhí)行IF與END IF之間的語(yǔ)句行序列

47、,然后執(zhí)行ENDIF后的語(yǔ)句;否則,直接執(zhí)行ENDIF后的語(yǔ)句。其執(zhí)行過(guò)程如圖10-5所示。2 2雙分支結(jié)構(gòu)雙分支結(jié)構(gòu)(1)命令格式: IF Then ELSE END IF 第50頁(yè)/共85頁(yè) (2)功能:若IF語(yǔ)句中的值為真,則執(zhí)行,然后執(zhí)行END IF后面的語(yǔ)句;若IF語(yǔ)句中的值為假,則執(zhí)行ELSE 后面的,然后執(zhí)行END IF后面的語(yǔ)句。其執(zhí)行過(guò)程如圖10-6所示。圖10-5 簡(jiǎn)單分支結(jié)構(gòu)圖10-6雙分支結(jié)構(gòu)第51頁(yè)/共85頁(yè) 在實(shí)際應(yīng)用中,經(jīng)常使用If語(yǔ)句的嵌套格式,即一個(gè)If語(yǔ)句里又包含另一個(gè)If語(yǔ)句。 實(shí)例實(shí)例10-110-1:某商場(chǎng)為了促銷(xiāo),采用購(gòu)物打折的優(yōu)惠辦法,每位顧客一次

48、購(gòu)物的費(fèi)用的打折優(yōu)惠按以下方法計(jì)算: 1000元至2000元,按九五折優(yōu)惠。 2000元至3000元,按九折優(yōu)惠。 3000元至5000元,按八五折優(yōu)惠。 5000元以上,按八折優(yōu)惠。 編寫(xiě)程序,輸入購(gòu)物款數(shù),計(jì)算并輸出優(yōu)惠價(jià)。 第52頁(yè)/共85頁(yè)代碼如下:代碼如下:Private Sub Command1_Click()Dim x As Single, y As Single x = Val(Text1) If x 1000 Then y = x Else If x 2000 Then y = 0.95 * x Else If x 3000 Then y = 0.9 * x第53頁(yè)/共85頁(yè)

49、Else If x 5000 Then y = 0.85 * x Else y = 0.8 * x End If End If End If End If Text2 = Str(y)End Sub第54頁(yè)/共85頁(yè)3 3帶帶ElseIfElseIf的塊的塊IfIf語(yǔ)句語(yǔ)句 實(shí)例10-110-1的程序出現(xiàn)多次If語(yǔ)句的嵌套,程序長(zhǎng),不便閱讀。為此VBA提供了帶ElseIf的塊If語(yǔ)句,使程序簡(jiǎn)化易寫(xiě)。其格式如下: If Then Elself Then Else End If第55頁(yè)/共85頁(yè)實(shí)例實(shí)例10-210-2:將實(shí)例10-110-1改寫(xiě)成帶ElselfElself的塊IfIf語(yǔ)句格式代

50、碼如下: Private Sub Command1_Click() Dim x As Single, y As Single x=Val(Text1) If x1000 Then y=x ElseIf x2000 Then y=0.95*x ElseIf x3000 Then y=0.9*x ElseIf x5000 Then y=0.85*x Else y=0.8*x End If Text2 =Str(y)End Sub 第56頁(yè)/共85頁(yè)4 4多分支選擇結(jié)構(gòu)多分支選擇結(jié)構(gòu) IFEND IF語(yǔ)句雖然能實(shí)現(xiàn)條件的分支,但對(duì)于多個(gè)條件的判斷,如仍用IFEND IF語(yǔ)句結(jié)構(gòu),程序就復(fù)雜得多。多分

51、支選擇結(jié)構(gòu)能解決多條件判斷,并根椐滿(mǎn)足的條件選擇執(zhí)行不同的語(yǔ)句執(zhí)行。 (1)(1)命令格式命令格式Select Case 語(yǔ)句又稱(chēng)情況語(yǔ)句,是多分支結(jié)構(gòu)的另一種形式。其格式如下:Select Case變量或表達(dá)式 Case表達(dá)式列表1 Case表達(dá)式列表2 Case Else End Select第57頁(yè)/共85頁(yè)(2) (2) 功能功能 多分支選擇語(yǔ)句執(zhí)行時(shí)先對(duì)“測(cè)試表達(dá)式”求值,然后測(cè)試該值與哪一個(gè)Case子句中的“表達(dá)式列表”匹配,如果找到了,就執(zhí)行與該Case語(yǔ)句有關(guān)的語(yǔ)句塊,執(zhí)行完后轉(zhuǎn)移到End Select后面的語(yǔ)句;如果沒(méi)有找到,則執(zhí)行與Case Else子句后的語(yǔ)句塊,然后再轉(zhuǎn)

52、移到End Select后面的語(yǔ)句。如果有多個(gè)表達(dá)式匹配,則執(zhí)行第一個(gè)匹配的Case語(yǔ)句有關(guān)的語(yǔ)句塊。 實(shí)例實(shí)例10-310-3:將實(shí)例10-1改寫(xiě)成使用情況語(yǔ)句實(shí)現(xiàn)。本例采用InputBox()函數(shù)輸入購(gòu)物金額,直接用Debug.Print輸出優(yōu)惠金額。第58頁(yè)/共85頁(yè)代碼如下:Private Sub Form_Click() Dim x As Single,y As Single x=InputBox(請(qǐng)輸入購(gòu)物款數(shù)) x=Val(x) Select Case x Case Is1000 y=x Case Is2000 y=0.95*x Case Is3000 y=0.9*x Case

53、Is5000 y=0.85*x第59頁(yè)/共85頁(yè) Case Else y=0.8*x End Select Debug.Print 購(gòu)物款數(shù):;x,優(yōu)惠價(jià):;yEnd Sub 同一個(gè)問(wèn)題,解決的方法可能有多種,用戶(hù)最好選擇自己比較熟悉而又簡(jiǎn)單的方法來(lái)實(shí)現(xiàn)。 第60頁(yè)/共85頁(yè) 表達(dá)式列表的三種形式: 1.逗號(hào)分隔 case 10,20,30 2.to關(guān)鍵字 case 60 to 90 3.is關(guān)鍵字 case is30第61頁(yè)/共85頁(yè)P(yáng)rivate Sub Form_Click() Dim iMonth As Integer 定義月份變量 iMonth = 1 為變量賦值 Select Ca

54、se iMonth 計(jì)算月份 Case Is = 3 月份為1、2、3 MsgBox(春天) Case 4 To 6 月份為4、5、6 MsgBox(夏天) Case 7, 8, 9 月份為7、8、9 MsgBox(秋天) Case Else 月份為10、11、12 MsgBox(冬天) End SelectEnd Sub第62頁(yè)/共85頁(yè)10103 33 3循循 環(huán)環(huán) 語(yǔ)語(yǔ) 句句 順序程序和分支程序中的每條語(yǔ)句,一般只執(zhí)行一次,而在實(shí)際應(yīng)用中,經(jīng)常遇到一些操作并不復(fù)雜,但需要反復(fù)多次處理的問(wèn)題,即重復(fù)執(zhí)行某一段程序。例如,計(jì)算k=n!,如果用順序結(jié)構(gòu)來(lái)處理將十分麻煩,而使用循環(huán)語(yǔ)句則可以輕松

55、實(shí)現(xiàn)。 循環(huán)程序是在指定的條件下多次重復(fù)執(zhí)行的一組語(yǔ)句。VBA提供了如下幾種不同風(fēng)格的循環(huán)結(jié)構(gòu): 計(jì)數(shù)循環(huán)(Forext循環(huán)) While循環(huán) Do循環(huán)(DoLoop循環(huán)) 第63頁(yè)/共85頁(yè)1 1ForFor循環(huán)語(yǔ)句循環(huán)語(yǔ)句 For循環(huán)語(yǔ)句的格式如下: For循環(huán)變量=初值To終值step步長(zhǎng) Exit For Next循環(huán)變量 其中:“循環(huán)變量”也稱(chēng)循環(huán)計(jì)數(shù)器或循環(huán)控制變量,為數(shù)值型?!俺踔怠迸c“終值”均為數(shù)值表達(dá)式?!安介L(zhǎng)”是一個(gè)數(shù)值表達(dá)式,為循環(huán)變量的增量,可正可負(fù);如果省略,默認(rèn)為1。Exit For可用于提前退出For循環(huán)。Next后面的“循環(huán)變量”與For后面的“循環(huán)變量”必須相

56、同第64頁(yè)/共85頁(yè)執(zhí)行過(guò)程:執(zhí)行過(guò)程: (1)把“初值”賦給“循環(huán)變量”。 (2)檢查“循環(huán)變量”是否超過(guò)“終值”,若沒(méi)有,則執(zhí)行“循環(huán)體”,若超出,則結(jié)束循環(huán),執(zhí)行Next后面的語(yǔ)句。 (3)“循環(huán)變量”+“步長(zhǎng)”,轉(zhuǎn)(2),繼續(xù)循環(huán)。由上可以看出ForNext循環(huán)的循環(huán)次數(shù)由“初值”、“終值”和“步長(zhǎng)”3個(gè)因素決定。實(shí)例實(shí)例10-410-4:編程求k=n!(n為自然數(shù),在程序運(yùn)行過(guò)程中從鍵盤(pán)輸入n的值)。 第65頁(yè)/共85頁(yè)代碼如下:Private Sub Commadn1_Click() Dim n As Integer n=InputBox(輸入n的值:) 從鍵盤(pán)輸入n的值 k=1

57、For i=1 To n k=k*i Next i msgbox “n!=”,kEnd Sub第66頁(yè)/共85頁(yè)2 2WhileWhile循環(huán)循環(huán)While循環(huán)的格式如下:While 條件 語(yǔ)句塊Wend當(dāng)條件為T(mén)rue時(shí),執(zhí)行循環(huán)體。 第67頁(yè)/共85頁(yè)3 3Do WhileDo WhileLoopLoop循環(huán)語(yǔ)句循環(huán)語(yǔ)句Do WhileLoop語(yǔ)句格式:DO WHILE Exit Do LOOP執(zhí)行過(guò)程: 當(dāng)條件成立,則執(zhí)行循環(huán)體,遇到LOOP返回到DO語(yǔ)句,繼續(xù)判斷條件,不成立,則退出循環(huán),執(zhí)行LOOP后面的語(yǔ)句,Exit Do的作用是中止循環(huán)的執(zhí)行。第68頁(yè)/共85頁(yè)實(shí)例實(shí)例10-61

58、0-6:編寫(xiě)程序計(jì)算S=1+2+3+100的值。程序代碼如下:程序代碼如下:Private Sub Command1_click() Dim I As Integer Dim S As Integer I=1 S=0 Do While I=100 S=S+I I=I+1 Loop Debug.Print “1+2+3+100=”;SEnd Sub第69頁(yè)/共85頁(yè)數(shù)組1、聲明數(shù)組: Dim sName(2) As String 定義字符串?dāng)?shù)組sName 2、數(shù)組維數(shù):維數(shù)或秩對(duì)應(yīng)于用來(lái)識(shí)別每個(gè)數(shù)組元素的下標(biāo)個(gè)數(shù),一維以上的數(shù)組稱(chēng)為多維數(shù)組。 Dim sName1(2) As String 一維

59、數(shù)組Dim sName2(2, 3) As String 二維數(shù)組Dim sName3(2, 4, 4) As String 三維數(shù)組第70頁(yè)/共85頁(yè)3、數(shù)組大?。簲?shù)組的Length屬性返回?cái)?shù)組中所有維數(shù)中的元素總數(shù)。4、數(shù)據(jù)類(lèi)型:數(shù)組聲明指定一個(gè)數(shù)據(jù)類(lèi)型,數(shù)組的所有元素必須都是該類(lèi)型數(shù)據(jù)。5、數(shù)組初始化:可以在定義數(shù)組的同時(shí)初始化數(shù)組,即數(shù)組的顯式初始化: Dim iAge() As Integer = 12, 34, 56, 78 第71頁(yè)/共85頁(yè)例如:Private sub command1_click() Dim a(10,10) for m=2 to 4 for n=4 to 5

60、 a(m,n)=m*n next n next m msgbox a(2,5)+a(3,4)+a(4,5) End sub第72頁(yè)/共85頁(yè)10.410.4過(guò)程過(guò)程 在實(shí)際編程過(guò)程中,往往把一個(gè)復(fù)雜的程序分成多個(gè)相對(duì)獨(dú)立的部分,每個(gè)部分用一個(gè)功能模塊實(shí)現(xiàn)。從而簡(jiǎn)輕程序設(shè)計(jì)的難度。 VBA的過(guò)程分為兩大類(lèi),一類(lèi)是事件過(guò)程,當(dāng)用戶(hù)或系統(tǒng)在某對(duì)象上觸發(fā)某事件時(shí),會(huì)引發(fā)執(zhí)行對(duì)象的某事件過(guò)程。另一類(lèi)是用戶(hù)自定義過(guò)程,在應(yīng)用程序設(shè)計(jì)時(shí),某一反復(fù)使用的功能可將其定義為過(guò)程,在程序的其他地方可以多次調(diào)用它,以實(shí)現(xiàn)其定義的功能。第73頁(yè)/共85頁(yè)10104 41 1過(guò)程過(guò)程1 1子過(guò)程定義子過(guò)程定義Public

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論