第十一章 面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言 VBA課件_第1頁(yè)
第十一章 面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言 VBA課件_第2頁(yè)
第十一章 面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言 VBA課件_第3頁(yè)
第十一章 面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言 VBA課件_第4頁(yè)
第十一章 面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言 VBA課件_第5頁(yè)
已閱讀5頁(yè),還剩97頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第十一章面向?qū)ο蟪绦蛟O(shè)計(jì) 語(yǔ)言-VBA第十一章面向?qū)ο蟪绦蛟O(shè)計(jì) 語(yǔ)言-VBA111.1VBA概述雖然宏很好用,但它運(yùn)行的速度比較慢,也不能直接運(yùn)行很多WINDOWS的程序。尤其是不能自定義一些函數(shù),這樣當(dāng)我們要對(duì)某些數(shù)據(jù)進(jìn)行一些特殊的分析時(shí),它就無(wú)能為力了。由于宏具有這些局限性,所以在給數(shù)據(jù)庫(kù)設(shè)計(jì)一些特殊的功能時(shí),需要用到“模塊”對(duì)象來(lái)實(shí)現(xiàn),而這些“模塊”都是由一種叫做“VBA”的語(yǔ)言來(lái)實(shí)現(xiàn)的。使用它編寫(xiě)程序,然后將這些程序編譯成擁有特定功能的“模塊”,以便在Access2000中調(diào)用。11.1VBA概述雖然宏很好用,但它運(yùn)行的速度比2VB,就是微軟公司推出的可視化BASIC語(yǔ)言,用它來(lái)編程非常簡(jiǎn)單。因?yàn)樗?jiǎn)單,而且功能強(qiáng)大,所以微軟公司將它的一部分代碼結(jié)合到OFFICE中,形成我們今天所說(shuō)的VBA。它的很多語(yǔ)法繼承了“VB”,所以我們可以像編寫(xiě)VB語(yǔ)言那樣來(lái)編寫(xiě)VBA程序,以實(shí)現(xiàn)某個(gè)功能。當(dāng)這段程序編譯通過(guò)以后,將這段程序保存在Access中的一個(gè)模塊里,并通過(guò)類似在窗體中激發(fā)宏的操作那樣來(lái)啟動(dòng)這個(gè)“模塊”,從而實(shí)現(xiàn)相應(yīng)的功能。VB,就是微軟公司推出的可視化BASIC語(yǔ)言,用它來(lái)3“模塊”和“宏”的使用是差不多的。其實(shí)Access中的“宏”也可以存成“模塊”,這樣運(yùn)行起來(lái)的速度還會(huì)更快?!昂辍钡拿總€(gè)基本操作在“VBA”中都有相應(yīng)的等效語(yǔ)句,使用這些語(yǔ)句就可以實(shí)現(xiàn)所有單獨(dú)“宏”命令,所以“VBA”的功能是非常強(qiáng)大的。“模塊”和“宏”的使用是差不多的。其實(shí)Access中4需要使用VBA程序代碼作為Access操作指令的一部分的原因:建立用戶自定義的函數(shù)(UDF)代替重復(fù)使用的表達(dá)式。編寫(xiě)包含有比Iif()函數(shù)更復(fù)雜的決策結(jié)構(gòu)的表達(dá)式。想要執(zhí)行標(biāo)準(zhǔn)Access宏不支持的操作,例如:想要進(jìn)行事務(wù)處理。想要同時(shí)打開(kāi)兩個(gè)或兩個(gè)以上數(shù)據(jù)庫(kù)。想要提供應(yīng)用程序源文件復(fù)制的功能。需要使用VBA程序代碼作為Access操作指令的一部分511.2模塊、函數(shù)及程序既然我們要編寫(xiě)“VBA”程序,就需要先看看“VBA”的開(kāi)發(fā)環(huán)境?!癡BA”的開(kāi)發(fā)環(huán)境是開(kāi)發(fā)“VBA”程序相應(yīng)的“設(shè)計(jì)器”,但我們不這么稱呼它,而是叫它“VBA開(kāi)發(fā)環(huán)境”,這種說(shuō)法是繼承了計(jì)算機(jī)語(yǔ)言對(duì)開(kāi)發(fā)器的一種統(tǒng)一叫法。我們首先要打開(kāi)一個(gè)數(shù)據(jù)庫(kù),然后選定數(shù)據(jù)庫(kù)窗口上的“模塊”選項(xiàng),再用鼠標(biāo)單擊數(shù)據(jù)庫(kù)窗口上的“新建”按鈕,這時(shí)就會(huì)彈出一個(gè)窗口,這就是“VBA”的“開(kāi)發(fā)環(huán)境”,如下圖所示。11.2模塊、函數(shù)及程序既然我們要編寫(xiě)“VBA”6VBA開(kāi)發(fā)環(huán)境分為“主窗口”、“模塊代碼”、“工程資源管理器”和“模塊屬性”這幾部分。“模塊代碼”窗口用來(lái)輸入“模塊”內(nèi)部的程序代碼?!肮こ藤Y源管理器”用來(lái)顯示這個(gè)數(shù)據(jù)庫(kù)中所有的“模塊”。當(dāng)我們用鼠標(biāo)單擊這個(gè)窗口內(nèi)的一個(gè)“模塊”選項(xiàng)時(shí),就會(huì)在模塊代碼窗口上顯示出這個(gè)模塊的“VBA”程序代碼。而“模塊屬性”窗口上就可以顯示當(dāng)前選定的“模塊”所具有的各種屬性。VBA開(kāi)發(fā)環(huán)境分為“主窗口”、“模塊代碼”、“工程資7模塊對(duì)象是將VisualBasicforApplication(簡(jiǎn)稱宏語(yǔ)言VBA)編寫(xiě)的過(guò)程和聲明作為一個(gè)整體進(jìn)行保存的過(guò)程的集合。一個(gè)模塊包含一個(gè)聲明區(qū)域,且可以包含一個(gè)或多個(gè)程序(以sub開(kāi)頭)或函數(shù)(以Function開(kāi)頭),模塊的聲明區(qū)域是用來(lái)聲明模塊使用的項(xiàng)目(通常是變量)。程序又稱為子程序。程序可以調(diào)用其他的程序,此時(shí),被調(diào)用的程序叫做子程序(SubProcedure)。程序是由開(kāi)始與結(jié)束的關(guān)鍵字定義的,如:

Sub子程序名(參數(shù)As數(shù)據(jù)類型)As數(shù)據(jù)類型 子程序語(yǔ)句EndSub模塊對(duì)象是將VisualBasicforApp8函數(shù)是一種可將數(shù)值返回到它們的名稱的程序。像“sin()”、“abs()”這些都是函數(shù)都是內(nèi)部函數(shù),現(xiàn)在我們要來(lái)講講外部函數(shù),外部函數(shù)和變量一樣在使用之前也是要先申明。它們的結(jié)構(gòu)如下圖所示。

Function函數(shù)名(參數(shù)As數(shù)據(jù)類型)As數(shù)據(jù)類型函數(shù)語(yǔ)句 函數(shù)名=<表達(dá)式>EndFunction我們可以引用程序名稱來(lái)調(diào)用該程序,但VisualBasic提供了一個(gè)關(guān)鍵字Call,可明確地調(diào)用一個(gè)程序。在程序名前加上Call是一個(gè)很好的程序設(shè)計(jì)習(xí)慣。函數(shù)是一種可將數(shù)值返回到它們的名稱的程序。像“sin9例如:PublicFunctionGetNumber(a,b,cAsInteger)AsInteger GetNumber=a+b-cEndFunction函數(shù)則會(huì)把“a+b-c”的值返回給函數(shù)名“Getnumber”,如果我們輸入Getnumber(9,4,2),則會(huì)返回“9+4-2”即“11”給函數(shù)“Getnumber”。

例如:10“Function”的英文含意就是“函數(shù)”。它在這兒用來(lái)作為函數(shù)申明的一個(gè)內(nèi)容。在它后面跟著的就是這個(gè)函數(shù)的函數(shù)名。在這個(gè)函數(shù)名后面的括號(hào)中,列的是這個(gè)函數(shù)中的參數(shù)。每個(gè)函數(shù)之間要用逗號(hào)隔開(kāi),并用“As”語(yǔ)句后跟“數(shù)據(jù)類型”來(lái)定義數(shù)據(jù)的類型。括號(hào)外面的“As數(shù)據(jù)類型”用來(lái)定義“函數(shù)名”的。它表示函數(shù)返回的數(shù)據(jù)的數(shù)據(jù)類型。“Function”的英文含意就是“函數(shù)”。它在這兒11其實(shí)子程序和函數(shù)很相似,這兩種類型的過(guò)程都可以接收參數(shù),函數(shù)可以返回單一的數(shù)據(jù)值,但子程序不能。我們不能使用Call來(lái)執(zhí)行函數(shù),必須以該函數(shù)的名稱引用它才行。函數(shù)調(diào)用是由接在函數(shù)名稱后的括號(hào)所辨別的,也就是說(shuō),函數(shù)需要參數(shù)。另外,我們可以從ACCESS中任何地方執(zhí)行一個(gè)函數(shù),包括從查詢中的表達(dá)式中和宏中。然而你只能從一個(gè)函數(shù)、子程序或作為一個(gè)窗體或報(bào)表中的一個(gè)事件過(guò)程來(lái)執(zhí)行子程序。其實(shí)子程序和函數(shù)很相似,這兩種類型的過(guò)程都可以接收參1211.3VB的數(shù)據(jù)類型與數(shù)據(jù)庫(kù)對(duì)象當(dāng)建立VisualBasic數(shù)據(jù)表時(shí),所有用來(lái)指定字段數(shù)據(jù)類型與大小的數(shù)據(jù)類型(除OLE對(duì)象和備注數(shù)據(jù)類型外),都在VisualBasic中有對(duì)應(yīng)的東西。在Access中可用的數(shù)據(jù)類型分為3種:標(biāo)準(zhǔn)型、自定義型、對(duì)象型。11.3VB的數(shù)據(jù)類型與數(shù)據(jù)庫(kù)對(duì)象當(dāng)建立Visu131.標(biāo)準(zhǔn)型,共有7種(1)整數(shù):后綴符為“%”(2)長(zhǎng)整數(shù):后綴符為“&”(3)單精度:后綴符為“!”(4)雙精度:后綴符為“#”(5)貨幣:后綴符為“@”(6)字符串:后綴符為“$”(7)變體:可用于任何數(shù)據(jù)類型。1.標(biāo)準(zhǔn)型,共有7種142.自定義型:它是用關(guān)鍵詞Type定義的,如:TypePointXasIntegerYasintegerEndType即定義了一個(gè)點(diǎn)(point)的數(shù)據(jù)結(jié)構(gòu),聲明和使用變量形式如: DimpCurPointasPoint PCurPoint.X=10 PCurPoint.Y=102.自定義型:它是用關(guān)鍵詞Type定義的,如:TypeP153.對(duì)象型:所有的數(shù)據(jù)庫(kù)中使用的數(shù)據(jù)庫(kù)的對(duì)象,如數(shù)據(jù)表、查詢、窗體和報(bào)表,也有對(duì)應(yīng)的Access數(shù)據(jù)類型。VisualBasic支持的數(shù)據(jù)庫(kù)對(duì)象的數(shù)據(jù)類型對(duì)象數(shù)據(jù)類型對(duì)應(yīng)的數(shù)據(jù)庫(kù)對(duì)象數(shù)據(jù)庫(kù)databaseAccess數(shù)據(jù)庫(kù)窗體forms窗體,包括子窗體報(bào)表report報(bào)表,包括子報(bào)表控件controls控件、窗體和報(bào)表查詢query查詢定義(對(duì)等的SQL語(yǔ)句)數(shù)據(jù)表table數(shù)據(jù)庫(kù)數(shù)據(jù)表結(jié)果表recordset可更新的查詢結(jié)果快照表snapshot不可更新的查詢結(jié)果3.對(duì)象型:所有的數(shù)據(jù)庫(kù)中使用的數(shù)據(jù)庫(kù)的對(duì)象,如數(shù)1611.4變量變量和常量指的是:被命名的內(nèi)存單元在VB中命名一個(gè)變量或常量的規(guī)則如下:必須以字母或漢字開(kāi)頭,后可跟漢字、字母、數(shù)字或下劃線組成,長(zhǎng)度小于等于255個(gè)字符。不能使用VB中的關(guān)鍵字(Integer、String、Double等)。11.4變量變量和常量指的是:被命名的內(nèi)存單元在V17VB中不區(qū)分變量名的大小寫(xiě),例如,XXY、XyX、xyX、xyx等都被認(rèn)為是同一個(gè)變量。為了便于區(qū)分,一般變量首字母用大寫(xiě)字母,其余用小寫(xiě)字母表示。常量全部用大寫(xiě)字母表示。為了增加程序的可讀性,可在變量名前加一個(gè)縮寫(xiě)的前綴來(lái)表明該變量的數(shù)據(jù)類型。如strMystring、intCount、sngMax等。第十一章面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言VBA課件1811.4.1顯式變量其語(yǔ)法定義如下:

Dim變量名As類型名Dim是使用最多的一個(gè)關(guān)鍵詞。例:DimiCountAsintegerDimNewVarAsInteger在使用變量前,一般必須先聲明變量名和其類型,以便系統(tǒng)為它分配存儲(chǔ)單元??梢栽谀K的說(shuō)明區(qū)域中,加入OptionExplict語(yǔ)句來(lái)強(qiáng)制要求所有變量必須說(shuō)明。11.4.1顯式變量其語(yǔ)法定義如下:例:DimiC1911.4.2變量的作用域與生命周期局部變量:在過(guò)程內(nèi)用Dim語(yǔ)句聲明的變量(或不加聲明直接使用的變量),只能在本過(guò)程中使用。不同的過(guò)程中可有相同名稱的變量,彼此互不相干。程序中聲明的每個(gè)變量都有作用域,超出它的作用域后,變量就失去作用,成為沒(méi)有定義的字符。Access中變量的作用域有3類。窗體/模塊級(jí)變量:在“通用聲明”段中用Dim語(yǔ)句或用Private語(yǔ)句聲明的變量,可被本窗體/模塊的任何過(guò)程訪問(wèn)。11.4.2變量的作用域與生命周期局部變量:在過(guò)程內(nèi)用D20全局變量:在“通用聲明”段中用Public語(yǔ)句聲明的變量,可被本應(yīng)用程序的任何過(guò)程或函數(shù)訪問(wèn)。全局變量的值在整個(gè)應(yīng)用程序中始終不會(huì)消失和重新初始化,只有當(dāng)整個(gè)應(yīng)用程序執(zhí)行結(jié)束時(shí),才會(huì)消失。全局變量:在“通用聲明”段中用Public語(yǔ)句聲明的變量,可21ReDim語(yǔ)句該語(yǔ)句與Dim語(yǔ)句聯(lián)合起來(lái)使用,來(lái)實(shí)現(xiàn)在Access中動(dòng)態(tài)分配內(nèi)存。使用方法為:首先在代碼中使用Dim或Global來(lái)聲明一個(gè)動(dòng)態(tài)數(shù)組,但不確定數(shù)組的寬度和維數(shù),在需要使用數(shù)組來(lái)存儲(chǔ)數(shù)據(jù)時(shí),使用ReDim來(lái)聲明數(shù)組的寬度和維數(shù),但這時(shí)已經(jīng)不能更改數(shù)組的類型了。使用ReDim可以為一個(gè)動(dòng)態(tài)數(shù)組分配內(nèi)存,多次指定不同的寬度,但多次定義時(shí),維數(shù)必須和第一次使用ReDim定義的維數(shù)一致,不能再次進(jìn)行修改了。另外,ReDim語(yǔ)句之后還可以使用修補(bǔ)詞“Preserve”將原數(shù)組中已經(jīng)分配的單元保留下來(lái),這時(shí)當(dāng)?shù)诙问褂肦分配內(nèi)存時(shí),只能在最后一維上變動(dòng)。ReDim語(yǔ)句2211.4.3隱含型變量在VB中允許使用的變量未進(jìn)行聲明而直接使用。所有隱式聲明的變量都是Variant類型。如:NewVar=12345上面的語(yǔ)句說(shuō)明了一個(gè)Variant類型的變量NewVar,其值為12345。11.4.3隱含型變量在VB中允許使用的變量未進(jìn)行聲明而2311.4.4數(shù)組數(shù)組不是一種數(shù)據(jù)類型,而是一組相同類型的變量的集合。數(shù)組必須先聲明后使用。聲明數(shù)組名、類型、維數(shù)(下標(biāo)的個(gè)數(shù))和數(shù)組大小。聲明數(shù)組,在內(nèi)存中分配一個(gè)連續(xù)的區(qū)域。數(shù)組中各元素在通常情況下類型必須相同,但若數(shù)組類型為Variant時(shí),可包含不同類型的數(shù)據(jù)。數(shù)組元素:數(shù)組中的某個(gè)數(shù)據(jù)項(xiàng)。數(shù)組元素的使用同簡(jiǎn)單變量的使用。11.4.4數(shù)組數(shù)組不是一種數(shù)據(jù)類型,而是一組相24Dim數(shù)組名(下標(biāo)范圍)As類型名Dim動(dòng)態(tài)數(shù)組名()As類型名Dim數(shù)組名(下標(biāo)開(kāi)始值To下標(biāo)結(jié)束值)As類型名Dim數(shù)組名(下標(biāo)范圍)As類型名2511.5將數(shù)據(jù)庫(kù)對(duì)象命名為VBA程序代碼中的變量以Access建立的數(shù)據(jù)庫(kù)對(duì)象及其屬性可被看成是VB程序代碼中的變量及其指定的值,例如含有客戶地址數(shù)據(jù)的文本框。可以使用以下語(yǔ)句:Forms!Customers!Address=“123ElmSt.”關(guān)鍵字Forms定義對(duì)象的類型。感嘆號(hào)“!”(程序設(shè)計(jì)稱之為bang符號(hào))分隔開(kāi)格式名和控件對(duì)象名?!埃 鳖愃朴谠谔幚鞤OS文件時(shí),使用的“\”路徑分隔符。11.5將數(shù)據(jù)庫(kù)對(duì)象命名為VBA程序代碼中的變量26如果窗體控件對(duì)象名稱中含有空格或標(biāo)點(diǎn)符號(hào),就要用方括號(hào)把名稱括起來(lái),如下面語(yǔ)句所示:Forms!Customers![ContactName]=“JoeHill”可以使用Set關(guān)鍵字來(lái)建立控件對(duì)象的變量。當(dāng)需要多次引用對(duì)象時(shí),這樣處理是很方便的。如果窗體控件對(duì)象名稱中含有空格或標(biāo)點(diǎn)符號(hào),就要用方括27DimtxtContactAsControlSettxtContact=Forms!Customers![ContactName]txtContact=“JonHill”借助將變量說(shuō)明為對(duì)象類型并使用Set語(yǔ)句將對(duì)象指派到變量的方法,可以將任何數(shù)據(jù)庫(kù)對(duì)象指定為變量的名稱。當(dāng)指定給對(duì)象一個(gè)變量名時(shí),不是建立而是引用內(nèi)存的對(duì)象。DimtxtContactAsControl借2811.6變量命名的法則在編寫(xiě)VisualBasic程序代碼時(shí),可能會(huì)采用大量的變量名和許多不同的數(shù)據(jù)類型。對(duì)于控件對(duì)象,可以用VisualBasic中的Set關(guān)鍵字將每個(gè)命名的控件對(duì)象指定為一個(gè)變量名稱。但是隨著程序代碼的增多,要記住所有變量的數(shù)據(jù)類型,就變成很困難的事情了。Hungarian符號(hào)法,是目前比較流行的變量命名法則。其主要使用一組代表數(shù)據(jù)類型的碼,用小寫(xiě)的碼作為變量名的字首。例如,代表文本框的字首碼是txt,所以上例的文本框變量名為txtContact。11.6變量命名的法則在編寫(xiě)VisualBas29用戶定義的數(shù)據(jù)類型的標(biāo)識(shí)符(Identifier)被稱為產(chǎn)生的標(biāo)簽。在Hungarian字符串中,建立的標(biāo)簽是大寫(xiě)的,如下所示: TypeREC DwField1AsLong DwField2AsString DwField3AsSingle EndType用戶定義的數(shù)據(jù)類型的標(biāo)識(shí)符(Identifi30REC類型的變量是以rec字首說(shuō)明的,如下所示: DimrecRecordAsREC使用標(biāo)準(zhǔn)的數(shù)據(jù)類型字首,可使程序代碼易于閱讀與理解。REC類型的變量是以rec字首說(shuō)明的,如下所示:3111.7符號(hào)常量形式:Const符號(hào)常量名=表達(dá)式 符號(hào)常量名:常量名的命名規(guī)則同變量名,為便于與一般變量名區(qū)別,常量名一般用大寫(xiě)字母。 表達(dá)式:可以是數(shù)值常數(shù)、字符串常數(shù)以及由運(yùn)算符組成的表達(dá)式。11.7符號(hào)常量形式:Const符號(hào)常量名=表32例:ConstMAX=100若要在模塊的聲明區(qū)說(shuō)明符號(hào)常量,例如要建立一個(gè)所有模塊都可使用的全局常量的話,可以在Const前加上Global關(guān)鍵字,如: GlobalConstSPI=3.1416這一常量涵蓋全局或模塊級(jí)的范圍。例:ConstMAX=100若要在模塊的3311.8Access系統(tǒng)定義的常量Access包含有幾個(gè)Access啟動(dòng)時(shí)就建立的系統(tǒng)定義的常量,如True、False、Yes、No、On、Off和Null。這幾個(gè)常量中,在VisualBasic代碼中可用True、False和Null。剩下的四個(gè)是提供除了模塊以外的所有數(shù)據(jù)庫(kù)對(duì)象使用的。11.8Access系統(tǒng)定義的常量Access包含有幾個(gè)34全局的常量True和False在VisualBasic中必須要被顯示地說(shuō)明。在VisualBasic中不能指定True、False和Null為常量名。如果在VB中試圖給True、False和Null指定常量名,系統(tǒng)會(huì)提示錯(cuò)誤:Expected:identifier。全局的常量True和False在VisualBasic中必3511.9Access固有常量Access為操作、數(shù)據(jù)庫(kù)和變量數(shù)據(jù)類型,分別提供了以A_、DB_、V_為開(kāi)頭說(shuō)明的固有常量。這些名稱會(huì)出現(xiàn)在說(shuō)明窗體中的“常量主題”中。不可以將任何這些固有常量名稱作為用戶所定義的常量。11.9Access固有常量Access為操作、數(shù)據(jù)庫(kù)和3611.10程序控制流程可以只用三種語(yǔ)句來(lái)控制任何程序語(yǔ)言的流程:條件性執(zhí)行(If…Then)重復(fù)語(yǔ)句(DoWhile…Loop和相關(guān)的結(jié)構(gòu))終止語(yǔ)句(End…)VisualBasic和其他程序語(yǔ)言中額外的流程語(yǔ)句,可使編寫(xiě)程序代碼更為直接。11.10程序控制流程可以只用三種語(yǔ)句來(lái)控制任何程序語(yǔ)言37以GoTo轉(zhuǎn)移程序控制VBA的GOTOLabal語(yǔ)句可以跳過(guò)一些代碼塊到Labal的位置,并從該點(diǎn)繼續(xù)執(zhí)行。Labal標(biāo)號(hào)要從代碼的最左邊(第一列)開(kāi)始寫(xiě),這個(gè)位置通常會(huì)影響代碼的縮進(jìn)格式。一般情況下不要使用GOTO語(yǔ)句。在VBA程序中使用GOTO語(yǔ)句的唯一一個(gè)目的就是用OnErrorGoToLabal語(yǔ)句來(lái)處理錯(cuò)誤。以GoTo轉(zhuǎn)移程序控制VBA的GOTOLabal語(yǔ)句可38條件語(yǔ)句 If…Then…EndIf語(yǔ)句 SelectCase…EndSelect結(jié)構(gòu)條件語(yǔ)句 If…Then…EndIf語(yǔ)句39If/Then/Endif語(yǔ)句是典型的判斷分支控制語(yǔ)句。語(yǔ)法格式為:

If條件[=True]Then …條件為真時(shí)執(zhí)行的語(yǔ)句 Endif另外還可以使用嵌套IF語(yǔ)句格式:

If條件1[=True]Then …條件為真時(shí)執(zhí)行的語(yǔ)句 Elself條件2[=True]Then …條件1不成立但條件2成立時(shí),執(zhí)行的語(yǔ)句 EndifIf/Then/Endif語(yǔ)句是典型的判斷分支控制語(yǔ)句。語(yǔ)40下面的IF語(yǔ)句用來(lái)判斷一個(gè)字符是否是字母,而且判斷它的大小寫(xiě)。

IfAsc(strChar)>63AndAsc(strChar<91)Then strCharType=“大寫(xiě)字母子” ElselfAsc(strChar)>96AndAsc(strChar<123)Then strCharType=“小寫(xiě)字母” EndIf下面的IF語(yǔ)句用來(lái)判斷一個(gè)字符是否是字母,而41當(dāng)有多種選擇時(shí),使用If…Else語(yǔ)句,這樣的語(yǔ)句需要多重嵌套,使得程序十分復(fù)雜,不容易讀,這時(shí)就可以使用Select語(yǔ)句,Select語(yǔ)句是一個(gè)多分支控制語(yǔ)句。語(yǔ)法格式為: SelectCase表達(dá)式 Case值1 語(yǔ)句1 Case值2 語(yǔ)句2 … CaseElse 語(yǔ)句 Endselect當(dāng)有多種選擇時(shí),使用If…Else語(yǔ)句,這42例如:下面語(yǔ)句用來(lái)對(duì)字母進(jìn)行判斷SelectCasestrCharCase“A”To“Z”strCharType=“大寫(xiě)字母”Case“a”To“z”strCharType=“小寫(xiě)字母”Case“0”To“9”strCharType=“數(shù)字字母”Case“!”,”?”,”.”,”,””;”strCharType=“標(biāo)點(diǎn)符號(hào)”Case“”strCharType=“空格”Case<32strCharType=“特殊字母”CaseElsestrCharType=“其它字母”EndSelect例如:下面語(yǔ)句用來(lái)對(duì)字母進(jìn)行判斷SelectCasest43循環(huán)語(yǔ)句: For…Next Do…Loop While…Wend循環(huán)語(yǔ)句:44For語(yǔ)句是最常用的循環(huán)控制語(yǔ)句。語(yǔ)法格式為:For變量=開(kāi)始值To結(jié)束值Step步長(zhǎng)循環(huán)執(zhí)行語(yǔ)句Next變量注意:當(dāng)STEP不寫(xiě)時(shí),默認(rèn)的步長(zhǎng)是1。For語(yǔ)句是最常用的循環(huán)控制語(yǔ)句。語(yǔ)法格式為:45Do語(yǔ)句是另外一種循環(huán)語(yǔ)句,有兩種格式:DoWhile…Loop和DoUntil…Loop.1.Dowhile條件[=True] 循環(huán)語(yǔ)句,含有“條件”的變更語(yǔ)句Loop2.DoUntil條件<>True(或Not條件) 循環(huán)語(yǔ)句LoopDo語(yǔ)句是另外一種循環(huán)語(yǔ)句,有兩種格式:4611.11處理執(zhí)行時(shí)的錯(cuò)誤無(wú)論怎樣為程序作徹底地測(cè)試與排錯(cuò),執(zhí)行的錯(cuò)誤仍可能出現(xiàn)??梢允褂肙nErrorGoto指令來(lái)控制當(dāng)有執(zhí)行地錯(cuò)誤發(fā)生時(shí),程序作何反應(yīng)。11.11處理執(zhí)行時(shí)的錯(cuò)誤無(wú)論怎樣為程序作徹底地47OnErrorGoto指令的一般語(yǔ)法如下:OnErrorGotoLabelName

‘轉(zhuǎn)移到LabelName標(biāo)號(hào)的程序代碼的部分OnErrorResumeNext

‘不考慮錯(cuò)誤,繼續(xù)處理接下來(lái)的指令OnErrorGoto0

‘關(guān)閉錯(cuò)誤陷阱,則在錯(cuò)誤運(yùn)行后會(huì)出現(xiàn)一個(gè)對(duì)話框,顯示出相應(yīng)的出錯(cuò)信息。OnErrorGoto指令的一般語(yǔ)法如下:4811.12探索模塊窗體11.12探索模塊窗體49在模塊窗體中,可以書(shū)寫(xiě)VBA函數(shù)和過(guò)程。在數(shù)據(jù)庫(kù)窗體中單擊“模塊”按鈕,然后單擊數(shù)據(jù)庫(kù)窗體頂端的“新建”按鈕;或者選中要顯示的模塊名,然后單擊“設(shè)計(jì)”按鈕就顯示一個(gè)“模塊”窗體。上圖中的模塊窗體展示了模塊窗體與一個(gè)文檔編輯器相結(jié)合來(lái)編輯VBA代碼的窗體。在模塊窗體中,可以書(shū)寫(xiě)VBA函數(shù)和過(guò)程。在數(shù)據(jù)庫(kù)窗體5011.13小結(jié)在Access數(shù)據(jù)庫(kù)中,模塊是將VBA聲明和過(guò)程作為一個(gè)單元來(lái)保存的集合,其中的每一個(gè)過(guò)程可以是一個(gè)函數(shù)過(guò)程或子過(guò)程。11.13小結(jié)在Access數(shù)據(jù)庫(kù)中,模塊是將V51第十一章面向?qū)ο蟪绦蛟O(shè)計(jì) 語(yǔ)言-VBA第十一章面向?qū)ο蟪绦蛟O(shè)計(jì) 語(yǔ)言-VBA5211.1VBA概述雖然宏很好用,但它運(yùn)行的速度比較慢,也不能直接運(yùn)行很多WINDOWS的程序。尤其是不能自定義一些函數(shù),這樣當(dāng)我們要對(duì)某些數(shù)據(jù)進(jìn)行一些特殊的分析時(shí),它就無(wú)能為力了。由于宏具有這些局限性,所以在給數(shù)據(jù)庫(kù)設(shè)計(jì)一些特殊的功能時(shí),需要用到“模塊”對(duì)象來(lái)實(shí)現(xiàn),而這些“模塊”都是由一種叫做“VBA”的語(yǔ)言來(lái)實(shí)現(xiàn)的。使用它編寫(xiě)程序,然后將這些程序編譯成擁有特定功能的“模塊”,以便在Access2000中調(diào)用。11.1VBA概述雖然宏很好用,但它運(yùn)行的速度比53VB,就是微軟公司推出的可視化BASIC語(yǔ)言,用它來(lái)編程非常簡(jiǎn)單。因?yàn)樗?jiǎn)單,而且功能強(qiáng)大,所以微軟公司將它的一部分代碼結(jié)合到OFFICE中,形成我們今天所說(shuō)的VBA。它的很多語(yǔ)法繼承了“VB”,所以我們可以像編寫(xiě)VB語(yǔ)言那樣來(lái)編寫(xiě)VBA程序,以實(shí)現(xiàn)某個(gè)功能。當(dāng)這段程序編譯通過(guò)以后,將這段程序保存在Access中的一個(gè)模塊里,并通過(guò)類似在窗體中激發(fā)宏的操作那樣來(lái)啟動(dòng)這個(gè)“模塊”,從而實(shí)現(xiàn)相應(yīng)的功能。VB,就是微軟公司推出的可視化BASIC語(yǔ)言,用它來(lái)54“模塊”和“宏”的使用是差不多的。其實(shí)Access中的“宏”也可以存成“模塊”,這樣運(yùn)行起來(lái)的速度還會(huì)更快。“宏”的每個(gè)基本操作在“VBA”中都有相應(yīng)的等效語(yǔ)句,使用這些語(yǔ)句就可以實(shí)現(xiàn)所有單獨(dú)“宏”命令,所以“VBA”的功能是非常強(qiáng)大的?!澳K”和“宏”的使用是差不多的。其實(shí)Access中55需要使用VBA程序代碼作為Access操作指令的一部分的原因:建立用戶自定義的函數(shù)(UDF)代替重復(fù)使用的表達(dá)式。編寫(xiě)包含有比Iif()函數(shù)更復(fù)雜的決策結(jié)構(gòu)的表達(dá)式。想要執(zhí)行標(biāo)準(zhǔn)Access宏不支持的操作,例如:想要進(jìn)行事務(wù)處理。想要同時(shí)打開(kāi)兩個(gè)或兩個(gè)以上數(shù)據(jù)庫(kù)。想要提供應(yīng)用程序源文件復(fù)制的功能。需要使用VBA程序代碼作為Access操作指令的一部分5611.2模塊、函數(shù)及程序既然我們要編寫(xiě)“VBA”程序,就需要先看看“VBA”的開(kāi)發(fā)環(huán)境?!癡BA”的開(kāi)發(fā)環(huán)境是開(kāi)發(fā)“VBA”程序相應(yīng)的“設(shè)計(jì)器”,但我們不這么稱呼它,而是叫它“VBA開(kāi)發(fā)環(huán)境”,這種說(shuō)法是繼承了計(jì)算機(jī)語(yǔ)言對(duì)開(kāi)發(fā)器的一種統(tǒng)一叫法。我們首先要打開(kāi)一個(gè)數(shù)據(jù)庫(kù),然后選定數(shù)據(jù)庫(kù)窗口上的“模塊”選項(xiàng),再用鼠標(biāo)單擊數(shù)據(jù)庫(kù)窗口上的“新建”按鈕,這時(shí)就會(huì)彈出一個(gè)窗口,這就是“VBA”的“開(kāi)發(fā)環(huán)境”,如下圖所示。11.2模塊、函數(shù)及程序既然我們要編寫(xiě)“VBA”57VBA開(kāi)發(fā)環(huán)境分為“主窗口”、“模塊代碼”、“工程資源管理器”和“模塊屬性”這幾部分?!澳K代碼”窗口用來(lái)輸入“模塊”內(nèi)部的程序代碼?!肮こ藤Y源管理器”用來(lái)顯示這個(gè)數(shù)據(jù)庫(kù)中所有的“模塊”。當(dāng)我們用鼠標(biāo)單擊這個(gè)窗口內(nèi)的一個(gè)“模塊”選項(xiàng)時(shí),就會(huì)在模塊代碼窗口上顯示出這個(gè)模塊的“VBA”程序代碼。而“模塊屬性”窗口上就可以顯示當(dāng)前選定的“模塊”所具有的各種屬性。VBA開(kāi)發(fā)環(huán)境分為“主窗口”、“模塊代碼”、“工程資58模塊對(duì)象是將VisualBasicforApplication(簡(jiǎn)稱宏語(yǔ)言VBA)編寫(xiě)的過(guò)程和聲明作為一個(gè)整體進(jìn)行保存的過(guò)程的集合。一個(gè)模塊包含一個(gè)聲明區(qū)域,且可以包含一個(gè)或多個(gè)程序(以sub開(kāi)頭)或函數(shù)(以Function開(kāi)頭),模塊的聲明區(qū)域是用來(lái)聲明模塊使用的項(xiàng)目(通常是變量)。程序又稱為子程序。程序可以調(diào)用其他的程序,此時(shí),被調(diào)用的程序叫做子程序(SubProcedure)。程序是由開(kāi)始與結(jié)束的關(guān)鍵字定義的,如:

Sub子程序名(參數(shù)As數(shù)據(jù)類型)As數(shù)據(jù)類型 子程序語(yǔ)句EndSub模塊對(duì)象是將VisualBasicforApp59函數(shù)是一種可將數(shù)值返回到它們的名稱的程序。像“sin()”、“abs()”這些都是函數(shù)都是內(nèi)部函數(shù),現(xiàn)在我們要來(lái)講講外部函數(shù),外部函數(shù)和變量一樣在使用之前也是要先申明。它們的結(jié)構(gòu)如下圖所示。

Function函數(shù)名(參數(shù)As數(shù)據(jù)類型)As數(shù)據(jù)類型函數(shù)語(yǔ)句 函數(shù)名=<表達(dá)式>EndFunction我們可以引用程序名稱來(lái)調(diào)用該程序,但VisualBasic提供了一個(gè)關(guān)鍵字Call,可明確地調(diào)用一個(gè)程序。在程序名前加上Call是一個(gè)很好的程序設(shè)計(jì)習(xí)慣。函數(shù)是一種可將數(shù)值返回到它們的名稱的程序。像“sin60例如:PublicFunctionGetNumber(a,b,cAsInteger)AsInteger GetNumber=a+b-cEndFunction函數(shù)則會(huì)把“a+b-c”的值返回給函數(shù)名“Getnumber”,如果我們輸入Getnumber(9,4,2),則會(huì)返回“9+4-2”即“11”給函數(shù)“Getnumber”。

例如:61“Function”的英文含意就是“函數(shù)”。它在這兒用來(lái)作為函數(shù)申明的一個(gè)內(nèi)容。在它后面跟著的就是這個(gè)函數(shù)的函數(shù)名。在這個(gè)函數(shù)名后面的括號(hào)中,列的是這個(gè)函數(shù)中的參數(shù)。每個(gè)函數(shù)之間要用逗號(hào)隔開(kāi),并用“As”語(yǔ)句后跟“數(shù)據(jù)類型”來(lái)定義數(shù)據(jù)的類型。括號(hào)外面的“As數(shù)據(jù)類型”用來(lái)定義“函數(shù)名”的。它表示函數(shù)返回的數(shù)據(jù)的數(shù)據(jù)類型?!癋unction”的英文含意就是“函數(shù)”。它在這兒62其實(shí)子程序和函數(shù)很相似,這兩種類型的過(guò)程都可以接收參數(shù),函數(shù)可以返回單一的數(shù)據(jù)值,但子程序不能。我們不能使用Call來(lái)執(zhí)行函數(shù),必須以該函數(shù)的名稱引用它才行。函數(shù)調(diào)用是由接在函數(shù)名稱后的括號(hào)所辨別的,也就是說(shuō),函數(shù)需要參數(shù)。另外,我們可以從ACCESS中任何地方執(zhí)行一個(gè)函數(shù),包括從查詢中的表達(dá)式中和宏中。然而你只能從一個(gè)函數(shù)、子程序或作為一個(gè)窗體或報(bào)表中的一個(gè)事件過(guò)程來(lái)執(zhí)行子程序。其實(shí)子程序和函數(shù)很相似,這兩種類型的過(guò)程都可以接收參6311.3VB的數(shù)據(jù)類型與數(shù)據(jù)庫(kù)對(duì)象當(dāng)建立VisualBasic數(shù)據(jù)表時(shí),所有用來(lái)指定字段數(shù)據(jù)類型與大小的數(shù)據(jù)類型(除OLE對(duì)象和備注數(shù)據(jù)類型外),都在VisualBasic中有對(duì)應(yīng)的東西。在Access中可用的數(shù)據(jù)類型分為3種:標(biāo)準(zhǔn)型、自定義型、對(duì)象型。11.3VB的數(shù)據(jù)類型與數(shù)據(jù)庫(kù)對(duì)象當(dāng)建立Visu641.標(biāo)準(zhǔn)型,共有7種(1)整數(shù):后綴符為“%”(2)長(zhǎng)整數(shù):后綴符為“&”(3)單精度:后綴符為“!”(4)雙精度:后綴符為“#”(5)貨幣:后綴符為“@”(6)字符串:后綴符為“$”(7)變體:可用于任何數(shù)據(jù)類型。1.標(biāo)準(zhǔn)型,共有7種652.自定義型:它是用關(guān)鍵詞Type定義的,如:TypePointXasIntegerYasintegerEndType即定義了一個(gè)點(diǎn)(point)的數(shù)據(jù)結(jié)構(gòu),聲明和使用變量形式如: DimpCurPointasPoint PCurPoint.X=10 PCurPoint.Y=102.自定義型:它是用關(guān)鍵詞Type定義的,如:TypeP663.對(duì)象型:所有的數(shù)據(jù)庫(kù)中使用的數(shù)據(jù)庫(kù)的對(duì)象,如數(shù)據(jù)表、查詢、窗體和報(bào)表,也有對(duì)應(yīng)的Access數(shù)據(jù)類型。VisualBasic支持的數(shù)據(jù)庫(kù)對(duì)象的數(shù)據(jù)類型對(duì)象數(shù)據(jù)類型對(duì)應(yīng)的數(shù)據(jù)庫(kù)對(duì)象數(shù)據(jù)庫(kù)databaseAccess數(shù)據(jù)庫(kù)窗體forms窗體,包括子窗體報(bào)表report報(bào)表,包括子報(bào)表控件controls控件、窗體和報(bào)表查詢query查詢定義(對(duì)等的SQL語(yǔ)句)數(shù)據(jù)表table數(shù)據(jù)庫(kù)數(shù)據(jù)表結(jié)果表recordset可更新的查詢結(jié)果快照表snapshot不可更新的查詢結(jié)果3.對(duì)象型:所有的數(shù)據(jù)庫(kù)中使用的數(shù)據(jù)庫(kù)的對(duì)象,如數(shù)6711.4變量變量和常量指的是:被命名的內(nèi)存單元在VB中命名一個(gè)變量或常量的規(guī)則如下:必須以字母或漢字開(kāi)頭,后可跟漢字、字母、數(shù)字或下劃線組成,長(zhǎng)度小于等于255個(gè)字符。不能使用VB中的關(guān)鍵字(Integer、String、Double等)。11.4變量變量和常量指的是:被命名的內(nèi)存單元在V68VB中不區(qū)分變量名的大小寫(xiě),例如,XXY、XyX、xyX、xyx等都被認(rèn)為是同一個(gè)變量。為了便于區(qū)分,一般變量首字母用大寫(xiě)字母,其余用小寫(xiě)字母表示。常量全部用大寫(xiě)字母表示。為了增加程序的可讀性,可在變量名前加一個(gè)縮寫(xiě)的前綴來(lái)表明該變量的數(shù)據(jù)類型。如strMystring、intCount、sngMax等。第十一章面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言VBA課件6911.4.1顯式變量其語(yǔ)法定義如下:

Dim變量名As類型名Dim是使用最多的一個(gè)關(guān)鍵詞。例:DimiCountAsintegerDimNewVarAsInteger在使用變量前,一般必須先聲明變量名和其類型,以便系統(tǒng)為它分配存儲(chǔ)單元??梢栽谀K的說(shuō)明區(qū)域中,加入OptionExplict語(yǔ)句來(lái)強(qiáng)制要求所有變量必須說(shuō)明。11.4.1顯式變量其語(yǔ)法定義如下:例:DimiC7011.4.2變量的作用域與生命周期局部變量:在過(guò)程內(nèi)用Dim語(yǔ)句聲明的變量(或不加聲明直接使用的變量),只能在本過(guò)程中使用。不同的過(guò)程中可有相同名稱的變量,彼此互不相干。程序中聲明的每個(gè)變量都有作用域,超出它的作用域后,變量就失去作用,成為沒(méi)有定義的字符。Access中變量的作用域有3類。窗體/模塊級(jí)變量:在“通用聲明”段中用Dim語(yǔ)句或用Private語(yǔ)句聲明的變量,可被本窗體/模塊的任何過(guò)程訪問(wèn)。11.4.2變量的作用域與生命周期局部變量:在過(guò)程內(nèi)用D71全局變量:在“通用聲明”段中用Public語(yǔ)句聲明的變量,可被本應(yīng)用程序的任何過(guò)程或函數(shù)訪問(wèn)。全局變量的值在整個(gè)應(yīng)用程序中始終不會(huì)消失和重新初始化,只有當(dāng)整個(gè)應(yīng)用程序執(zhí)行結(jié)束時(shí),才會(huì)消失。全局變量:在“通用聲明”段中用Public語(yǔ)句聲明的變量,可72ReDim語(yǔ)句該語(yǔ)句與Dim語(yǔ)句聯(lián)合起來(lái)使用,來(lái)實(shí)現(xiàn)在Access中動(dòng)態(tài)分配內(nèi)存。使用方法為:首先在代碼中使用Dim或Global來(lái)聲明一個(gè)動(dòng)態(tài)數(shù)組,但不確定數(shù)組的寬度和維數(shù),在需要使用數(shù)組來(lái)存儲(chǔ)數(shù)據(jù)時(shí),使用ReDim來(lái)聲明數(shù)組的寬度和維數(shù),但這時(shí)已經(jīng)不能更改數(shù)組的類型了。使用ReDim可以為一個(gè)動(dòng)態(tài)數(shù)組分配內(nèi)存,多次指定不同的寬度,但多次定義時(shí),維數(shù)必須和第一次使用ReDim定義的維數(shù)一致,不能再次進(jìn)行修改了。另外,ReDim語(yǔ)句之后還可以使用修補(bǔ)詞“Preserve”將原數(shù)組中已經(jīng)分配的單元保留下來(lái),這時(shí)當(dāng)?shù)诙问褂肦分配內(nèi)存時(shí),只能在最后一維上變動(dòng)。ReDim語(yǔ)句7311.4.3隱含型變量在VB中允許使用的變量未進(jìn)行聲明而直接使用。所有隱式聲明的變量都是Variant類型。如:NewVar=12345上面的語(yǔ)句說(shuō)明了一個(gè)Variant類型的變量NewVar,其值為12345。11.4.3隱含型變量在VB中允許使用的變量未進(jìn)行聲明而7411.4.4數(shù)組數(shù)組不是一種數(shù)據(jù)類型,而是一組相同類型的變量的集合。數(shù)組必須先聲明后使用。聲明數(shù)組名、類型、維數(shù)(下標(biāo)的個(gè)數(shù))和數(shù)組大小。聲明數(shù)組,在內(nèi)存中分配一個(gè)連續(xù)的區(qū)域。數(shù)組中各元素在通常情況下類型必須相同,但若數(shù)組類型為Variant時(shí),可包含不同類型的數(shù)據(jù)。數(shù)組元素:數(shù)組中的某個(gè)數(shù)據(jù)項(xiàng)。數(shù)組元素的使用同簡(jiǎn)單變量的使用。11.4.4數(shù)組數(shù)組不是一種數(shù)據(jù)類型,而是一組相75Dim數(shù)組名(下標(biāo)范圍)As類型名Dim動(dòng)態(tài)數(shù)組名()As類型名Dim數(shù)組名(下標(biāo)開(kāi)始值To下標(biāo)結(jié)束值)As類型名Dim數(shù)組名(下標(biāo)范圍)As類型名7611.5將數(shù)據(jù)庫(kù)對(duì)象命名為VBA程序代碼中的變量以Access建立的數(shù)據(jù)庫(kù)對(duì)象及其屬性可被看成是VB程序代碼中的變量及其指定的值,例如含有客戶地址數(shù)據(jù)的文本框。可以使用以下語(yǔ)句:Forms!Customers!Address=“123ElmSt.”關(guān)鍵字Forms定義對(duì)象的類型。感嘆號(hào)“!”(程序設(shè)計(jì)稱之為bang符號(hào))分隔開(kāi)格式名和控件對(duì)象名?!?!”類似于在處理DOS文件時(shí),使用的“\”路徑分隔符。11.5將數(shù)據(jù)庫(kù)對(duì)象命名為VBA程序代碼中的變量77如果窗體控件對(duì)象名稱中含有空格或標(biāo)點(diǎn)符號(hào),就要用方括號(hào)把名稱括起來(lái),如下面語(yǔ)句所示:Forms!Customers![ContactName]=“JoeHill”可以使用Set關(guān)鍵字來(lái)建立控件對(duì)象的變量。當(dāng)需要多次引用對(duì)象時(shí),這樣處理是很方便的。如果窗體控件對(duì)象名稱中含有空格或標(biāo)點(diǎn)符號(hào),就要用方括78DimtxtContactAsControlSettxtContact=Forms!Customers![ContactName]txtContact=“JonHill”借助將變量說(shuō)明為對(duì)象類型并使用Set語(yǔ)句將對(duì)象指派到變量的方法,可以將任何數(shù)據(jù)庫(kù)對(duì)象指定為變量的名稱。當(dāng)指定給對(duì)象一個(gè)變量名時(shí),不是建立而是引用內(nèi)存的對(duì)象。DimtxtContactAsControl借7911.6變量命名的法則在編寫(xiě)VisualBasic程序代碼時(shí),可能會(huì)采用大量的變量名和許多不同的數(shù)據(jù)類型。對(duì)于控件對(duì)象,可以用VisualBasic中的Set關(guān)鍵字將每個(gè)命名的控件對(duì)象指定為一個(gè)變量名稱。但是隨著程序代碼的增多,要記住所有變量的數(shù)據(jù)類型,就變成很困難的事情了。Hungarian符號(hào)法,是目前比較流行的變量命名法則。其主要使用一組代表數(shù)據(jù)類型的碼,用小寫(xiě)的碼作為變量名的字首。例如,代表文本框的字首碼是txt,所以上例的文本框變量名為txtContact。11.6變量命名的法則在編寫(xiě)VisualBas80用戶定義的數(shù)據(jù)類型的標(biāo)識(shí)符(Identifier)被稱為產(chǎn)生的標(biāo)簽。在Hungarian字符串中,建立的標(biāo)簽是大寫(xiě)的,如下所示: TypeREC DwField1AsLong DwField2AsString DwField3AsSingle EndType用戶定義的數(shù)據(jù)類型的標(biāo)識(shí)符(Identifi81REC類型的變量是以rec字首說(shuō)明的,如下所示: DimrecRecordAsREC使用標(biāo)準(zhǔn)的數(shù)據(jù)類型字首,可使程序代碼易于閱讀與理解。REC類型的變量是以rec字首說(shuō)明的,如下所示:8211.7符號(hào)常量形式:Const符號(hào)常量名=表達(dá)式 符號(hào)常量名:常量名的命名規(guī)則同變量名,為便于與一般變量名區(qū)別,常量名一般用大寫(xiě)字母。 表達(dá)式:可以是數(shù)值常數(shù)、字符串常數(shù)以及由運(yùn)算符組成的表達(dá)式。11.7符號(hào)常量形式:Const符號(hào)常量名=表83例:ConstMAX=100若要在模塊的聲明區(qū)說(shuō)明符號(hào)常量,例如要建立一個(gè)所有模塊都可使用的全局常量的話,可以在Const前加上Global關(guān)鍵字,如: GlobalConstSPI=3.1416這一常量涵蓋全局或模塊級(jí)的范圍。例:ConstMAX=100若要在模塊的8411.8Access系統(tǒng)定義的常量Access包含有幾個(gè)Access啟動(dòng)時(shí)就建立的系統(tǒng)定義的常量,如True、False、Yes、No、On、Off和Null。這幾個(gè)常量中,在VisualBasic代碼中可用True、False和Null。剩下的四個(gè)是提供除了模塊以外的所有數(shù)據(jù)庫(kù)對(duì)象使用的。11.8Access系統(tǒng)定義的常量Access包含有幾個(gè)85全局的常量True和False在VisualBasic中必須要被顯示地說(shuō)明。在VisualBasic中不能指定True、False和Null為常量名。如果在VB中試圖給True、False和Null指定常量名,系統(tǒng)會(huì)提示錯(cuò)誤:Expected:identifier。全局的常量True和False在VisualBasic中必8611.9Access固有常量Access為操作、數(shù)據(jù)庫(kù)和變量數(shù)據(jù)類型,分別提供了以A_、DB_、V_為開(kāi)頭說(shuō)明的固有常量。這些名稱會(huì)出現(xiàn)在說(shuō)明窗體中的“常量主題”中。不可以將任何這些固有常量名稱作為用戶所定義的常量。11.9Access固有常量Access為操作、數(shù)據(jù)庫(kù)和8711.10程序控制流程可以只用三種語(yǔ)句來(lái)控制任何程序語(yǔ)言的流程:條件性執(zhí)行(If…Then)重復(fù)語(yǔ)句(DoWhile…Loop和相關(guān)的結(jié)構(gòu))終止語(yǔ)句(End…)VisualBasic和其他程序語(yǔ)言中額外的流程語(yǔ)句,可使編寫(xiě)程序代碼更為直接。11.10程序控制流程可以只用三種語(yǔ)句來(lái)控制任何程序語(yǔ)言88以GoTo轉(zhuǎn)移程序控制VBA的GOTOLabal語(yǔ)句可以跳過(guò)一些代碼塊到Labal的位置,并從該點(diǎn)繼續(xù)執(zhí)行。Labal標(biāo)號(hào)要從代碼的最左邊(第一列)開(kāi)始寫(xiě),這個(gè)位置通常會(huì)影響代碼的縮進(jìn)格式。一般情況下不要使用GOTO語(yǔ)句。在VBA程序中使用GOTO語(yǔ)句的唯一一個(gè)目的就是用OnErrorGoToLabal語(yǔ)句來(lái)處理錯(cuò)誤。以GoTo轉(zhuǎn)移程序控制VBA的GOTOLabal語(yǔ)句可89條件語(yǔ)句 If…Then…EndIf語(yǔ)句 SelectCase…EndSelect結(jié)構(gòu)條件語(yǔ)句 If…Then…EndIf語(yǔ)句90If/Then/Endif語(yǔ)句是典型的判斷分支控制語(yǔ)句。語(yǔ)法格式為:

If條件[=True]Then …條件為真時(shí)執(zhí)行的語(yǔ)句 Endif另外還可以使用嵌套IF語(yǔ)句格式:

If條件1[=True]Then …條件為真時(shí)執(zhí)行的語(yǔ)句 Elself條件2[=True]Then …條件1不成立但條件2成立時(shí),執(zhí)行的語(yǔ)句 EndifIf/Then/Endif語(yǔ)句是典型的判斷分支控制語(yǔ)句

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論