《access數(shù)據(jù)庫(kù)設(shè)計(jì)》課件第9章VBA_第1頁(yè)
《access數(shù)據(jù)庫(kù)設(shè)計(jì)》課件第9章VBA_第2頁(yè)
《access數(shù)據(jù)庫(kù)設(shè)計(jì)》課件第9章VBA_第3頁(yè)
《access數(shù)據(jù)庫(kù)設(shè)計(jì)》課件第9章VBA_第4頁(yè)
《access數(shù)據(jù)庫(kù)設(shè)計(jì)》課件第9章VBA_第5頁(yè)
已閱讀5頁(yè),還剩106頁(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)介

第9章模塊與VBA編程基礎(chǔ)本章知識(shí)點(diǎn)VBA的編程環(huán)境VBA模塊簡(jiǎn)介VBA程序設(shè)計(jì)基礎(chǔ)VBA流程控制語(yǔ)句數(shù)組面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念過(guò)程調(diào)用和參數(shù)傳遞VBA常用操作9.1VBA的編程環(huán)境VisualBasicforApplication(簡(jiǎn)稱(chēng)VBA)是微軟Office套件的內(nèi)置編程語(yǔ)言,使用VBA可提高Word、Excel、Access、PowerPoint的使用效率。VBA的編程環(huán)境也稱(chēng)為VBE(MicrosoftVisualBasicEditor),能夠編輯VBA源代碼并支持多種程序調(diào)試工具。語(yǔ)法與VisualBasic、ASP等相同(1)在窗體或報(bào)表外進(jìn)入VBE1)選擇Access窗口中“數(shù)據(jù)庫(kù)工具”選項(xiàng)卡,然后選擇“宏”組中“VisualBasic”按鈕。2)選擇“創(chuàng)建”選項(xiàng)卡中“宏與代碼”組中“VisualBasic”按鈕。3)選擇“創(chuàng)建”選項(xiàng)卡中“宏與代碼”組中“模塊”或“類(lèi)模塊”按鈕,可進(jìn)入VBE環(huán)境并新建了一個(gè)模塊或類(lèi)模塊。4)按Alt+F11組合鍵。一、進(jìn)入VBE編程環(huán)境9.1VBA的編程環(huán)境9.1VBA的編程環(huán)境打開(kāi)學(xué)生管理系統(tǒng)數(shù)據(jù)庫(kù),進(jìn)入VBE界面用戶(hù)也可在進(jìn)入VBE后,再新建模塊或類(lèi)模塊,方法如下:選擇插入菜單中的“模塊”選項(xiàng),可在VBE窗口新建一個(gè)空白模塊。其默認(rèn)名稱(chēng)為“模塊1”。選擇插入菜單中的“類(lèi)模塊”選項(xiàng),可在VBE窗口新建一個(gè)空白類(lèi)模塊。其默認(rèn)名稱(chēng)為“類(lèi)1”。9.1VBA的編程環(huán)境9.1VBA的編程環(huán)境(2)在窗體或報(bào)表中進(jìn)入VBE1)在窗體或報(bào)表設(shè)計(jì)視圖中,單擊“窗體設(shè)計(jì)工具”(或報(bào)表設(shè)計(jì)工具)的“設(shè)計(jì)”選項(xiàng)卡“工具”組的“查看代碼”按鈕,即可打開(kāi)代碼窗口。

在該窗口中,可以單擊左側(cè)下拉式列表框選擇控件對(duì)象,單擊右側(cè)下拉式列表框選擇該控件所涉及的事件。9.1VBA的編程環(huán)境

9.1VBA的編程環(huán)境二、VBE工具欄9.1VBA的編程環(huán)境(1)標(biāo)準(zhǔn)工具欄(2)編輯工具欄(3)調(diào)試工具欄(4)用戶(hù)窗體工具欄三、VBE菜單欄9.1VBA的編程環(huán)境文件:保存、導(dǎo)入、導(dǎo)出和退出操作。編輯:對(duì)程序代碼撤銷(xiāo)、復(fù)制、清除、查找、縮進(jìn)和凸出等基本編輯操作;顯示屬性/方法列表、參數(shù)列表和快速列表等。視圖:隱藏/顯示管理。包括:代碼窗口、對(duì)象窗口、對(duì)象瀏覽器、立即窗口、本地窗口和監(jiān)視窗口等。插入:插入類(lèi)模塊、過(guò)程和文件等。格式:控件位置和大小等調(diào)整操作。調(diào)試:編譯、調(diào)試和監(jiān)視單面操作。運(yùn)行:運(yùn)行、中斷、重置代碼和設(shè)置模式操作。工具:管理VBE選項(xiàng)和宏。外接程序:管理外接程序。窗口:管理窗口顯示方式。幫助:連接幫助文件或MSDN鏈接。四、VBE窗口9.1VBA的編程環(huán)境五、VBE程序調(diào)試9.1VBA的編程環(huán)境(1)逐語(yǔ)句逐語(yǔ)句也叫單步執(zhí)行,通過(guò)單行執(zhí)行程序代碼(包括被調(diào)用的過(guò)程),可及時(shí)跟蹤變量的值,從而發(fā)現(xiàn)錯(cuò)誤(2)逐過(guò)程逐過(guò)程也是逐行執(zhí)行代碼,但是與逐語(yǔ)句不同的是,逐過(guò)程在遇到過(guò)程時(shí),并不進(jìn)入到過(guò)程內(nèi)部單步執(zhí)行。(3)跳出跳出能夠?qū)⒃撨^(guò)程中采用單步執(zhí)行后未執(zhí)行的剩余代碼行一次性全部執(zhí)行完(包括該過(guò)程中被調(diào)用的其他過(guò)程),程序返回調(diào)用該過(guò)程的下一條語(yǔ)句處。(4)運(yùn)行到光標(biāo)處VBA能夠直接運(yùn)行到光標(biāo)所在處,并暫停程序運(yùn)行。六、一個(gè)簡(jiǎn)單的應(yīng)用程序9.1VBA的編程環(huán)境使用VBA創(chuàng)建一個(gè)顯示“HelloWorld!”的應(yīng)用程序,具體方法如下:(1)啟動(dòng)Access,選擇“創(chuàng)建”選項(xiàng)卡中“宏與代碼”組中的“模塊”按鈕。(2)在模塊1的代碼窗口中,新建Sub過(guò)程,并輸入模塊1代碼窗口中輸入程序(3)保存模塊,將光標(biāo)置于Hello過(guò)程中的任意位置,單擊工具欄上運(yùn)行按鈕,運(yùn)行的結(jié)果9.2VBA模塊簡(jiǎn)介模塊也是Access系統(tǒng)中的對(duì)象,由VBA編寫(xiě)的程序代碼集合構(gòu)成,并以函數(shù)過(guò)程(Function)和子過(guò)程(Sub)進(jìn)行存儲(chǔ)。由于模塊可多次被調(diào)用,有效地降低了代碼的重復(fù)率。模塊分為標(biāo)準(zhǔn)模塊和類(lèi)模塊兩種類(lèi)型。一、標(biāo)準(zhǔn)模塊9.2VBA模塊簡(jiǎn)介標(biāo)準(zhǔn)模塊具有全局特征,其內(nèi)部主要存放公共變量和過(guò)程,以便數(shù)據(jù)庫(kù)其他模塊進(jìn)行引用和調(diào)用。標(biāo)準(zhǔn)模塊的作用域在整個(gè)應(yīng)用程序均有效,其生存期與應(yīng)用程序相同,即隨應(yīng)用程序執(zhí)行而開(kāi)始、終止而結(jié)束。二、類(lèi)模塊9.2VBA模塊簡(jiǎn)介Access中的窗體模塊和報(bào)表模塊均屬于類(lèi)模塊,與標(biāo)準(zhǔn)模塊全局特性不同,類(lèi)模塊具有局部性,類(lèi)模塊的作用域僅局限所屬的窗體或報(bào)表,生命周期隨窗體或報(bào)表打開(kāi)而開(kāi)始,關(guān)閉而終止。窗體或報(bào)表模塊一般都含有事件過(guò)程,可用于響應(yīng)窗體或報(bào)表的事件。三、VBA代碼編寫(xiě)模塊過(guò)程9.2VBA模塊簡(jiǎn)介模塊有聲明和過(guò)程定義兩部分構(gòu)成。(1)聲明模塊的聲明區(qū)主要用于聲明模塊級(jí)的變量和常量以及Option語(yǔ)句,例如,1)OptionBase格式:OptionBase0|1功能:聲明數(shù)組的起始下標(biāo)從0或是1開(kāi)始,默認(rèn)為0。2)OptionCompare格式:OptionCompare|Binary|Text|Database功能:聲明比較文本時(shí)采用的方法,其中Binary|Text|Database分別代表二進(jìn)制、文本和數(shù)據(jù)庫(kù)方式。3)OptionExplicit功能:顯示聲明模塊中所有變量。三、VBA代碼編寫(xiě)模塊過(guò)程9.2VBA模塊簡(jiǎn)介(2)定義在模塊中除了聲明區(qū)域外,還可包含多個(gè)子過(guò)程(以Sub開(kāi)頭)或函數(shù)過(guò)程(以Function開(kāi)頭)的定義。Sub分為用戶(hù)自定義過(guò)程和事件過(guò)程兩類(lèi),事件過(guò)程具有特定的格式,由Access根據(jù)不同的對(duì)象自動(dòng)生成,其格式為:對(duì)象名_事件名除了系統(tǒng)預(yù)定義的事件過(guò)程外,Access允許用戶(hù)自定義過(guò)程或函數(shù)??稍诖a窗口中直接輸入過(guò)程(函數(shù)),或者使用對(duì)話(huà)框插入。四、將宏轉(zhuǎn)換為模塊9.2VBA模塊簡(jiǎn)介(1)選擇要進(jìn)行轉(zhuǎn)換的宏,如果是包含有宏的窗體或報(bào)表,可先打開(kāi)其設(shè)計(jì)視圖。(2)在宏設(shè)計(jì)視圖中,選擇“宏工具”菜單->“設(shè)計(jì)”->“將宏轉(zhuǎn)換為VisualBasic代碼”(或者在窗體/報(bào)表設(shè)計(jì)視圖中,選擇“窗體/報(bào)表設(shè)計(jì)工具”菜單->“設(shè)計(jì)”->“將窗體/報(bào)表的宏轉(zhuǎn)換為VisualBasic代碼”)。把宏轉(zhuǎn)換成VBA模塊,執(zhí)行效率較低。五、在模塊中執(zhí)行宏9.2VBA模塊簡(jiǎn)介在模塊中執(zhí)行宏可使用DoCmd對(duì)象的RunMacro方法,其格式如下:DoCmd.RunMacro宏名[,RepeatCount][,RepeatExpression]其中RepeatCount為可選項(xiàng),表示宏重復(fù)執(zhí)行次數(shù);RepeatExpression代表重復(fù)執(zhí)行宏的條件,在每次運(yùn)行宏時(shí)均進(jìn)行計(jì)算,若為False時(shí),則停止運(yùn)行宏。9.3VBA程序設(shè)計(jì)基礎(chǔ)一、VBA書(shū)寫(xiě)規(guī)定(1)VBA語(yǔ)句是執(zhí)行具體操作的指令,每條語(yǔ)句以回車(chē)鍵結(jié)束。若將多條語(yǔ)句寫(xiě)在同一行上,各語(yǔ)句需要用冒號(hào)“:”分隔。(2)VBA允許一條較長(zhǎng)的語(yǔ)句分多行書(shū)寫(xiě),但必須在續(xù)行的行末加入續(xù)行符“_”(1個(gè)空格和1個(gè)下劃線(xiàn)),表示下一行與該行屬于同一個(gè)語(yǔ)句行,一個(gè)邏輯行最多只能有25個(gè)后續(xù)行。(3)VBA程序代碼并不區(qū)分大小寫(xiě)字母。(4)VBA代碼中必須使用西文標(biāo)點(diǎn),任何中文標(biāo)點(diǎn)均認(rèn)為是語(yǔ)法錯(cuò)誤代碼。(5)在代碼中可使用注釋語(yǔ)句。9.3VBA程序設(shè)計(jì)基礎(chǔ)二、數(shù)據(jù)類(lèi)型和數(shù)據(jù)庫(kù)對(duì)象1.數(shù)據(jù)類(lèi)型

VBA數(shù)據(jù)類(lèi)型包括兩種:標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型與用戶(hù)自定義數(shù)據(jù)類(lèi)型。(1)標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型9.3VBA程序設(shè)計(jì)基礎(chǔ)(2)用戶(hù)自定義類(lèi)型用戶(hù)自定義數(shù)據(jù)類(lèi)型是由若干個(gè)標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型進(jìn)行組合后產(chǎn)生的一種復(fù)合類(lèi)型,其定義格式如下:[Private|Public]Type自定義類(lèi)型名元素名[([下標(biāo)])]As類(lèi)型名

……元素名[([下標(biāo)])]As類(lèi)型名EndTypePublic和Private為可選,代表自定義類(lèi)型的作用域(參加§9.3.3變量定義)。自定義類(lèi)型名為必選,需要遵循變量命名原則。元素名為必選,代表組成用戶(hù)自定義類(lèi)型的元素(或成員)名稱(chēng),元素名稱(chēng)也應(yīng)遵循變量命名原則。下標(biāo)為可選,用于數(shù)組類(lèi)型的元素(參見(jiàn)§9.5數(shù)組)。9.3VBA程序設(shè)計(jì)基礎(chǔ)例如:在窗體中定義一個(gè)能夠保存每個(gè)學(xué)生信息的自定義類(lèi)型名Student。PrivateTypeStudentIDAsString*4'定義學(xué)號(hào),采用定長(zhǎng)字符串,長(zhǎng)度為4NameAsString*6'定義姓名,采用定長(zhǎng)字符串,長(zhǎng)度為6SexAsString*1'定義性別,采用定長(zhǎng)字符串,長(zhǎng)度為1Score(1To3)AsSingle'定義3門(mén)課程的成績(jī),Score為數(shù)組名EndType9.3VBA程序設(shè)計(jì)基礎(chǔ)二、數(shù)據(jù)類(lèi)型和數(shù)據(jù)庫(kù)對(duì)象2.數(shù)據(jù)庫(kù)對(duì)象在VBA中除了標(biāo)準(zhǔn)和用戶(hù)自定義類(lèi)型外,還包括對(duì)象類(lèi)型,用于定義VBA的數(shù)據(jù)庫(kù)、表、查詢(xún)、窗體和報(bào)表等對(duì)象,常用的VBA數(shù)據(jù)庫(kù)對(duì)象類(lèi)型參見(jiàn)表。9.3VBA程序設(shè)計(jì)基礎(chǔ)三、常量與變量1.常量(1)普通常量例如:"ACCESS程序設(shè)計(jì)",21.5,True,#2017-1-922:18:53PM#。(2)符號(hào)常量符號(hào)常量(用戶(hù)自定義常量)是用Const語(yǔ)句來(lái)聲明的,其格式:[Public|Private]Const常量名[As類(lèi)型|類(lèi)型符號(hào)]=表達(dá)式例如:ConstPI#=3.1415926535ConstEAsDouble=2.71828(3)系統(tǒng)常量其中VBA對(duì)象庫(kù)的常量以"vb"開(kāi)頭,Access對(duì)象庫(kù)的常量以"ac"開(kāi)頭。例如,acColorIndexBlack,acLeftButton和vbRed等。9.3VBA程序設(shè)計(jì)基礎(chǔ)2.變量(1)顯示聲明[Public|Private|Dim|Static]變量名1[As類(lèi)型|類(lèi)型符號(hào)][,變量名2[As類(lèi)型|類(lèi)型符號(hào)]]…其中Public|Private|Dim|Static代表變量的作用域,主要包括如下三類(lèi):1)全局級(jí)全局級(jí)使用Public在模塊通用段聲明區(qū)聲明的變量,表示所有模塊均可訪(fǎng)問(wèn)該變量。

2)模塊級(jí)模塊級(jí)使用Private在模塊通用段聲明區(qū)聲明的變量,表示只允許本模塊訪(fǎng)問(wèn)該變量。

3)過(guò)程級(jí)過(guò)程級(jí)使用Dim或Static在過(guò)程內(nèi)部聲明的變量,作用域僅限在過(guò)程內(nèi)部被訪(fǎng)問(wèn)。9.3VBA程序設(shè)計(jì)基礎(chǔ)(2)隱式聲明VBA中也允許變量不聲明就使用,此時(shí)該變量同樣默認(rèn)為Variant類(lèi)型,稱(chēng)為隱式聲明。隱式聲明往往具有一定隱患,很容易造成調(diào)試?yán)щy。為了避免上述問(wèn)題,可在類(lèi)模塊、窗體模塊或標(biāo)準(zhǔn)模塊的聲明段中加入這個(gè)語(yǔ)句:OptionExplicit強(qiáng)制在模塊中所有變量必須顯示聲明才可以使用。9.3VBA程序設(shè)計(jì)基礎(chǔ)(3)數(shù)據(jù)庫(kù)對(duì)象變量1)聲明對(duì)象變量Access建立的數(shù)據(jù)庫(kù)對(duì)象,可看成是對(duì)象變量,同樣可用顯示方式進(jìn)行聲明,例如:DimtxtUserAsControl'聲明txtUser為Control類(lèi)型的對(duì)象變量2)引用對(duì)象的屬性對(duì)象變量的屬性可以采用“對(duì)象名.屬性名”來(lái)引用,例如設(shè)置txtUser控件Value屬性為“Admin”的VBA代碼為:txtUser.Value=”Admin”3)引用窗體或報(bào)表中的對(duì)象變量窗體:Forms!窗體對(duì)象名!對(duì)象變量名報(bào)表:Reports!報(bào)表對(duì)象名!對(duì)象變量名例如:Forms!Teacher!txtID.Value="980121"'txtID為Control類(lèi)型的對(duì)象變量9.3VBA程序設(shè)計(jì)基礎(chǔ)4)對(duì)象變量賦值對(duì)象變量賦值,需要使用Set關(guān)鍵字。例如,以下使用Control類(lèi)型的對(duì)象變量TechareID設(shè)置文本框控件txtID的屬性:DimTecherIDAsControl'定義控件類(lèi)型變量SetTecherID=Forms!Teacher!txtID'引用Teacher窗體的txtID文本框控件,Set不可省TecherID.Value="980121"9.3VBA程序設(shè)計(jì)基礎(chǔ)三、運(yùn)算符和表達(dá)式1.算術(shù)運(yùn)算符算術(shù)運(yùn)算符用來(lái)進(jìn)行簡(jiǎn)單的數(shù)學(xué)運(yùn)算,VBA常用的算術(shù)運(yùn)算符和優(yōu)先級(jí)如表所示:9.3VBA程序設(shè)計(jì)基礎(chǔ)2.文本連接運(yùn)算符文本連接運(yùn)算符有:&、+。功能:將兩個(gè)字符串表達(dá)式連接在一起,例如:“ABCD”+“EFGHI”'結(jié)果為:”ABCDEFGHI”“Access”&“設(shè)計(jì)教程”'結(jié)果為:”Access設(shè)計(jì)教程”9.3VBA程序設(shè)計(jì)基礎(chǔ)3.關(guān)系運(yùn)算符關(guān)系運(yùn)算符是用來(lái)比較和判斷兩個(gè)表達(dá)式大小關(guān)系的運(yùn)算符,該運(yùn)算符為雙目運(yùn)算符,即需要運(yùn)算符左右兩側(cè)均有操作數(shù)。9.3VBA程序設(shè)計(jì)基礎(chǔ)4.邏輯運(yùn)算符邏輯運(yùn)算符可連接兩個(gè)或多個(gè)關(guān)系表達(dá)式,其結(jié)果仍然為邏輯型數(shù)據(jù)。表9-5給出了VBA的6種邏輯運(yùn)算符。5.四種運(yùn)算符的優(yōu)先級(jí)關(guān)系 四種運(yùn)算符的優(yōu)先級(jí)由高到低的順序如下:算術(shù)運(yùn)算→文本連接運(yùn)算→關(guān)系運(yùn)算→邏輯運(yùn)算9.3VBA程序設(shè)計(jì)基礎(chǔ)四、常用標(biāo)準(zhǔn)函數(shù)1.類(lèi)型轉(zhuǎn)換函數(shù)9.3VBA程序設(shè)計(jì)基礎(chǔ)2.數(shù)學(xué)函數(shù)9.3VBA程序設(shè)計(jì)基礎(chǔ)3.文本函數(shù)9.3VBA程序設(shè)計(jì)基礎(chǔ)3.文本函數(shù)(續(xù))9.3VBA程序設(shè)計(jì)基礎(chǔ)4.日期時(shí)間類(lèi)函數(shù)9.3VBA程序設(shè)計(jì)基礎(chǔ)5.域聚合函數(shù)

9.4VBA流程控制語(yǔ)句一、常用標(biāo)準(zhǔn)函數(shù)1.賦值語(yǔ)句賦值語(yǔ)句用于給變量、對(duì)象或?qū)ο蟮膶傩再x值,其格式如下:(1)變量名=表達(dá)式(2)Set對(duì)象名=對(duì)象(3)對(duì)象名.屬性名=表達(dá)式功能:先計(jì)算“=”右側(cè)表達(dá)式的值,再將該值賦給左側(cè)。例如:Sum=123SetTecherID=Forms!Teacher!txtID‘txtID為窗體Teacher中的控件,TecherID為Control‘類(lèi)型的對(duì)象變量Text1.Value=“abc”‘Text1為文本框控件

9.4VBA流程控制語(yǔ)句二、條件語(yǔ)句1.If語(yǔ)句(1)行If語(yǔ)句格式:If<表達(dá)式>Then<語(yǔ)句1>[Else<語(yǔ)句2>]功能:當(dāng)表達(dá)式值為T(mén)rue或非零時(shí),執(zhí)行Then后面的語(yǔ)句1;否則執(zhí)行Else后面的語(yǔ)句2;如果不包含Else部分時(shí),當(dāng)表達(dá)式值為T(mén)rue或非零時(shí),執(zhí)行Then后的語(yǔ)句1,否則執(zhí)行If的下一行語(yǔ)句。

9.4VBA流程控制語(yǔ)句(3)If語(yǔ)句的多層嵌套若在塊If結(jié)構(gòu)中<語(yǔ)句塊1>或<語(yǔ)句塊2>中完整的包含一個(gè)或多個(gè)If語(yǔ)句,則該結(jié)構(gòu)稱(chēng)為If語(yǔ)句的多層嵌套。格式:If<條件1>ThenIf<條件2>Then …EndIfElseIf<條件2>Then …EndIfEndIf

9.4VBA流程控制語(yǔ)句(4)多分支If語(yǔ)句多層If嵌套結(jié)構(gòu),使程序結(jié)構(gòu)過(guò)于復(fù)雜不便于閱讀,因此VBA提供帶ElseIf結(jié)構(gòu)的塊If語(yǔ)句,可有效地避免上述缺點(diǎn)。其格式:If<條件1>Then<語(yǔ)句塊1>ElseIf<條件2>Then <語(yǔ)句塊2> …[Else <語(yǔ)句塊n+1>]EndIf

9.4VBA流程控制語(yǔ)句例如,將學(xué)生的百分制成績(jī)score轉(zhuǎn)成標(biāo)準(zhǔn)等級(jí)成績(jī)。Ifscore>=90Then Debug.Print"優(yōu)秀"ElseIfscore>=80Then Debug.Print"良好"ElseIfscore>=70Then Debug.Print"中等"ElseIfscore>=60Then Debug.Print"及格"Else Debug.Print"不及格"EndIf

9.4VBA流程控制語(yǔ)句2.SelectCase語(yǔ)句除了使用If語(yǔ)句,VBA還提供SelectCase語(yǔ)句來(lái)實(shí)現(xiàn)多分支選擇,特別是由單一表達(dá)式來(lái)執(zhí)行多種可能的選擇時(shí),采用SelectCase結(jié)構(gòu)更為簡(jiǎn)便,其語(yǔ)法格式:SelectCase<測(cè)試條件> Case<表達(dá)式1> <語(yǔ)句塊1> Case<表達(dá)式2> <語(yǔ)句塊2> … [CaseElse] <語(yǔ)句塊n>EndSelect

9.4VBA流程控制語(yǔ)句使用SelectCase改寫(xiě)百分制成績(jī)轉(zhuǎn)換為等級(jí)。SelectCasescoreCaseIs>=90Debug.Print"優(yōu)秀"CaseIs>=80Debug.Print"良好"CaseIs>=70Debug.Print"中等"CaseIs>=60Debug.Print"及格"CaseElseDebug.Print"不及格"EndSelect

9.4VBA流程控制語(yǔ)句3.IIf條件函數(shù)格式:IIf(條件表達(dá)式,表達(dá)式1,表達(dá)式2)功能:與行If語(yǔ)句相同。當(dāng)條件表達(dá)式為T(mén)rue,函數(shù)返回表達(dá)式1的值,否則返回表達(dá)式2的值。例如:(1)利用IIf函數(shù)判定變量x的取值,如果為奇數(shù),則窗體文本框Label1中輸出“奇數(shù)”,否則輸出“偶數(shù)”。Label1.Caption=IIf(xmod2,"奇數(shù)","偶數(shù)")(2)利用IIf函數(shù)判別邏輯變量sex的取值,若為T(mén)rue,則在窗體文本框Text1中輸出“男”,否則輸出“女”。Text1.Value=IIf(sex,"男","女")

9.4VBA流程控制語(yǔ)句4.Choose函數(shù) 格式:Choose(變量,值為1的返回值,值為2的返回值,…,值為n的返回值)功能:當(dāng)變量取值為1時(shí),函數(shù)值為“值為1的返回值”;當(dāng)變量取值為2時(shí),函數(shù)值為“值為2的返回值”;…;當(dāng)變量取值為n時(shí),函數(shù)值為“值為n的返回值”。說(shuō)明:變量的類(lèi)型為數(shù)值型。若變量的值不在1-n之間,則Choose()函數(shù)返回的值為Null。例如,通過(guò)Choose函數(shù)輸出運(yùn)算符的類(lèi)型。Op=Choose(Nop,"+","-","*","/")即當(dāng)Nop=1時(shí),Op="+";Nop=2時(shí),Op="-";Nop=3時(shí),Op="*";Nop=4時(shí),Op="/"。

9.4VBA流程控制語(yǔ)句三、循環(huán)語(yǔ)句1.For…Next循環(huán)結(jié)構(gòu)For…Next適用于已知循環(huán)次數(shù)的循環(huán)結(jié)構(gòu),在For…Next循環(huán)中使用一個(gè)循環(huán)變量,循環(huán)每執(zhí)行一次,循環(huán)變量就會(huì)按約定的步長(zhǎng)增加或減少,直到不滿(mǎn)足終值條件時(shí)退出循環(huán)。格式:For<循環(huán)變量>=<初值>To<終值>[Step<步長(zhǎng)>]<語(yǔ)句塊1>[ExitFor]<語(yǔ)句塊2>Next[<循環(huán)變量>]

9.4VBA流程控制語(yǔ)句

9.4VBA流程控制語(yǔ)句【例9.1】創(chuàng)建一個(gè)窗體,計(jì)算sum=1+3+5+…+99。在Access中新建一個(gè)窗體,并在該窗體中添加1文本框Text1(和值sum)、1個(gè)標(biāo)簽控件和命令按鈕Command1(標(biāo)題為求和)。右擊命令按鈕在快捷菜單中選擇“事件生成器”,在“選擇生成器”窗口中選擇“代碼生成器”,在VBE的窗體模塊中輸入以下程序。PrivateSubCommand1_Click()DimiAsInteger,sumAsIntegerFori=1To99Step2sum=sum+iNextiText1.Value=sumEndSub

9.4VBA流程控制語(yǔ)句2.Do…Loop循環(huán)格式1:格式2:DoWhile<循環(huán)條件>

DoUntil<循環(huán)條件> [<語(yǔ)句塊1>][<語(yǔ)句塊1>] [ExitDo][ExitDo] [<語(yǔ)句塊2>][<語(yǔ)句塊2>]LoopLoop格式3:格式4:DoDo [語(yǔ)句塊1][語(yǔ)句塊1] [ExitDo][ExitDo] [語(yǔ)句塊2][語(yǔ)句塊2]LoopWhile<循環(huán)條件>LoopUntil<循環(huán)條件>

9.4VBA流程控制語(yǔ)句

9.4VBA流程控制語(yǔ)句【例9.2】修改例9.1,使用DoLoop結(jié)構(gòu)計(jì)算sum=1+3+5+…+99。PrivateSubCommand1_Click()DimiAsInteger,sumAsIntegersum=0i=1DoWhilei<=99sum=sum+ii=i+2LoopText1.Value=sumEndSub若使用DoUntil實(shí)現(xiàn),可將循環(huán)條件行改為DoUntili>99。

9.4VBA流程控制語(yǔ)句3.While…Wend循環(huán) 格式:

While<循環(huán)條件> [<語(yǔ)句塊>] Wend

說(shuō)明:當(dāng)給定<循環(huán)條件>為T(mén)rue時(shí),執(zhí)行While與Wend之間的<語(yǔ)句塊>,遇到Wend語(yǔ)句后,控制返回到While語(yǔ)句處并重復(fù)檢查<循環(huán)條件>,直到<循環(huán)條件>為False,則退出循環(huán)。While循環(huán)屬于“當(dāng)型”循環(huán),與DoWhile…Loop循環(huán)類(lèi)似,區(qū)別是While循環(huán)不能使用Exit提前退出。

9.4VBA流程控制語(yǔ)句【例9.3】輸出1-100之間的奇數(shù)和、偶數(shù)和。PrivateSubCommand1_Click()DimiAsInteger,sum1AsInteger,sum2AsIntegeri=1:sum1=0:sum2=0Whilei<=100IfiMod2=1Thensum1=sum1+i'奇數(shù)累加

Elsesum2=sum2+i'偶數(shù)累加

EndIfi=i+1WendText1.Value=sum1Text2.Value=sum2EndSub

9.4VBA流程控制語(yǔ)句4.ForEach循環(huán)ForEach非常適合集合對(duì)象的遍歷操作,其格式如下:ForEachelementIngroup[<語(yǔ)句塊1>][ExitFor][<語(yǔ)句塊2>]Next[element]

9.4VBA流程控制語(yǔ)句(1)遍歷集合以下代碼利用循環(huán)遍歷Access窗體1,并在立即窗口中輸出窗體1上所有控件名稱(chēng)。ForEachItemInForm_窗體1Debug.PrintItem.NameNextItem(2)遍歷數(shù)組以下代碼遍歷數(shù)組Arr,并在立即窗口中輸出數(shù)組全部元素的內(nèi)容。DimArr(10)AsInteger…ForEachiInArrDebug.PrintiNexti

9.4VBA流程控制語(yǔ)句5.循環(huán)的嵌套——多重循環(huán)結(jié)構(gòu)For、DoLoop和While循環(huán)語(yǔ)句之間也可以互相嵌套,從而可以構(gòu)成多重循環(huán)結(jié)構(gòu)。需要注意的是,各循環(huán)必須完整包含,相互之間絕對(duì)不允許有交叉現(xiàn)象。

9.4VBA流程控制語(yǔ)句【例9.4】在立即窗口中輸出1-100之間的素?cái)?shù),并按5個(gè)素?cái)?shù)1行輸出。DimiAsInteger,jAsInteger,nAsIntegern=0'記錄素?cái)?shù)個(gè)數(shù)Fori=1To100Step2'外循環(huán)i,因偶數(shù)都不是素?cái)?shù),只循環(huán)考查i為奇數(shù)即可

Forj=2Toi–1'內(nèi)循環(huán)j,此處循環(huán)條件也可為j=2~√(i),效率更高

IfiModj=0ThenExitForEndIfNextjIfj=iThenIfnMod5=0ThenDebug.Print'立即窗口換行操作

EndIfn=n+1Debug.Printi,'立即窗口中輸出素?cái)?shù)

EndIfNexti

9.4VBA流程控制語(yǔ)句【例9.4】在立即窗口中輸出1-100之間的素?cái)?shù),并按5個(gè)素?cái)?shù)1行輸出。DimiAsInteger,jAsInteger,nAsIntegern=0'記錄素?cái)?shù)個(gè)數(shù)Fori=1To100Step2'外循環(huán)i,因偶數(shù)都不是素?cái)?shù),只循環(huán)考查i為奇數(shù)即可

Forj=2Toi–1'內(nèi)循環(huán)j,此處循環(huán)條件也可為j=2~√(i),效率更高

IfiModj=0ThenExitForEndIfNextjIfj=iThenIfnMod5=0ThenDebug.Print'立即窗口換行操作

EndIfn=n+1Debug.Printi,'立即窗口中輸出素?cái)?shù)

EndIfNexti

9.5數(shù)組一、靜態(tài)數(shù)組靜態(tài)數(shù)組是在聲明時(shí)就已經(jīng)定義了數(shù)組的大小,其聲明格式如下:Public|Private|Dim|Static數(shù)組名([下標(biāo)下界To]下標(biāo)上界[,[下標(biāo)下界To]下標(biāo)上界][,…])[As數(shù)據(jù)類(lèi)型]定義一維數(shù)組a:Dima(9)AsInteger'a數(shù)組默認(rèn)包括10個(gè)元素:a(0),a(1),…,a(9)定義二維數(shù)組c和b:Dimc(2,2)AsInteger'c數(shù)組默認(rèn)包括9個(gè)元素:c(0,0),c(0,1),c(0,2)c(1,0),c(1,1),c(1,2),c(2,0),c(2,1),c(2,2),Dimb(1to2,2to3)AsInteger'b數(shù)組包括4個(gè)元素:b(1,2),b(1,3),b(2,2),b(2,3)

9.5數(shù)組【例9.5】聲明一個(gè)30個(gè)長(zhǎng)度的一維數(shù)組,每個(gè)數(shù)組元素賦值[0,100]的隨機(jī)數(shù)作為成績(jī),并求全部元素的總和。DimScore(1To30)AsInteger'一維數(shù)組Score下標(biāo)1到30DimSumAsInteger,iAsIntegerSum=0Fori=1To30Score(i)=Int(101*Rnd())'[0,100]的隨機(jī)數(shù)

Sum=Sum+Score(i)NextiMsgBox"sum="&Sum

9.5數(shù)組【例9.5】聲明一個(gè)30個(gè)長(zhǎng)度的一維數(shù)組,每個(gè)數(shù)組元素賦值[0,100]的隨機(jī)數(shù)作為成績(jī),并求全部元素的總和。DimScore(1To30)AsInteger'一維數(shù)組Score下標(biāo)1到30DimSumAsInteger,iAsIntegerSum=0Fori=1To30Score(i)=Int(101*Rnd())'[0,100]的隨機(jī)數(shù)

Sum=Sum+Score(i)NextiMsgBox"sum="&Sum

9.5數(shù)組二、動(dòng)態(tài)數(shù)組動(dòng)態(tài)數(shù)組在聲明時(shí)不需要確定大小,可在程序動(dòng)態(tài)修改其大小和維數(shù)。其聲明格式如下Public|Private|Dim|Static數(shù)組名()[As數(shù)據(jù)類(lèi)型]動(dòng)態(tài)數(shù)組由于沒(méi)有分配空間,必須使用ReDim語(yǔ)句為其指定元素個(gè)數(shù),否則無(wú)法在程序中引用。ReDim語(yǔ)句的格式如下:ReDim[Preserve]數(shù)組名(下標(biāo)1[,下標(biāo)2…])例如:Dima()asInteger'聲明動(dòng)態(tài)數(shù)組a是整型Redima(10)'定義數(shù)組最大下標(biāo)為10

9.5數(shù)組注意:使用ReDim語(yǔ)句重新定義一個(gè)數(shù)組時(shí),數(shù)組原有的值會(huì)丟失,數(shù)值型被置0,字符型被置空串,邏輯型被置為False。Preserve關(guān)鍵字可保持?jǐn)?shù)組原有的值。例如:DimiasInteger,Array(3)AsIntegerFori=0To3Array(i)=I'各元素的值為0,1,2,3NextiReDimPreserveArray(5)'各元素的值為0,1,2,3,0,0。如果不使用Preserve關(guān)鍵字,則所有元素值均為0。

9.6面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念一、集合和對(duì)象類(lèi)是對(duì)相同類(lèi)型對(duì)象的抽象,是對(duì)象共同屬性、方法的集合體,即對(duì)象的共性,而對(duì)象是類(lèi)產(chǎn)生的一個(gè)實(shí)例。對(duì)象用來(lái)描述客觀世界的一個(gè)實(shí)體,某類(lèi)多個(gè)對(duì)象構(gòu)成了集合。Access具有面向?qū)ο蟪绦蛟O(shè)計(jì)環(huán)境,在數(shù)據(jù)庫(kù)窗口中可查看和訪(fǎng)問(wèn)Access各種對(duì)象,例如:查詢(xún)、窗體、表、頁(yè)、宏和模塊對(duì)象等。

9.6面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念二、屬性和方法對(duì)象是封裝了屬性和操作(方法)代碼的邏輯實(shí)體,屬性即為對(duì)象所具有的特征,操作描述了對(duì)象能夠執(zhí)行的功能,操作也稱(chēng)為對(duì)象的方法。屬性和方法描述了對(duì)象的特征和行為,其引用格式為:1)對(duì)象名.屬性2)對(duì)象名.方法例如,Label1控件的標(biāo)題屬性可表示為L(zhǎng)abel1.Caption;Command1按鈕獲得焦點(diǎn)的方法表示為Command1.SetFoucs;DoCmd對(duì)象打開(kāi)“教師信息報(bào)表”對(duì)象可表示為DoCmd.OpenReport"教師信息表"。

9.6面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念三、事件和事件過(guò)程事件是Access對(duì)象可響應(yīng)的動(dòng)作,例如鼠標(biāo)單雙擊、窗體或報(bào)表載入等。Access可使用兩種方法處理事件。1)使用宏對(duì)象設(shè)置事件屬性。2)VBA過(guò)程代碼,也稱(chēng)為事件過(guò)程。例如在例題9.3中,命令按鈕Command1響應(yīng)鼠標(biāo)單擊事件的Click過(guò)程。

9.7過(guò)程調(diào)用和參數(shù)傳遞一、過(guò)程調(diào)用1.Sub過(guò)程的定義和調(diào)用(1)定義Sub過(guò)程格式:[Public|Private|Static]Sub過(guò)程名([形參列表])[過(guò)程體][ExitSub]EndSub

9.7過(guò)程調(diào)用和參數(shù)傳遞(2)調(diào)用Sub過(guò)程格式1:Call過(guò)程名[(實(shí)參數(shù)列表)]格式2:過(guò)程名[實(shí)參數(shù)列表]注意:格式1如果有實(shí)參,過(guò)程名后必須有括號(hào);格式2如果有實(shí)參,過(guò)程名后不能使用括號(hào)?!纠?.6】創(chuàng)建一個(gè)窗體,用來(lái)計(jì)算用戶(hù)在文本框中輸入數(shù)字的階乘。PublicSubfac(nAsInteger,fAsLong)f=1Fori=1Ton'循環(huán)語(yǔ)句,i從1循環(huán)到n,每次自動(dòng)增1f=f*iNexti'循環(huán)結(jié)束后,f為n!EndSub

9.7過(guò)程調(diào)用和參數(shù)傳遞2.Function函數(shù)過(guò)程(1)Function函數(shù)的定義格式:[Public|Private|Static]Function函數(shù)名([形參列表])[As類(lèi)型名][函數(shù)過(guò)程體][ExitFunction]函數(shù)名=返回值EndSub說(shuō)明:Public、Private和Static含義同Sub過(guò)程;As代表函數(shù)返回值的類(lèi)型;ExitFunction用于提前退出函數(shù)過(guò)程體。

9.7過(guò)程調(diào)用和參數(shù)傳遞2)調(diào)用Function函數(shù)過(guò)程格式:函數(shù)名[(實(shí)參數(shù)列表)]注意:函數(shù)不能使用Call調(diào)用?!纠?.7】將例9.6使用Function函數(shù)過(guò)程實(shí)現(xiàn)。修改模塊1的內(nèi)容如下:PublicFunctionfac(nAsInteger)AsLongf=1Fori=1Ton'循環(huán)語(yǔ)句,i從1循環(huán)到n,每次自動(dòng)增1f=f*iNexti'循環(huán)結(jié)束后,f為n!fac=f'函數(shù)返回值EndFunction

9.7過(guò)程調(diào)用和參數(shù)傳遞二、參數(shù)傳遞1.形參聲明格式VBA過(guò)程中的參數(shù)分為實(shí)際參數(shù)(實(shí)參)與形式參數(shù)(形參),在調(diào)用時(shí)按照特定的參數(shù)傳遞方式在二者之間傳遞內(nèi)容。聲明格式為:

[Optional][ByVal|ByRef][ParamArray]形參名[()][Astype][=DefaultValue]1)Optional指明調(diào)用時(shí)對(duì)應(yīng)的實(shí)參是否可以缺省。2)ByVal表示該參數(shù)按值傳遞。3)ByRef表示該參數(shù)按地址傳遞。4)ParamArray只能位于形參列表的末尾,由于該參數(shù)是一個(gè)Variant類(lèi)型的Optional數(shù)組,因此可提供任意數(shù)目的參數(shù)。ParamArray不能與ByVal、ByRef和Optional聯(lián)用。5)

DefaultValue指明調(diào)用函數(shù)時(shí)若省略實(shí)參,對(duì)應(yīng)的形參的缺省值。需要與Optional參數(shù)聯(lián)用,并為其提供缺省值。

9.7過(guò)程調(diào)用和參數(shù)傳遞2.實(shí)參和形參參數(shù)傳遞方式實(shí)參和形參參數(shù)傳遞方式分為按值傳遞和按地址傳遞(引用)。(1)值傳遞采用按值傳遞參數(shù)時(shí),需要在形式參數(shù)前加上關(guān)鍵字ByVal。該方式在調(diào)用時(shí),將為形參分配一個(gè)獨(dú)立的存儲(chǔ)空間,同時(shí)將實(shí)參的內(nèi)容復(fù)制到給存儲(chǔ)空間中,由于實(shí)參和形參的存儲(chǔ)空間是不同的,因此,如果在過(guò)程中改變了形參的內(nèi)容,實(shí)參并不會(huì)改變。(2)按地址傳遞(引用)過(guò)程默認(rèn)采用按地址傳遞方式,也可在形式參數(shù)前加關(guān)鍵字ByRef顯式聲明。該方式在調(diào)用過(guò)程時(shí),只是將實(shí)參的內(nèi)存地址傳遞給形參,因此形參和實(shí)參共占相同的內(nèi)存空間(實(shí)際上為同一變量,只是名稱(chēng)不同),如果在過(guò)程中改變了形參的內(nèi)容,實(shí)參也會(huì)改變。

9.7過(guò)程調(diào)用和參數(shù)傳遞【例9.8】使用Sub過(guò)程,分別采用按值和按地址傳遞法交換兩個(gè)變量的內(nèi)容。PrivateSubForm_Load()Text1.Value=1Text2.Value=2EndSubPublicSubCallByRef(aAsInteger,bAsInteger)'按地址交換數(shù)據(jù)

DimcAsIntegerc=aa=bb=cEndSub

9.7過(guò)程調(diào)用和參數(shù)傳遞PrivateSubCommand1_Click()DimxAsInteger,yAsIntegerx=Text1.Valuey=Text2.ValueCallByValx,yText3.Value=xText4.Value=yEndSubPrivateSubCommand2_Click()DimxAsInteger,yAsIntegerx=Text1.Valuey=Text2.ValueCallByRefx,yText3.Value=xText4.Value=yEndSubPrivateSubCommand3_Click()Text3.Value=""Text4.Value=""EndSub

9.8VBA常用操作(1)打開(kāi)窗體操作DoCmd.OpenFormFormName[,View][,FilterName][,WhereCondition][,DataMode][,WindowMode][,OpenArgs]一、打開(kāi)和關(guān)閉操作

9.8VBA常用操作(2)打開(kāi)報(bào)表操作DoCmd.OpenReportReportName[,View][,FilterName][,WhereCondition][,WindowMode][,OpenArgs)]說(shuō)明:1)ReportName,字符串表達(dá)式,表示數(shù)據(jù)庫(kù)中的報(bào)表的名稱(chēng)。2)View,指定報(bào)表將在哪個(gè)視圖中打開(kāi),其取值:acViewDesign(設(shè)計(jì)視圖);acViewNormal(默認(rèn),立即打印報(bào)表);acViewPivotChart(不支持);acViewPivotTable(不支持);acViewPreview(打印預(yù)覽視圖)。3)其余參數(shù)同OpenReport方法

9.8VBA常用操作(3)關(guān)閉操作DoCmd.Close[ObjectType,ObjectName],[Save]例如,以下程序當(dāng)用戶(hù)單擊“教師信息維護(hù)”窗體上命令按鈕Command1,使用Close方法關(guān)閉該窗體,在不進(jìn)行提示的情況下,保存所有對(duì)窗體的更改。PrivateSubCommand1_Click()DoCmd.CloseacForm,"教師信息維護(hù)",acSaveYesEndSub

9.8VBA常用操作1.InputBox()函數(shù)功能:輸入對(duì)話(huà)框函數(shù),該函數(shù)彈出一個(gè)對(duì)話(huà)框,等待用戶(hù)輸入數(shù)據(jù),并返回用戶(hù)在對(duì)話(huà)框中輸入的信息,函數(shù)的返回值為String類(lèi)型。InputBox(prompt[,title][,default][,xpos][,ypos])1)prompt:對(duì)話(huà)框內(nèi)顯示的提示信息,是長(zhǎng)度不超過(guò)1024個(gè)字符的字符串,可使用回車(chē)符(Chr(13))、換行符(Chr(10))實(shí)現(xiàn)換行輸出信息。2)title:標(biāo)題字符串,顯示在對(duì)話(huà)框標(biāo)題欄中。3)default:用戶(hù)沒(méi)有任何輸入時(shí)顯示在對(duì)話(huà)框底部文本框中的字符串。如果省略default,則文本框顯示為空。4)xpos,ypos:整數(shù)值,代表對(duì)話(huà)框與屏幕左邊的距離(xpos)和上邊的距離(ypos),單位緹(twip)。5)返回值。執(zhí)行InputBox函數(shù)后,用戶(hù)單擊“確定"按鈕或按回車(chē)鍵,返回在文本框輸入的數(shù)據(jù)(字符串類(lèi)型)。若單擊“取消”按鈕或按Esc鍵,則返回空字符串("")。二、輸入和輸出操作

9.8VBA常用操作2.MsgBox()函數(shù)MsgBox函數(shù)顯示一個(gè)消息對(duì)話(huà)框,用戶(hù)根據(jù)需要選擇指定的操作后,可返回一個(gè)Integer類(lèi)型數(shù)值代表用戶(hù)單擊哪一個(gè)按鈕。語(yǔ)法格式如下:MsgBox(prompt[,buttons][,title])其中prompt必選,其余參數(shù)可選的。各參數(shù)含義如下:1)prompt

:在消息對(duì)話(huà)框中顯示的內(nèi)容,同InputBox函數(shù)中的prompt參數(shù)。2)buttons

:消息框中顯示按鈕的數(shù)目、圖標(biāo)樣式和缺省按鈕等,缺省值為0,表9-13列出了buttons參數(shù)的取值和功能。3)title:消息對(duì)話(huà)框標(biāo)題欄顯示的字符串。省略title,則將應(yīng)用程序名放在標(biāo)題欄中

9.8VBA常用操作

9.8VBA常用操作R=MsgBox("你確定要退出系統(tǒng)嗎?",4+48+256,"提示")

9.8VBA常用操作三、VBA編程驗(yàn)證數(shù)據(jù)

9.8VBA常用操作例如:DimxAsString,yAsInteger,zAsString,nAsVariant,eAsVariant,a(5)AsIntegerx="12a"y=123z="1996-12-21"n=Null則函數(shù)IsNumeric(x),IsNumeric(y),IsDate(z),IsNull(n),IsEmpty(e),IsArray(a)的運(yùn)行結(jié)果分別為:False,True,True,True,True,True。

9.8VBA常用操作四、計(jì)時(shí)事件1.TimerInterval屬性 時(shí)間間隔,單位是毫秒(1秒=1000毫秒)。取值范圍0-65535,最大時(shí)間間隔不能超過(guò)65秒。2.Time事件 經(jīng)過(guò)TimerInterval屬性指定的時(shí)間間隔后,將激發(fā)執(zhí)行Timer事件中的代碼??稍O(shè)置計(jì)時(shí)器時(shí)間間隔為0(Me.TimerInterval=0)來(lái)終止Timer事件繼續(xù)執(zhí)行。

9.8VBA常用操作【例9.9】秒表程序,在窗體上顯示秒數(shù),并允許用戶(hù)啟動(dòng)和終止顯示。DimsecAsInteger'模塊級(jí)變量,存儲(chǔ)總秒數(shù)PrivateSubcmdEnd_Click()Me.TimerInterval=0'停止秒數(shù)顯示,Me代表當(dāng)前窗體對(duì)象EndSubPrivateSubcmdStart_Click()Me.TimerInterval=1000'時(shí)間間隔設(shè)置為1秒EndSubPrivateSubForm_Open(CancelAsInteger)'打開(kāi)窗體事件sec=0lblColock.Caption="0秒"EndSubPrivateSubForm_Timer()sec=sec+1'總秒數(shù)增1lblColock.Caption=Str(sec)&"秒"'在標(biāo)簽控件中顯示總秒數(shù)EndSub

9.8VBA常用操作五、鼠標(biāo)和鍵盤(pán)事件處理1.鼠標(biāo)事件VBA的鼠標(biāo)事件主要包括MouseDown(鼠標(biāo)按下)、MouseMove(鼠標(biāo)移動(dòng))和MouseUp(鼠標(biāo)抬起)3個(gè)事件,其事件過(guò)程行聲明如下:對(duì)象名_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)對(duì)象名_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)對(duì)象名_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

9.8VBA常用操作

9.8VBA常用操作例如:以下程序判斷窗體上鼠標(biāo)左、右鍵單擊情況。PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)IfButton=acLeftButtonThenMsgBox"單擊鼠標(biāo)左鍵"EndIfIfButton=acRightButtonThenMsgBox"已點(diǎn)擊鼠標(biāo)右鍵"EndIfEndSub

9.8VBA常用操作2.鍵盤(pán)事件VBA的鍵盤(pán)事件主要包括KeyDown(鍵按下)、KeyPress(按下并釋放鍵)和KeyUp(鍵抬起)3個(gè)事件,其事件過(guò)程行聲明如下:對(duì)象名_KeyDown(KeyCodeAsInteger,ShiftAsInteger)對(duì)象名_KeyPress(KeyAsciiAsInteger)對(duì)象名_KeyUp(KeyCodeAsInteger,ShiftAsInteger)

9.8VBA常用操作1)KeyPress事件KeyAscii參數(shù)是按鍵的ASCII碼,按鍵包括:標(biāo)準(zhǔn)鍵盤(pán)的字母(注:大小寫(xiě)字母ASCII碼不同)、數(shù)字和標(biāo)點(diǎn)符號(hào)以及部分控制鍵(ENTER、TAB、BACKSPACE鍵等)。KeyAscii參數(shù)返回按鍵的Ascii碼。例如,判斷用戶(hù)在Text1文本框中是否輸入A或a。PrivateSubText1_KeyPress(KeyAsciiAsInteger)IfKeyAscii=65OrKeyAscii=97ThenMsgBox"已單擊A鍵"EndIfEndSub

9.8VBA常用操作2)KeyDown和KeyUp事件KeyCode參數(shù)是按鍵的虛擬鍵碼,每個(gè)鍵都對(duì)應(yīng)一個(gè)唯一的虛擬鍵碼,字母鍵不區(qū)分大小寫(xiě)。例如對(duì)于A和a而言,它的KeyCode都是65,對(duì)應(yīng)鍵盤(pán)[A]鍵,并沒(méi)有大小寫(xiě)之分。KeyCode還能檢測(cè)功能鍵、編輯鍵和光標(biāo)定位鍵。例如擴(kuò)展字符鍵(F1~F2)、定位鍵(Home、End、PageUp、PageDown、↑、↓、→、←及Tab鍵)、鍵的組合和標(biāo)準(zhǔn)鍵盤(pán)的Shift、Ctrl、Alt及數(shù)字鍵盤(pán)等字符。3)Shift參數(shù)鍵盤(pán)事件使用Shift參數(shù)來(lái)判斷按下某鍵的同時(shí)是否按下了SHIFT、CTRL、ALT鍵或它們的組合。如果按SHIFT鍵,則shift為1;按CTRL鍵,shift為2;按ALT鍵,shift為4,通過(guò)鍵值總和來(lái)判斷這些組合。

9.8VBA常用操作例如,以下事件過(guò)程可捕獲CTRL+ALT+F1并給出提示:PrivateSubText1_Keydown(KeyCodeAsInteger,ShiftAsInteger)IfKeyCode=112AndShift=6Then'F1虛擬鍵碼是112,也可用符號(hào)常量vbKeyF1MsgBox"已同時(shí)按下CTRL+ALT+F1組合鍵"EndIfEndSub

9.8VBA常用操作六、數(shù)據(jù)文件讀寫(xiě)1.打開(kāi)格式:

Open文件名FormodeAs[#]文件號(hào) 說(shuō)明:

mode取值如下:1)OutPut:以寫(xiě)方式打開(kāi)文件。文件若存在,則打開(kāi),寫(xiě)入并覆蓋原有信息;文件若不存在,則新建文件。2)Input:以讀方式打開(kāi)文件。文件必須存在,否則出錯(cuò)。3)Append:以追加方式打開(kāi)文件。文件若存在,則打開(kāi),在原文末尾寫(xiě)入(追加)新信息;文件若不存在,則新建文件。

9.8VBA常用操作2.關(guān)閉文件格式:Close#文件號(hào)功能:關(guān)閉由Open語(yǔ)句打開(kāi)的指定文件號(hào)的文件。

9.8VBA常用操作3.順序文件的讀操作順序文件的讀數(shù)據(jù)操作由Input#語(yǔ)句和LineInput#語(yǔ)句來(lái)實(shí)現(xiàn)。 (1)Input#語(yǔ)句格式:Input

#文件號(hào),變量列表功能:從已打開(kāi)的順序文件中讀出數(shù)據(jù)并存入指定變量。說(shuō)明:1)變量列表如有多個(gè)變量,需要使用逗號(hào)分隔。變量不能是數(shù)組名或?qū)ο笞兞?,但是可以是?shù)組元素或用戶(hù)自定義類(lèi)型。2)文件中數(shù)據(jù)的順序必須與變量列表中變量的順序一致,且數(shù)據(jù)類(lèi)型相匹配。

9.8VBA常用操作(2)LineInput#語(yǔ)句語(yǔ)法:LineInput#文件號(hào),字符型變量功能:從已打開(kāi)的順序文件中讀出一行并將它分配給String變量。說(shuō)明:LineInput#語(yǔ)句可一次從文件中讀出一行字符,直到遇到回車(chē)符(Chr(13))或回車(chē)換行符(Chr(13)+Chr(10))為止?;剀?chē)換行符將被跳過(guò),不會(huì)被附加到字符串上。(3)文件結(jié)束標(biāo)志函數(shù) 格式:EOF(文件號(hào))

功能:如果已讀到指定文件號(hào)文件的末尾(EndofFile),函數(shù)返回True,否則返回False。

9.8VBA常用操作【例9-10】使用Input#語(yǔ)

溫馨提示

  • 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)論