課本課件-第6章程序設(shè)計(jì)基礎(chǔ)_第1頁
課本課件-第6章程序設(shè)計(jì)基礎(chǔ)_第2頁
課本課件-第6章程序設(shè)計(jì)基礎(chǔ)_第3頁
課本課件-第6章程序設(shè)計(jì)基礎(chǔ)_第4頁
課本課件-第6章程序設(shè)計(jì)基礎(chǔ)_第5頁
已閱讀5頁,還剩264頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)據(jù)庫管理系統(tǒng)應(yīng)用第6章程序設(shè)計(jì)基礎(chǔ)2023年1月18日教師:周浪部門:信息工程學(xué)院6.1VBA概述6.2VBA語言基礎(chǔ)6.3VBA模塊的創(chuàng)建6.4VBA程序設(shè)計(jì)基礎(chǔ)6.5過程調(diào)用與參數(shù)傳遞6.6VBA程序錯(cuò)誤處理目錄學(xué)習(xí)要點(diǎn)VBA及模塊的基本概念創(chuàng)建模塊

VBA程序設(shè)計(jì)基礎(chǔ)

VBA流程控制語句過程調(diào)用和參數(shù)傳遞VBA程序運(yùn)行錯(cuò)誤處理與調(diào)試6.1VBA概述

VBA:VisualBasicforApplication。VisualBasic(VB)是微軟公司開發(fā)的一種面向?qū)ο蟮目梢暬幊陶Z言,而VBA就是這種語言在Office軟件編程中的應(yīng)用。6.1.1VB編程環(huán)境:VBE

VBE(VisualBasicEditor)是編輯VBA代碼時(shí)使用的界面。AddYourTexthere工程窗口標(biāo)準(zhǔn)工具條屬性窗口監(jiān)視窗口本地窗口代碼窗口立即窗口VBE窗口P170立即窗口?<變量名或表達(dá)式>

在立即窗口中,可以輸入或粘貼一行代碼并執(zhí)行該代碼。

在立即窗口中顯示變量或表達(dá)式的值的命令:

立即窗口中的代碼是不被保存的。

通過Alt+F11組合鍵,可以在數(shù)據(jù)庫窗口和VBE窗口之間進(jìn)行切換。進(jìn)入VBE編程環(huán)境(1)第七章中介紹,略

對(duì)于類模塊:進(jìn)入VBE編程環(huán)境(2)

對(duì)于標(biāo)準(zhǔn)模塊:(1)創(chuàng)建新的標(biāo)準(zhǔn)模塊時(shí)自動(dòng)進(jìn)入VBE。(2)修改已存在的標(biāo)準(zhǔn)模塊時(shí)自動(dòng)進(jìn)入VBE。

(3)單擊“數(shù)據(jù)庫工具”選項(xiàng)卡的“宏”組中的“VisualBasic”按鈕即可進(jìn)入VBE。1.注釋語句該語句常用在對(duì)整個(gè)的注釋。

注釋語句是為了增加程序的可讀性,默認(rèn)以綠色文本顯示。

(1)序言式注釋

(2)語句注釋

格式:Rem注釋語句該語句可直接位于其他語句之后。

格式:'注釋語句6.1.2VBA程序書寫原則6.1.2VBA程序書寫原則當(dāng)輸入一行語句并按Enter鍵后,如果該代碼以紅色文本顯示,則表明該行語句存在錯(cuò)誤。通常將一個(gè)語句寫在一行;語句較長(zhǎng)時(shí),在適當(dāng)位置可用續(xù)行符“_”將語句連寫在下一行;(續(xù)行符前應(yīng)有一個(gè)空格)可以用冒號(hào)“:”將幾個(gè)較短的語句寫在同一行中。2.語句書寫規(guī)定6.2.1數(shù)據(jù)類型Access數(shù)據(jù)表中的字段所使用的數(shù)據(jù)類型(OLE對(duì)象、備注、附件和計(jì)算型數(shù)據(jù)類型除外)在VBA中都有對(duì)應(yīng)的數(shù)據(jù)類型。與前基本一致,不再贅述,重點(diǎn)掌握各種類型的常量表示。VBA基本數(shù)據(jù)類型見P174表6-2所示。6.2VBA語言基礎(chǔ)6.2.2常量、變量與數(shù)組

常量是指在程序的運(yùn)行過程中,其值不能被改變的量。

變量是指程序運(yùn)行時(shí)其值會(huì)發(fā)生變化的數(shù)據(jù)。每個(gè)變量都有變量名,使用變量前可以指定其數(shù)據(jù)類型(顯式聲明),也可以不指定其數(shù)據(jù)類型(隱式聲明)。

數(shù)組是由一組具有相同數(shù)據(jù)類型的變量(即數(shù)組元素)構(gòu)成的集合。1.常量在Access中,常量的類型有以下3種:Const語句創(chuàng)建符號(hào)常量True、False等系統(tǒng)常量預(yù)定義的內(nèi)部常量?jī)?nèi)部常量(1)符號(hào)常量

若在代碼中要反復(fù)使用某個(gè)相同的值,或代表一些具有特定意義的數(shù)字或字符串,可以使用符號(hào)常量。

定義格式:Const

符號(hào)常量名[As數(shù)據(jù)類型]=表達(dá)式ConstPI=3.14ConstMYBIRTHDAY=#2003-4-1#【例】P175

(2)內(nèi)部常量VBA提供了一些預(yù)定義的內(nèi)部符號(hào)常量,它們主要作為DoCmd命令語句中的參數(shù)。內(nèi)部常量以兩個(gè)前綴字母指明了定義該常量的對(duì)象庫,如:acForm、acCmdFont、VbKeyDelete等。通過對(duì)象瀏覽器可以查看所有可用對(duì)象庫中的內(nèi)部常量。(3)系統(tǒng)常量P265

系統(tǒng)定義的常量有七個(gè):True、False、Null、Yes、No、On、Off

系統(tǒng)常量可以在所有應(yīng)用程序中直接使用。2.內(nèi)存變量1)變量的命名規(guī)則:P175變量名只能由字母、數(shù)字、漢字和下劃線組成,不能含有空格和除下劃線之外的其它字符,長(zhǎng)度不能超過255個(gè)字符。

變量名必須以字母或漢字開頭,且不區(qū)分字母的大小寫。

變量名不能使用VBA的關(guān)鍵字。2)變量的創(chuàng)建方法(1)自動(dòng)創(chuàng)建變量(隱式聲明)自動(dòng)創(chuàng)建變量,也稱隱式聲明變量。即在使用變量前沒有聲明其數(shù)據(jù)類型,借助將一個(gè)值賦予變量名的方式來建立變量。

因?yàn)樵谧兞棵Q后沒有附加類型說明,所以數(shù)據(jù)類型默認(rèn)為變體數(shù)據(jù)類型(Variant)?!纠縜a="Hello"bb=207

僅在當(dāng)前過程有效。不提倡?。?)顯式聲明創(chuàng)建變量Dim變量名[As數(shù)據(jù)類型]Dim變量名1[As數(shù)據(jù)類型],變量名2[As數(shù)據(jù)類型],…,變量名n[As數(shù)據(jù)類型]

如果不使用As選項(xiàng)來定義變量的數(shù)據(jù)類型,系統(tǒng)默認(rèn)該變量為Variant數(shù)據(jù)類型。2)變量的創(chuàng)建方法

先定義,再使用變量。提倡!舉例(1)DimVar1AsInteger將Var1變量定義為整型(2)DimVar2AsDouble將Var2變量定義為雙精度型(3)DimVar3AsSingle,Var4AsString將Var3定義為單精度型、Var4定義為字符串類型(5)Dimaa,bb,ccAsCurrency將cc變量定義為貨幣型,aa、bb變量定義為變體類型(4)Dimabc定義abc變量,為變體數(shù)據(jù)類型補(bǔ)充:類型說明符

使用類型說明符定義變量的數(shù)據(jù)類型時(shí),必須將其放在變量名的最后。

舉例:

Var1%=1234Var2#=123.45Var3$="abc"’類型為:Integer’類型為:Double’類型為:String強(qiáng)制聲明

為了避免使用隱式聲明變量,可以在程序開始處使用OptionExplicit語句來強(qiáng)制使用顯式聲明變量。3)變量的使用范圍(作用域)過程變量(局部變量)局部變量只能在定義它的過程內(nèi)使用,在其它的過程中無法存取局部變量。私有模塊變量只能在定義它的模塊(包括模塊的子過程)內(nèi)使用模塊變量。在模塊的聲明區(qū)域用Private聲明。公共模塊變量(全局變量)在任何模塊和過程中都可以訪問全局變量。全局變量需要在模塊的聲明區(qū)域用Public聲明。全局/模塊變量聲明方式Public變量名[As數(shù)據(jù)類型]P266

全局變量聲明方式:Private變量名[As數(shù)據(jù)類型]

模塊變量(私有變量)聲明方式:

全局變量和模塊變量必須在模塊/窗體的聲明區(qū)域中聲明。變量的使用規(guī)則與作用域P176作用范圍局部變量模塊變量全局變量聲明方式聲明位置能否被本模塊的其他過程存取能否被其他模塊的過程存取Dim、StaticDim、PrivatePublic在子過程中在窗體/模塊的聲明區(qū)域在標(biāo)準(zhǔn)模塊的聲明區(qū)域不能不能不能能能能(1)全局變量與私有變量的比較全局變量與私有變量的比較(2)私有變量與局部變量的比較私有變量與局部變量的比較(3)靜態(tài)變量與非靜態(tài)變量靜態(tài)變量與非靜態(tài)變量第一次執(zhí)行CC1第二次執(zhí)行CC13.數(shù)組

數(shù)組是一種特殊的變量,由數(shù)組名和數(shù)組下標(biāo)組成。

VBA中不允許隱式說明數(shù)組,數(shù)組在使用前必須用Dim命令聲明,說明數(shù)組的大小、數(shù)據(jù)類型及作用范圍。數(shù)組的類型靜態(tài)數(shù)組中的元素個(gè)數(shù)在聲明時(shí)被指定,在程序運(yùn)行時(shí)不能改變數(shù)組元素的個(gè)數(shù)。

數(shù)組有兩種類型:____________和___________。靜態(tài)數(shù)組動(dòng)態(tài)數(shù)組

(1)聲明靜態(tài)數(shù)組3.數(shù)組(1)聲明靜態(tài)數(shù)組Dim

數(shù)組名([下標(biāo)下界to]下標(biāo)上界)[As數(shù)據(jù)類型]

語法格式:一維數(shù)組二維或多維數(shù)組Dim

數(shù)組名([下標(biāo)下界to]下標(biāo)上界[,…])[As數(shù)據(jù)類型](1)聲明靜態(tài)數(shù)組說明As選項(xiàng)缺省時(shí),數(shù)組中各元素為變體數(shù)據(jù)類型。下標(biāo)下界的默認(rèn)值為0,如果設(shè)置下標(biāo)下界為非0值,既可以使用to選項(xiàng),也可以在模塊的通用聲明部分用OptionBase來更改數(shù)組的默認(rèn)下標(biāo)下界。OptionBase1設(shè)置數(shù)組的下標(biāo)下界為1OptionBase0設(shè)置數(shù)組的下標(biāo)下界為默認(rèn)值OptionBase格式:【例】Dimaa(5)AsSingleDimbb(1to6,2to7)AsStringDimcc(2to5,3to8,10)AsBooleanDimdd(3,1to4)2)數(shù)組的使用

語法格式:數(shù)組名(下標(biāo)值)下標(biāo)值是指定范圍內(nèi)(上下界之間)的一個(gè)整數(shù),其值不能超出這個(gè)范圍。如果是多維數(shù)組,則下標(biāo)各整數(shù)間用逗號(hào)隔開。

【例】A1(0,0)="ABC"B1(3)=True3)聲明動(dòng)態(tài)數(shù)組動(dòng)態(tài)數(shù)組中的元素個(gè)數(shù)在聲明時(shí)不指定,在程序運(yùn)行時(shí)可以改變數(shù)組元素中的個(gè)數(shù)。建立動(dòng)態(tài)數(shù)組的步驟DimArray()(1)用Dim聲明空的動(dòng)態(tài)數(shù)組,但不指定數(shù)組元素的個(gè)數(shù)。如:ReDimArray(5,10)(2)然后用ReDim語句配置數(shù)組個(gè)數(shù)。說明:ReDim語句只能出現(xiàn)在過程中,可以改變數(shù)組的大小和上下界,但不能改變數(shù)組的維數(shù)。說明(1)

使用ReDim重新聲明數(shù)組后,原有數(shù)組元素中的值將全部清除并取其默認(rèn)值。數(shù)據(jù)類型默認(rèn)值數(shù)值型包括:整型、長(zhǎng)整型、單精度型、雙精度型和貨幣型。數(shù)值型字符型布爾型日期型變體類型數(shù)據(jù)庫對(duì)象0空字符串False00:00:00EmptyNothing說明(2)若要保留數(shù)組中元素原有的值,則需在ReDim后加Preserve選項(xiàng)。ReDim[Preserve]Array(5,10)Preserve可以改變數(shù)組中最后一維的上界,但不能改變這一維的下界,改變下界將導(dǎo)致錯(cuò)誤。

若改變后的數(shù)組比原來小,則多余數(shù)據(jù)將丟失。舉例(1)舉例(2)6.2.3標(biāo)準(zhǔn)函數(shù)

函數(shù)的標(biāo)準(zhǔn)形式:函數(shù)名不可缺省。函數(shù)名(<參數(shù)列表>)函數(shù)的參數(shù)可以是常量、變量或表達(dá)式,且置于函數(shù)名后的圓括號(hào)中,多個(gè)參數(shù)間用逗號(hào)隔開。函數(shù)無參數(shù)時(shí),其后的圓括號(hào)可以省略。函數(shù)被調(diào)用時(shí),都會(huì)返回一個(gè)特定類型的值。注意事項(xiàng)

對(duì)每一個(gè)函數(shù)需掌握:(1)函數(shù)名(2)參數(shù)(個(gè)數(shù)、順序、類型、含義)(3)函數(shù)功能(4)返回值及其類型1.數(shù)學(xué)函數(shù)

(1)絕對(duì)值函數(shù)功能:返回參數(shù)的絕對(duì)值A(chǔ)bs(<數(shù)值表達(dá)式>)【例】Abs(-25)25Abs(12\5+(-2)^3)6返回值數(shù)據(jù)類型:數(shù)值型1.數(shù)學(xué)函數(shù)

(2)向下取整函數(shù)返回值數(shù)據(jù)類型:數(shù)值型Int(<數(shù)值表達(dá)式>)【例】Int(3.56)3Int(-3.56)-4參數(shù)為負(fù)值時(shí)返回小于等于參數(shù)值的最大負(fù)數(shù)。功能:返回參數(shù)的向下取整的值1.數(shù)學(xué)函數(shù)

(3)取整函數(shù)(靠0取整)返回值數(shù)據(jù)類型:數(shù)值型Fix(<數(shù)值表達(dá)式>)【例】Fix(3.56)3Fix(-3.56)-3參數(shù)為負(fù)值時(shí)返回大于等于參數(shù)值的最小負(fù)數(shù)。功能:返回參數(shù)的整數(shù)部分1.數(shù)學(xué)函數(shù)

(4)求算術(shù)平方根函數(shù)返回值數(shù)據(jù)類型:雙精度型Sqr(<數(shù)值表達(dá)式>)【例】Sqr(9)3Sqr(Sqr(16))2功能:計(jì)算參數(shù)的算術(shù)平方根1.數(shù)學(xué)函數(shù)

(5)三角函數(shù)返回值數(shù)據(jù)類型:雙精度型Sin(<數(shù)值表達(dá)式>)功能:計(jì)算參數(shù)的正弦、余弦和正切值Cos(<數(shù)值表達(dá)式>)Tan(<數(shù)值表達(dá)式>)參數(shù)是以弧度為單位的角度值。1.數(shù)學(xué)函數(shù)【例】Pi=3.1415927Sin(90*Pi/180)1Cos(60*Pi/180)0.50000Tan(45*Pi/180)1.000001.數(shù)學(xué)函數(shù)(6)隨機(jī)函數(shù)返回值數(shù)據(jù)類型:?jiǎn)尉刃蚏nd(<數(shù)值表達(dá)式>)【例】Int(100*Rnd)產(chǎn)生1個(gè)[0,99]的隨機(jī)整數(shù)Int(100*Rnd)+1產(chǎn)生1個(gè)[1,100]的隨機(jī)整數(shù)功能:產(chǎn)生一個(gè)大于等于0且小于1的隨機(jī)數(shù)1.數(shù)學(xué)函數(shù)(7)四舍五入函數(shù)返回值數(shù)據(jù)類型:雙精度型Round(<數(shù)值表達(dá)式1>[,<數(shù)值表達(dá)式2>])功能:對(duì)<數(shù)值表達(dá)式1>的值按<數(shù)值表達(dá)式2>指定小數(shù)位數(shù)進(jìn)行四舍五入【例】Round(123.456,1)123.5Round(123.456,2)123.46Round函數(shù)Round(123.456,0)123Round(123.456)1232.字符串函數(shù)

(1)字符串檢索函數(shù)功能:返回String2在String1中最早出現(xiàn)的位置InStr([Start,]String1,String2[,Compare])返回值數(shù)據(jù)類型:長(zhǎng)整型InStr函數(shù)Compare指定字符串比較的方法,其值可以是:0

做二進(jìn)制比較1

不區(qū)分大小寫的文本比較(默認(rèn))2

基于數(shù)據(jù)庫中包含信息的比較如果指定了Compare參數(shù),則一定要有Start參數(shù)?!纠?】InStr(3,"abcdABCD","BC")6InStr函數(shù)InStr("abcdABCD","BC")2InStr(1,"abcdABCD","BC",0)62.字符串函數(shù)

(2)字符串長(zhǎng)度檢測(cè)函數(shù)功能:返回字符串所含字符數(shù)Len(<字符表達(dá)式>|<變量名>)返回值數(shù)據(jù)類型:長(zhǎng)整型如果變量是字符型,則函數(shù)返回的即為該變量所含的字符數(shù)(未賦值時(shí)返回0)。如果變量是其它數(shù)據(jù)類型,則函數(shù)返回的即為該數(shù)據(jù)類型所占空間?!纠?】Len("123.456")7Len函數(shù)Len("abc"+"南京")52.字符串函數(shù)

(3)取子串函數(shù)功能:從字符表達(dá)式中截取一個(gè)子字符串Left(<字符表達(dá)式>,<N>)返回值數(shù)據(jù)類型:字符型Right(<字符表達(dá)式>,<N>)Mid(<字符表達(dá)式>,<N1>[,<N2>])【例1】字符串截取函數(shù)Left("abcd南京",3)abcRight("abcd南京",2)南京Mid("abcd南京",5,2)南京Mid("abcd南京",3)cd南京2.字符串函數(shù)

(4)生成空格函數(shù)功能:返回?cái)?shù)值表達(dá)式所指定的空格數(shù)Space(<數(shù)值表達(dá)式>)返回值數(shù)據(jù)類型:字符型Space(2*3)""【例】Space(0)""2.字符串函數(shù)

(5)大小寫轉(zhuǎn)換函數(shù)功能:將字符串中的小寫字母轉(zhuǎn)換成大寫字母Ucase(<字符串表達(dá)式>)返回值數(shù)據(jù)類型:字符型功能:將字符串中的大寫字母轉(zhuǎn)換成小寫字母Lcase(<字符串表達(dá)式>)返回值數(shù)據(jù)類型:字符型【例】大小寫轉(zhuǎn)換函數(shù)Ucase("abcABC")ABCABCLcase("abcABC")Lcase(Ucase("abc"))abcabcabc2.字符串函數(shù)

(6)去除空格函數(shù)功能:刪除字符串的首部、尾部和首尾空格LTrim(<字符表達(dá)式>)返回值數(shù)據(jù)類型:字符型RTrim(<字符表達(dá)式>)Trim(<字符表達(dá)式>)【例】刪除空格函數(shù)"X"<rim("ab")&"Y"XabY"X"&RTrim("ab")&"Y""X"&Trim("ab")&"Y"XabYXabY3.日期/時(shí)間函數(shù)

(1)系統(tǒng)日期和時(shí)間函數(shù)功能:返回當(dāng)前系統(tǒng)日期Date()返回值數(shù)據(jù)類型:日期時(shí)間型Time()Now()功能:返回當(dāng)前系統(tǒng)時(shí)間功能:返回當(dāng)前系統(tǒng)日期和時(shí)間返回的日期格式由操作系統(tǒng)設(shè)置的日期格式?jīng)Q定3.日期/時(shí)間函數(shù)

(2)截取日期分量函數(shù)功能:返回日期表達(dá)式年份Year(<日期表達(dá)式>)返回值數(shù)據(jù)類型:整型如果參數(shù)中略去了年份,則返回系統(tǒng)日期中的年份【例】Year(#2011-10-20#)+102021Year(Date())-Year(#2000-1-1#)14截取日期分量函數(shù)功能:返回日期表達(dá)式月份Month(<日期表達(dá)式>)返回值數(shù)據(jù)類型:整型【例】Month(#2011-10-8#)+1020截取日期分量函數(shù)功能:返回日期表達(dá)式日期Day(<日期表達(dá)式>)返回值數(shù)據(jù)類型:整型【例】Day(#2011-10-20#)+1030截取日期分量函數(shù)功能:返回1~7的整數(shù),表示星期幾Weekday(<日期表達(dá)式>[,w])返回值數(shù)據(jù)類型:整型

參數(shù)w用來指定一星期的第一天:常數(shù)值描述常數(shù)值描述vbSunday1星期日(默認(rèn)值)vbThursday5星期四vbMonday2星期一vbFriday6星期五vbTuesday3星期二vbSaturday7星期六vbWednesday4星期三Weekday函數(shù)【例】Weekday(#2015-10-01#)5Weekday(#2015-10-01#,vbSunday)5Weekday(#2015-10-01#,2)43.日期/時(shí)間函數(shù)

(3)截取時(shí)間分量函數(shù)功能:返回時(shí)間表達(dá)式的小時(shí)數(shù)Hour(<時(shí)間表達(dá)式>)返回值數(shù)據(jù)類型:整型Minute(<時(shí)間表達(dá)式>)Second(<時(shí)間表達(dá)式>)功能:返回時(shí)間表達(dá)式的分鐘數(shù)功能:返回時(shí)間表達(dá)式的秒數(shù)截取時(shí)間分量函數(shù)【例】Hour(#2011-10-0110:20:30#)10Minute(#2011-10-0110:20:30#)20Second(#2011-10-0110:20:30#)30Minute(#10:20:30#)20Second(#10:20#)0Hour(Null)Null3.日期/時(shí)間函數(shù)(4)DateSerial函數(shù)

功能:返回包含指定年、月、日的日期

DateSerial(<年份>,<月份>,<日>)

返回值數(shù)據(jù)類型:日期型

<年份>為100~9999間的整型數(shù)據(jù),或一個(gè)數(shù)值表達(dá)式,表示返回日期的年份。

<月份>為整型數(shù)據(jù)或數(shù)值表達(dá)式,表示返回日期的月份。

<日>為整型數(shù)據(jù)或數(shù)值表達(dá)式,表示返回的日期。DateSerial函數(shù)【例】DateSerial(2011,10,20)2011-10-20DateSerial(2011,13,32)2012-2-1DateSerial(2011+10,10+5,23+20)2022-4-12DateSerial(2015,3,0)2015-2-28DateSerial(2011,0,1)2010-12-13.日期/時(shí)間函數(shù)功能:返回代表指定日期的指定日期部分的時(shí)間間隔。返回值數(shù)據(jù)類型:整型參數(shù):interval,時(shí)間間隔,如P184表6-6 Date,要計(jì)算的指定日期例如:Datepart(“w”,#2015-10-1#),返回5Datepart(“ww”,#2015-10-1#),返回40。

DatePart(<interval>,<date>)(5)DatePart函數(shù)3.日期/時(shí)間函數(shù)語法:DateAdd(<Interval>,<number>,<date>)功能:在向指定日期加上一段時(shí)間的基礎(chǔ)上,返回新的datetime值。yyyy

年yearq

季Quarterm

月Monthy 一年的日數(shù)d

日Dayw 一周的日數(shù)ww

周WeekDayh 時(shí)Hourm 分鐘Minutes 秒Seconddateadd("ww",3,#2015-10-1#)返回:2015/10/22(6)DateAdd函數(shù)3.日期/時(shí)間函數(shù)(7)DateDiff函數(shù)DateDiff(<Interval>,<startdate>,<enddate>)功能:返回兩個(gè)指定日期之間的日期間隔或時(shí)間間隔。返回值數(shù)據(jù)類型:整型例:datediff("yyyy",#2000-9-20#,#2015-10-1#)

結(jié)果為154.類型轉(zhuǎn)換函數(shù)(1)ASCII函數(shù)功能:返回字符表達(dá)式中第1個(gè)字符的ASCII碼值A(chǔ)sc(<字符串達(dá)式>)返回值數(shù)據(jù)類型:整型Asc("abcd")97Asc("ABCD")65【例】Asc("")出錯(cuò)Asc("南京")-15153Asc("")324.類型轉(zhuǎn)換函數(shù)(2)Chr函數(shù)功能:返回與字符代碼相對(duì)應(yīng)的字符Chr(<字符代碼>)返回值數(shù)據(jù)類型:字符型Chr(97)aChr(65)A【例】Chr(13)回車符Chr(-15153)南"AB"+Chr(10)+"CD"ABCDChr(10)為換行字符4.類型轉(zhuǎn)換函數(shù)(3)數(shù)值轉(zhuǎn)字符串函數(shù)功能:將數(shù)值表達(dá)式的值轉(zhuǎn)換為字符串Str(<數(shù)值表達(dá)式>)返回值數(shù)據(jù)類型:字符型

當(dāng)一個(gè)數(shù)字轉(zhuǎn)換成字符串時(shí),會(huì)在其前頭保留一個(gè)空格來表示正負(fù)。表達(dá)式值為正,返回的字符串包含一前導(dǎo)空格表示正號(hào)。Str函數(shù)【例】■表示一個(gè)空格Str(123)+"abc"■123abcStr(-123)+"abc"-123abc"abc"+Str(123)abc■123"abc"+Str(-123)abc-123Str(12.3)ߛ-10-1#■12.32011-10-1True&Str(12.3)True■12.34.類型轉(zhuǎn)換函數(shù)(4)字符串轉(zhuǎn)數(shù)值函數(shù)功能:將由數(shù)字組成的字符串轉(zhuǎn)換為數(shù)值型Val(<字符串表達(dá)式>)返回值數(shù)據(jù)類型:數(shù)值型數(shù)字字符串轉(zhuǎn)換時(shí)可自動(dòng)將字符串中的空格、制表符和換行符去掉。轉(zhuǎn)換時(shí)當(dāng)遇到系統(tǒng)不能識(shí)別為數(shù)字的第一個(gè)字符時(shí),停止字符串的轉(zhuǎn)換。Val函數(shù)【例】Val("123")+100223Val("12.3")+100112.3Val("-12■34")-1000-2234Val("12■3.4")123.4Val("12ab34")12Val("ab34")0Val("2E3")20005.條件函數(shù)

(1)IIF函數(shù)IIF(條件表達(dá)式,表達(dá)式1,表達(dá)式2)

功能:根據(jù)條件表達(dá)式的值,返回兩個(gè)值中的一個(gè)。

說明:當(dāng)條件表達(dá)式的值為真時(shí),返回表達(dá)式1的值,否則返回表達(dá)式2的值。

格式:IIF函數(shù)舉例【例1】根據(jù)cj變量的取值返回“及格”或“不及格”。Cj=85Result=IIf(cj<60,“不及格”,“及格”)【例2】Y=IIf(X>=0,

1,-1)1x>=0Y=-1x<0IIF函數(shù)舉例【例3】

1x>0Y=0x=0-1x<0IIF函數(shù)舉例Y=IIf(X>

0,

1,IIf(X=0,0,-1))

(2)Switch函數(shù)Switch(Expr1,Value1[,Expr2,Value2,…])

功能:

依次判斷各條件表達(dá)式的值,當(dāng)某一表達(dá)式的值為True時(shí),即輸出其后的值。

說明:條件表達(dá)式是由左至右進(jìn)行計(jì)算判斷的。

格式:5.條件函數(shù)Switch函數(shù)舉例【例1】根據(jù)輸入的成績(jī)Score判定等級(jí):若低于60分為“不及格”;若大于等于60分且小于85分為“及格”;若大于等于85分且小于等于100分為“良好”。Result=Switch

(

Score<60,

"不及格",_

Score<85,

"及格",

Score<=100,

"良好"

)【例2】

1x>0Y=0x=0-1x<0Y=Switch(X>

0,1,X=0,0,X<0,-1)Switch函數(shù)舉例(3)Choose函數(shù)Choose(Index,Choice1[,Choice2,…])

功能:根據(jù)Index的值從其后的列表中選擇并返回一個(gè)值。

說明:只有當(dāng)Index的值介于1和可選的項(xiàng)目數(shù)之間,函數(shù)才會(huì)返回其后對(duì)應(yīng)的選項(xiàng)的值,否則返回?zé)o效值(Null)。

格式:5.條件函數(shù)Choose函數(shù)舉例【例1】將輸入的數(shù)字x(1~9)轉(zhuǎn)換為相應(yīng)的英文單詞。cResult=Choose(x,"One","Two","Three",_"Four","Five","Six","Seven",_"Eight","Nine")Choose函數(shù)舉例【例2】根據(jù)輸入的數(shù)字x返回相應(yīng)的星期幾。cResult=Choose(x,"星期一","星期二",_"星期三","星期四","星期五",_"星期六","星期日","輸入錯(cuò)誤!")(1)輸入框函數(shù)(InputBox)功能:在對(duì)話框中顯示提示信息,等待用戶輸入正文并單擊按鈕,并返回文本框中輸入的字符串。InputBox(Prompt[,Title][,Default][,Xpos][,Ypos][,Helpfile,Context])返回值數(shù)據(jù)類型:字符型6.其他函數(shù)參數(shù)說明

Prompt提示字符串,最大長(zhǎng)度約為1024個(gè)字符。如果包含多行,那么可以在各行之間用回車符Chr(13)、換行符Chr(10)或者它們的組合Chr(13)&Chr(10)來分隔。Title顯示在對(duì)話框標(biāo)題欄中的字符串表達(dá)式。如果缺省,則把應(yīng)用程序名放入標(biāo)題欄。

Default顯示在文本框中的字符串表達(dá)式,如果缺省,則文本框?yàn)榭??!纠?InputBox("請(qǐng)輸入你的學(xué)號(hào):","輸入框","001")(2)消息框(MsgBox)函數(shù)功能:在對(duì)話框中顯示信息,等待用戶單擊按鈕,并返回一個(gè)整值型數(shù)據(jù),告訴用戶單擊的是哪個(gè)按鈕。

MsgBox(Prompt[,Buttons][,Title][,Helpfile][,Context])返回值數(shù)據(jù)類型:整型

Prompt顯示在對(duì)話框中的信息,最大長(zhǎng)度大約為1024個(gè)字符。如果包含多個(gè)行,可以各行之間用回車符Chr(13)、換行符Chr(10)或是它們的組合分隔。消息框(MsgBox)

Buttons是一個(gè)數(shù)值表達(dá)式的和,指定在消息框中顯示的按鈕數(shù)目及形式、使用的圖標(biāo)樣式、默認(rèn)按鈕是什么以及消息框的強(qiáng)制回應(yīng)等。如果缺省,則Buttons的默認(rèn)值為0。MsgBox("操作完成!")【例】Buttons選項(xiàng)取值說明(1)常量數(shù)值說明vbOKOnly0

僅有確定按鈕vbOKCancel1

確定和取消按鈕vbAboutRetryIgnoue2

終止、重試和忽略vbYesNoCancel3

是、否和取消按鈕vbYesNo4

是、否按鈕vbRetryCancel5

重試和取消按鈕【表1】P188Buttons選項(xiàng)取值說明(2)常量數(shù)值說明vbCritical16顯示CriticalMessage圖標(biāo)vbQuestion32顯示W(wǎng)arningQuery圖標(biāo)vbExclamation48顯示W(wǎng)arningMessage圖標(biāo)vbInformation64顯示InformationMessage圖標(biāo)【表2】P188Buttons選項(xiàng)取值說明(補(bǔ)充)常量數(shù)值默認(rèn)按鈕vbDefaultButton10第一個(gè)按鈕是默認(rèn)按鈕vbDefaultButton2256第二個(gè)按鈕是默認(rèn)按鈕vbDefaultButton3512第三個(gè)按鈕是默認(rèn)按鈕vbDefaultButton4768第四個(gè)按鈕是默認(rèn)按鈕【表3】舉例?MsgBox("操作完成!",1+32)【例】?MsgBox("操作完成!",2+48+256)【例】函數(shù)的返回值(補(bǔ)充)返回值單擊的按鈕返回值單擊的按鈕1確認(rèn)5忽略2取消6是3終止7否4重試【例】Ucase("Abc")&Trim("xy")ABCx□yVAL(Left(STR(3145.25),4))

314Abs(Int(7.2-10)-Fix(7.2-10))1Exp(Log(Sqr(25)))+Year(#2014-10-1#)2019函數(shù)綜合舉例(1)Mid("abc"+Ltrim(space(3)+"南京"),3,month(Date)/4)

c南(設(shè)當(dāng)前為10月份)函數(shù)綜合舉例(2)【例】將下面的數(shù)學(xué)公式寫成Access表達(dá)式:(-b+Sqr(b^2-4*a*c))/(2*a)+Log(12)-Abs(10-Exp(2))+Sin(30*3.1415927/180)【例】編寫一個(gè)返回系統(tǒng)日期的函數(shù)過程Getdate。函數(shù)綜合舉例(3)FunctionGetdate()AsStringGetdate=Str(Year(Now()))+"年"+Str(Month(Now()))+"月"+Str(Day(Now()))+"日"EndFunction'調(diào)用上述函數(shù),并將結(jié)果在立即窗口中顯示。

SubPdate()

Debug.PrintGetdate()EndSub6.2.4運(yùn)算符與表達(dá)式

運(yùn)算符是表示實(shí)現(xiàn)某種運(yùn)算的符號(hào)。算術(shù)運(yùn)算符

根據(jù)運(yùn)算的不同,VBA中的運(yùn)算符可分為4種類型:字符串運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符1.運(yùn)算符(1)算術(shù)運(yùn)算符P188算術(shù)運(yùn)算符用來執(zhí)行簡(jiǎn)單的算術(shù)運(yùn)算。運(yùn)算符名稱優(yōu)先級(jí)說明^乘冪運(yùn)算1計(jì)算乘方和方根*乘法運(yùn)算2/\Mod+-浮點(diǎn)除法整數(shù)除法取模運(yùn)算加法運(yùn)算減法運(yùn)算2標(biāo)準(zhǔn)除法,結(jié)果為浮點(diǎn)數(shù)整數(shù)除法,結(jié)果為整數(shù)求余數(shù)3455說明(1)

乘冪運(yùn)算(^)

在運(yùn)用乘冪運(yùn)算符時(shí),只有當(dāng)指數(shù)為整數(shù)值時(shí),底數(shù)才可以為負(fù)數(shù)?!纠?^382^(1/2)或2^0.51.4142(-0.5)^20.25(-2)^0.5出錯(cuò)True^3-1(注:True作為-1參加運(yùn)算,F(xiàn)alse作為0參加運(yùn)算)說明(2)

整數(shù)除法(\)對(duì)兩個(gè)操作數(shù)做除法運(yùn)算并返回一個(gè)整數(shù)。整除的操作數(shù)一般為整型。當(dāng)操作數(shù)是小數(shù)時(shí),首先被四舍五入為整型或長(zhǎng)整型,然后再進(jìn)行整除運(yùn)算。如果運(yùn)算結(jié)果是小數(shù),系統(tǒng)自動(dòng)將其截為整型或長(zhǎng)整數(shù)(截尾取整),不再進(jìn)行四舍五入處理。整數(shù)除法舉例3/21.53\21(標(biāo)準(zhǔn)除法)(整數(shù)除法)3.4\213.6\223.6\2.326.4\3.613.5\7/3.52"7"\"3"25\2*305/2*37.53*3\3/39說明(3)

取模運(yùn)算(Mod)對(duì)兩個(gè)操作數(shù)做除法運(yùn)算并返回余數(shù)。

如果操作數(shù)有小數(shù)時(shí),則系統(tǒng)將其四舍五入為整數(shù)后再進(jìn)行運(yùn)算。

結(jié)果(即余數(shù))的正負(fù)號(hào)與被除數(shù)相同。取模運(yùn)算舉例【例】10mod4210mod4.2210mod4.60-10mod4-210mod-42-10mod-3-1-10-(余數(shù))4-10-(-)4-10-(余數(shù))3-10-(-)3說明(4)算術(shù)運(yùn)算符兩邊的操作數(shù)都應(yīng)該是數(shù)值型?!纠?123"+100223True+109Flase+1010#2011-10-10#-1#2011-10-9#

如果是數(shù)字字符或邏輯型,則系統(tǒng)自動(dòng)將其轉(zhuǎn)換成數(shù)值型后再進(jìn)行運(yùn)算。(2)字符運(yùn)算符字符串運(yùn)算符有兩個(gè):&

運(yùn)算符、+

運(yùn)算符字符串運(yùn)算符就是將兩個(gè)字符串連接起來生成一個(gè)新的字符串。&運(yùn)算符

運(yùn)算符&兩邊的操作數(shù)可以是字符型、數(shù)值型或日期型。進(jìn)行連接操作前先將數(shù)值型、日期型轉(zhuǎn)換為字符型,然后再做連接運(yùn)算。

由于符號(hào)&還是長(zhǎng)整型定義符,在字符串變量使用運(yùn)算符&時(shí),變量與運(yùn)算符之間必須加一個(gè)空格。

&運(yùn)算符用于強(qiáng)制兩個(gè)字符串的連接?!纠縜a&=123&作為長(zhǎng)整型定義符aa&"123"&作為字符串連接運(yùn)算符&運(yùn)算符舉例aa="ABC"定義變量aa,并賦值aa&"XYZ"出錯(cuò)aa&"XYZ"ABCXYZ"123"&"XYZ"123XYZ123&"XYZ"123XYZ123&456123456"XYZ"

&(2*3)XYZ6#2011-10-8#&1232011-10-8123#2011-10-8#&12+32011-10-815+運(yùn)算符如果一個(gè)是數(shù)字字符串,另一個(gè)為數(shù)值型,則系統(tǒng)自動(dòng)將數(shù)字字符串轉(zhuǎn)化為數(shù)值,然后進(jìn)行算術(shù)加法運(yùn)算。如果兩邊的操作數(shù)都是數(shù)值型,則做普通的加法運(yùn)算。

+運(yùn)算符用于連接兩個(gè)字符串,形成一個(gè)新的字符串。如果一個(gè)是非數(shù)字字符串,另一個(gè)為數(shù)值型,則出錯(cuò)。如果兩邊的操作數(shù)都是數(shù)字字符串,則做字符串連接運(yùn)算。+運(yùn)算符舉例123+456579(加法運(yùn)算)"123"+"456"123456(連接運(yùn)算)123+"456"579(加法運(yùn)算)"123"+"ABC456"123ABC456(連接運(yùn)算)123+"ABC456"出錯(cuò)#2011-10-8#+102011-10-18#2011-10-18#-102011-10-8#9999-12-31#+1溢出#100-1-1#-1溢出(3)關(guān)系運(yùn)算符關(guān)系運(yùn)算符用于對(duì)兩個(gè)表達(dá)式比較大小,比較的結(jié)果是一個(gè)邏輯值,即:若關(guān)系成立,則為真(True);反之則為假(False)。名稱運(yùn)算符舉例說明

等于="abc"="abd"False

大于

大于等于

小于等于

小于

不等于>>=<=<<>"abc">"abd"45<123"45"

<="123"#2012-1-1#>=#2011-1-1#"abcd"

<>"ABCD"FalseTrueTrueFalseFalse關(guān)系運(yùn)算符規(guī)則漢字字符按漢語拼音比較大小,且大于西文字符。

如果參與比較的兩個(gè)操作數(shù)都是字符型,則從左到右一一對(duì)應(yīng)逐字符比較。字母不區(qū)分大小寫,且大于數(shù)字。

如果參與比較的兩個(gè)操作數(shù)都是數(shù)值型,則按它們的大小進(jìn)行比較。字符串中:漢字字符>西文字符(大小寫相同)>數(shù)字串>空格串(4)邏輯運(yùn)算符

邏輯運(yùn)算符用于對(duì)兩個(gè)邏輯量進(jìn)行邏輯運(yùn)算,其結(jié)果仍然是一個(gè)邏輯值。與運(yùn)算And

邏輯運(yùn)算符主要有:或運(yùn)算Or非運(yùn)算Not各個(gè)邏輯運(yùn)算符的真值表P191XYNotXXAndYXOrYTrueTrueTrueFalseFalseTrueFalseFalseFalseFalseTrueTrueTrue

False

FalseFalse

TrueTrueTrueFalse

2.表達(dá)式和優(yōu)先級(jí)

表達(dá)式由字面值、常量、變量、運(yùn)算符、函數(shù)、標(biāo)識(shí)符、邏輯量和括號(hào)等按一定的規(guī)則組成。

表達(dá)式通過運(yùn)算得出結(jié)果,運(yùn)算結(jié)果的類型由操作數(shù)的數(shù)據(jù)類型和運(yùn)算符共同決定。在VBA中,邏輯量在表達(dá)式中進(jìn)行算術(shù)運(yùn)算時(shí),True值被當(dāng)成-1,F(xiàn)alse值被當(dāng)成0處理。(1)表達(dá)式的組成(2)表達(dá)式的書寫規(guī)則只能使用圓括號(hào)()且必須成對(duì)出現(xiàn)乘號(hào)(*)不能省略表達(dá)式從左至右書寫,不大小寫區(qū)分2.表達(dá)式和優(yōu)先級(jí)(3)運(yùn)算優(yōu)先級(jí)P192優(yōu)先級(jí)高

低高

低算術(shù)運(yùn)算符字符串運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符指數(shù)運(yùn)算^&、+優(yōu)先級(jí)相同=、<>、>、>=、

<、<=優(yōu)先級(jí)相同Not負(fù)數(shù)-And乘和浮點(diǎn)除*/Or整數(shù)除法\模運(yùn)算Mod加減法+-

注:圓括號(hào)的優(yōu)先級(jí)別最高。表達(dá)式舉例103^(54-365\7)+1-13mod5+2*10^2/537"3+4"&"="&3+43+4=7"abc"&123abc123"123"+456ߛ-10-1#5792011-10-1"abc">"abd"And#11-25-99#>#12-25-98#False15<8+2*5Or2>FalseAnd"A"&"12"<"B"True#2011-12-20#-102011-12-106.3VBA模塊的創(chuàng)建

模塊就是將VBA______和______作為一個(gè)單元來保存的集合。

模塊是Access項(xiàng)目的基本構(gòu)件。

聲明過程

模塊以__________為基礎(chǔ)編寫。VBA語言

模塊以____________________或_____________為單元的集合方式存儲(chǔ)。

在Access中,模塊分為________和__________兩種類型。子過程(Sub)類模塊函數(shù)過程(Function)標(biāo)準(zhǔn)模塊6.3VBA模塊的創(chuàng)建模塊聲明過程聲明函數(shù)過程子過程……6.3VBA模塊的創(chuàng)建6.3.1類模塊的創(chuàng)建

窗體模塊和報(bào)表模塊都是類模塊,而且它們都依附于某一窗體或報(bào)表而存在。類模塊的創(chuàng)建方法參考第7章。6.3.2標(biāo)準(zhǔn)模塊的創(chuàng)建

標(biāo)準(zhǔn)模塊包含的是不與任何對(duì)象相關(guān)聯(lián)的通用過程,這些過程可以在數(shù)據(jù)庫中的任何位置直接調(diào)用執(zhí)行。

全局變量或公共過程具有全局的特性,其作用范圍在整個(gè)應(yīng)用程序里。

隨應(yīng)用程序的運(yùn)行而開始、關(guān)閉而結(jié)束。標(biāo)準(zhǔn)模塊示例

模塊是以過程為單元組成的。(1)聲明(一個(gè))(2)子過程/函數(shù)過程(一個(gè)/多個(gè))

聲明區(qū)域用于定義模塊中使用的變量等內(nèi)容。

過程是由代碼組成的單元,包含一系列計(jì)算語句和執(zhí)行語句。過程有兩種類型:Sub過程和Function過程。6.3.2標(biāo)準(zhǔn)模塊的創(chuàng)建1.Sub過程Sub過程又稱子過程,用于執(zhí)行一個(gè)操作或一系列的運(yùn)算,無返回值。[Public|Private][Static]Sub

子過程名([形參列表])

[<程序代碼>][ExitSub][<程序代碼>]

EndSub

過程名不能與所在模塊的模塊名相同。

如果沒有參數(shù),過程名后也必須包含一對(duì)()。說明Public:過程能被所有模塊的所有其它過程調(diào)用。Private:過程只能被同一模塊的其它過程調(diào)用。Static:表示調(diào)用之間保留Sub過程的局部變量的值。即使過程中也使用了同名變量,對(duì)在Sub外

聲明的變量不會(huì)產(chǎn)生任何影響。如果沒有使用Public或Private指定,過程則是Public(默認(rèn)情況);如果沒有使用Static,則在調(diào)用之后不會(huì)保留局部變量的值。Sub過程調(diào)用方法

語法格式一Call子過程名[(<實(shí)參列表>)]

實(shí)參列表和形參列表必須一一對(duì)應(yīng)。

語法格式二子過程名[<實(shí)參列表>]Public與Private的舉例(1)Public與Private的舉例(2)Public與Private的舉例(3)2.Function過程語法格式[Public|Private][Static]Function

函數(shù)名([形參列表])

[AS數(shù)據(jù)類型][程序代碼][ExitFunction]

函數(shù)名

=表達(dá)式

[程序代碼]

EndFunction

在函數(shù)過程執(zhí)行中一旦遇到ExitFunction語句,則結(jié)束函數(shù)過程的執(zhí)行。函數(shù)過程的調(diào)用形式

語法格式函數(shù)過程名([<實(shí)參列表>])

不能使用CALL來調(diào)用執(zhí)行。

需要直接引用函數(shù)名并加括號(hào)來辨別。

可以在查詢、宏等中調(diào)用使用。舉例【例】編寫一個(gè)返回系統(tǒng)日期的函數(shù)過程Getdate()。FunctionGetdate()Getdate=Str(Year(Now))+"年"+Str(Month(Now))+"月"+Str(Day(Now))+"日"EndFunctionSubPdate()Debug.PrintGetdate()EndSub

調(diào)用函數(shù)過程:

運(yùn)行結(jié)果將顯示在立即窗口中。6.4VBA程序設(shè)計(jì)基礎(chǔ)

要用Access來完成一個(gè)實(shí)際的而用宏又實(shí)現(xiàn)不了的數(shù)據(jù)庫應(yīng)用系統(tǒng)時(shí),就應(yīng)該掌握VBA編程。VBA中的語句是能夠完成某項(xiàng)操作的一條完整命令,它可以包含關(guān)鍵字、函數(shù)、運(yùn)算符、變量、常量以及表達(dá)式等。6.4VBA程序設(shè)計(jì)基礎(chǔ)VBA語句類型VBA的語句分為3種類型:

聲明語句

賦值語句

控制結(jié)構(gòu)語句

為變量、符號(hào)常量或程序命名,并且指定一個(gè)數(shù)據(jù)類型。把一個(gè)值或表達(dá)式賦給一個(gè)變量。賦值符號(hào):=用來控制各語句的執(zhí)行順序。6.4.1聲明語句

在VBA中,使用聲明語句去命名和定義過程、變量、數(shù)組以及符號(hào)常量。

當(dāng)聲明一個(gè)過程、變量或常量時(shí),也同時(shí)定義了它的作用范圍,而此范圍取決于聲明位置以及所用的關(guān)鍵字。過程中聲明的變量只在過程中可以使用,而且在調(diào)用時(shí)會(huì)丟失其變量的值,除非將它聲明為Static。6.4.2賦值語句

賦值語句用于指定一個(gè)值或表達(dá)式給變量或符號(hào)常量。

語法格式:[Let]變量名=

值或表達(dá)式

功能:將指定的值或表達(dá)式的值賦給變量。

通常情況下省略Let。

賦值語句中的“=

”并不是數(shù)學(xué)中的等號(hào),它表示:將右邊的表達(dá)式的運(yùn)算結(jié)果賦予變量。賦值語句舉例【例】指定InputBox函數(shù)返回值給變量YourName。SubQuestion()DimYourNameAsStringDimaAsIntegerYourName=InputBox("Whatisyourname?")a=MsgBox("Yournameis"&YourName)EndSub

語句的執(zhí)行方式按流程可以分為:6.4.3控制結(jié)構(gòu)語句順序結(jié)構(gòu)按照語句的邏輯順序依次執(zhí)行分支結(jié)構(gòu)根據(jù)條件是否成立選擇語句執(zhí)行路徑循環(huán)結(jié)構(gòu)可重復(fù)執(zhí)行某一段程序語句例1:已知圓的半徑r(從鍵盤上輸入),編寫area子過程求圓的面積s。PublicSubarea()

ConstPI=3.14DimrAsSingler=InputBox("請(qǐng)輸入圓的半徑:")S=PI*r^2Debug.Print"圓的面積為:"&sEndSub1.順序結(jié)構(gòu)語句例2:從鍵盤上輸入兩個(gè)數(shù)x、y,編寫swap子程序?qū)崿F(xiàn)這兩個(gè)數(shù)據(jù)的交換。PublicSubswap()x=InputBox("請(qǐng)從鍵盤上輸入一個(gè)數(shù)X:")y=InputBox("請(qǐng)從鍵盤上輸入一個(gè)數(shù)Y:")Debug.Print"交換前X、Y分別為:",x,yt=xx=yy=tDebug.Print"交換后X、Y分別為:",x,yEndSub510txy51051.順序結(jié)構(gòu)語句

在VBA代碼中使用If條件語句,可根據(jù)條件表達(dá)式的值來選擇程序執(zhí)行哪些語句。2.分支結(jié)構(gòu)語句If條件語句的主要格式:?jiǎn)畏种щp分支多分支(1)單分支結(jié)構(gòu)語句

單分支結(jié)構(gòu)語句格式(一):If<條件表達(dá)式>Then<語句>功能:

當(dāng)條件表達(dá)式為真時(shí),執(zhí)行Then后面的語句,否則不做任何操作。說明:Then后的語句只能是一條,或者是多條語句用冒號(hào)分隔,且必須與If語句在同一行上。

(1)單分支結(jié)構(gòu)語句

單分支結(jié)構(gòu)語句格式(二):

If<條件表達(dá)式>Then

<語句塊>

End

If功能:當(dāng)條件表達(dá)式為真時(shí),執(zhí)行Then后面的語句,否則不做任何操作。說明:

語句塊中的語句可以是多條,且可以多行書寫。對(duì)條件表達(dá)式求值語句塊IfTrueFalseEndIf后的語句單分支結(jié)構(gòu)語句流程圖單分支結(jié)構(gòu)語句舉例【例1】比較兩個(gè)數(shù)值變量x和y的值,用x保存大的值,y保存小的值。Ifx<yThent=xx=yy=t

EndIf或者:Ifx<yThent=x:x=y:y=t510txy5105單分支結(jié)構(gòu)語句舉例【例2】隨機(jī)出一道兩位數(shù)加法題,如答對(duì)了,顯示“答案正確!”;答錯(cuò)顯示“答錯(cuò)了!”。Subtest()DimAAsInteger,BAsInteger,SumAsIntegerA=10+Rnd*90:B=10+Rnd*90Sum=InputBox(A&"+"&B&"=?","加法")

IfSum=A+BThenMsgBox("答案正確!")IfSum<>A+BThenMsgBox("答錯(cuò)了!")EndSub單分支結(jié)構(gòu)語句舉例【例3】判斷下面的程序代碼的功能。SubAbstr()DimAAsSingle,BAsSingleA=InputBox("請(qǐng)輸入一個(gè)數(shù)值:")

IfA>=0ThenB=AIfA<0ThenB=-ADebug.PrintBEndSub程序代碼的功能:計(jì)算所給數(shù)值的絕對(duì)值。單分支結(jié)構(gòu)語句舉例【例4】編寫程序:輸入一個(gè)日期,若是未來的日期則顯示“未到期!”;若是以前的日期,則顯示“已到期!”。SubABC()DimAAsDateA=InputBox("請(qǐng)輸入一個(gè)日期:")

IfA>DateThenDebug.Print"未到期!"

IfA<=DateThenDebug.Print"已到期!"EndSub(2)雙分支結(jié)構(gòu)語句

雙分支結(jié)構(gòu)語句格式:If<條件表達(dá)式>Then<語句1>Else<語句2>功能:當(dāng)條件表達(dá)式為真時(shí),執(zhí)行Then后面的語句1或語句塊1,否則執(zhí)行Else后面的語句2或語句塊2。

If<條件表達(dá)式>Then <語句塊1>

Else <語句塊2>

End

If對(duì)條件表達(dá)式求值語句塊1語句塊2IFENDIF雙分支結(jié)構(gòu)語句流程圖TrueFalse雙分支結(jié)構(gòu)語句舉例【例1】任意輸入兩個(gè)數(shù)值,輸出兩個(gè)數(shù)中的最大值。Subtest()DimAAsSingle,BAsSingleA=InputBox("請(qǐng)輸入第一個(gè)數(shù)值:")B=InputBox("請(qǐng)輸入第二個(gè)數(shù)值:")

IfA>=BThenmax=AElsemax=BDebug.Print"最大數(shù)值是:"&maxEndSub例1的另一種寫法Subtest()DimAAsSingle,BAsSingleA=InputBox("請(qǐng)輸入第一個(gè)數(shù)值:")B=InputBox("請(qǐng)輸入第二個(gè)數(shù)值:")

IfA>=BThen

max=A

Else

max=BEndIfDebug.Print"最大數(shù)值是:"&maxEndSub雙分支結(jié)構(gòu)語句舉例【例2】自定義過程e,其功能是:如果當(dāng)前系統(tǒng)時(shí)間在12~18點(diǎn)之間,則在立即窗口中顯示“下午好!”,否則顯示“歡迎下次光臨!”。Sube()IfHour(Time())>=12AndHour(Time())<18ThenDebug.Print"下午好!"ElseDebug.Print"歡迎下次光臨!"EndIfEndSub雙分支結(jié)構(gòu)語句舉例【例3】SubXY(

)

Dim

X

As

Single

,

Y

As

Single

X=InputBox("請(qǐng)輸入一個(gè)數(shù)值:")

If

X>=0

Then

Y=1

Else

Y=-1

Debug.Print

YEnd

Sub1x>=0Y=-1x<0例3的第2種寫法SubXY(

)

Dim

X

As

Single

,

Y

As

Single

X=InputBox(

"請(qǐng)輸入一個(gè)數(shù)值:"

)

If

X>=0

Then

Y=1

Else

Y=-1

EndIf

Debug.Print

YEnd

Sub例3的第3種寫法SubXY(

)

Dim

X

As

Single

,

Y

As

Single

X=InputBox("請(qǐng)輸入一個(gè)數(shù)值:")

Y=IIf(X>=0,1,-1)

Debug.Print

YEnd

Sub雙分支結(jié)構(gòu)語句舉例【例4】輸入一個(gè)整數(shù),編程判斷該數(shù)是奇數(shù)還是偶數(shù)。

SubParity()DimiAsIntegeri=InputBox("請(qǐng)輸入一個(gè)整數(shù):")

Ifi/2=i\2ThenDebug.Printi;"是偶數(shù)。"

ElseDebug.Printi;"是奇數(shù)。"

EndIfEndSub雙分支結(jié)構(gòu)語句舉例【例5】輸入購書數(shù)量及單價(jià),如果購買10本以上,就打八折,否則不打折。計(jì)算并輸出購書金額。Subbuy()DimnAsInteger,priceAsSingle,moneyAsSinglen=InputBox("請(qǐng)輸入購書數(shù)量","購書數(shù)量")price=InputBox("請(qǐng)輸入單價(jià)","單價(jià)")

Ifn<10Thenmoney=price*n

Elsemoney=price*n*0.8

EndIfMsgBox("購書金額="+Str(money)+"元")EndSub(3)If…Then…ElseIf多分支結(jié)構(gòu)語句語句格式:

If<條件表達(dá)式1>Then <語句塊1>

ElseIf<條件表達(dá)式2>Then <語句塊2>…………[Else <語句塊n>]

End

If語句流程圖ElseIfTrueFalseEndIf后語句語句塊1條件表達(dá)式2……FalseTrue語句塊2True……False條件表達(dá)式1語句塊n功能【例1】判斷鍵盤輸入的字符是何種類型的字符。

功能:依次測(cè)試條件表達(dá)式1、表達(dá)式2、……,當(dāng)遇到條件表達(dá)式為真時(shí),執(zhí)行該條件下的語句塊。如均不為真,若有Else選項(xiàng),則執(zhí)行Else后的語句塊,否則執(zhí)行EndIf后面的語句。雙分支結(jié)構(gòu)語句舉例SubCharacter()strChar=InputBox("請(qǐng)輸入任意一個(gè)字符")nChar=Asc(strChar)

IfnChar>=65AndnChar<=90ThenDebug.Print"輸入的字符是大寫字母"

ElseIfnChar>=97AndnChar

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論