Access數據庫模塊和VBA程序設計詳解省名師優質課獲獎課件市賽課一等獎課件_第1頁
Access數據庫模塊和VBA程序設計詳解省名師優質課獲獎課件市賽課一等獎課件_第2頁
Access數據庫模塊和VBA程序設計詳解省名師優質課獲獎課件市賽課一等獎課件_第3頁
Access數據庫模塊和VBA程序設計詳解省名師優質課獲獎課件市賽課一等獎課件_第4頁
Access數據庫模塊和VBA程序設計詳解省名師優質課獲獎課件市賽課一等獎課件_第5頁
已閱讀5頁,還剩287頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

模塊與VBA程序設計第1頁【本章主要掌握內容】

模塊基本概念及其創建

VBA中數據類型

常量、變量與數組

VBA中運算符、表達式和函數

VBA流程控制語句

VBA數據庫編程第2頁▲VBA(VisualBasicforApplication)是VisualBasic語言在Office編程中應用。▲VBA就是用來創建Access模塊對象編程語言。第3頁第一節模塊基本概念第4頁▲模塊是以VBA語言為基礎編寫,將一個或多個過程(子過程或函數過程)作為一個單元進行保留集合。模塊中每個過程實現各自特定功能。▲利用模塊能夠將各種數據庫對象連接起來,組成一個完整系統。▲在Access中,模塊分為兩種類型:

類模塊

標準模塊第5頁一、類模塊▲類模塊是依附于某一窗體或報表而存在模塊。▲窗體和報表中含有對象,每個對象都有自己固有事件過程,以響應窗體或報表中事件。▲為窗體或報表創建第一個事件過程時,系統會自動創建與之關聯窗體或報表模塊。▲在窗體或報表設計視圖下,能夠單擊工具欄中【代碼】按鈕進入代碼窗口。▲已經含有事件過程事件名稱用黑色粗體表示。▲窗體或報表中模塊作用范圍僅局限于其所屬窗體或報表內部,含有局部特征。第6頁二、標準模塊▲標準模塊是不與任何對象相關聯通用過程,這些過程可在數據庫中任何位置直接調用執行。▲標準模塊普通用于存放公共過程(子過程和函數過程),與其它任何Access對象不相關聯。在Access系統中,經過模塊對象創建代碼過程就是標準模塊。▲在標準模塊中全局變量或公共過程,其作用范圍在整個應用程序里,含有全局特征。第7頁三、打開模塊編輯窗口模塊是在VBE(VisualBasicEditor)窗口中進行創建和編輯。能夠經過以下方法打開標準模塊VBE窗口:▲在【創建】選項卡【宏與代碼】組中單擊【模塊】按鈕(創建新模塊)▲在【導航】窗格中選擇【模塊】類別,使用組合鍵Alit+F11(數據庫窗口與VBE窗口之間切換)▲在【導航】窗格中右擊某個模塊對象,在快捷菜單中選擇【設計視圖】命令(打開該模塊代碼窗口)▲雙擊【導航】窗格中某個模塊對象(打開該模塊代碼窗口)第8頁在打開窗體或報表設計視圖后,能夠經過以下方法打開類模塊VBE窗口:▲單擊【窗體設計工具】中【設計】選項卡中【查看代碼】按鈕▲右擊需要編輯代碼控件,并在快捷菜單中選擇【事件生成器】命令第9頁第二節創建模塊第10頁

模塊是以過程(或函數)為單元組成,一個模塊包含兩個部分:▲一個申明區域用于定義模塊中使用變量等內容。▲若干個子過程與函數過程

☆過程是由代碼組成單元,包含一系列計算語句和執行語句,用于完成特定操作。

☆過程名不能與所在模塊模塊名相同。模塊申明區域子過程和函數定義區域第11頁過程有兩種類型:

☆Sub過程(子過程)☆

Function過程(函數過程)第12頁1、Sub過程子過程以關鍵詞Sub開始,以EndSub結束。語法格式:

[Public|Private][Static]Sub子過程名

([形參列表

][As數據類型

])[程序代碼

][ExitSub][程序代碼

]EndSub第13頁說明:☆Public

過程能被全部模塊全部其它過程調用。☆Private

過程只能被同一模塊其它過程調用。☆Static

用于設置靜態變量(局部變量)。

假如沒有使用Public或Private指定,過程則是Public(默認情況);假如沒有使用Static,則在調用之后不會保留局部變量值。第14頁☆形參列表:即調用時接收傳遞給Sub過程參數變量列表。假如有多個變量,則多個變量之間用逗號隔開。☆如果Sub過程沒有參數,過程名后也必須包含一個空圓括號。☆在形參表中能夠用As來設置參數數據類型,未加As時,則參數為變體型數據。☆在過程執行中一旦碰到ExitSub語句,則結束過程執行。☆能夠經過傳遞參數和使用參數來調用子過程,但子過程調用后不返回任何值。第15頁【例】

PublicSubxx(mAsString,nAsInteger)……EndSub

PublicSubyy()……EndSub第16頁

子過程調用形式有兩種:語法格式一:

Call子過程名

[(實參列表

)]語法格式二:

子過程名

[實參列表

]說明:☆實參列表:在調用過程時用于傳遞給Sub過程變量列表,存在多個變量時,多個變量之間用逗號隔開。☆實參列表和形參列表必須一一對應。

用Call調用子過程是一個良好程序設計習慣,因關鍵詞Call表明其后是過程名而不是變量名。第17頁【例1】PublicSubxx(mAsString,nAsInteger)Debug.Printm&nEndSubPublicSubyy()Callxx("ABC",5)EndSub運行子過程yy,即在馬上窗口中顯示:ABC5第18頁2、Function過程在VBA除系統提供標準函數外,還能夠由用戶自行定義函數過程(用戶自定義函數)。函數過程和子過程在功效上略有不一樣:

主程序調用過程后是執行了一個過程;

主程序而調用函數后是得到了一個結果。第19頁

函數過程是以Function開始,以EndFunction結束。語法格式:

[Public|Private][Static]Function函數名

([形參列表

])[AS數據類型

][程序代碼

][ExitFunction]

函數名

=表示式

[程序代碼

]EndFunction第20頁說明:☆AS數據類型:定義函數返回值數據類型。假如未定義,則系統將自動賦給函數過程一個最適當數據類型。☆函數名

=表示式:函數體中對函數名進行賦值語句,使函數得到一個返回值。☆函數定義中,必須最少含有一條給函數名賦值語句。假如沒有此語句,將依據As語句定義數據類型而返回0或空字符串或空值。☆在函數過程執行中一旦碰到ExitFunction語句,則結束函數過程執行。第21頁【例2】把0到9中數字轉換成大寫漢字

Functionvtoc(xAsInteger)AsStringDimcResultAsStringDimnAsStringcResult=""n="零壹貳叁肆伍陸柒捌玖"cResult=mid(n,x+1,1)

vtoc=cResultEndFunction第22頁

函數過程調用形式:語法格式:

<函數過程名>([實參列表

])說明:☆因為函數有返回值,所以調用時不能用Call命令,而是直接引用函數名并加括號。☆假如用Call命令調用函數,VBA將放棄函數返回值。☆函數過程返回值能夠直接賦給某個變量。【例】s=vtoc(4)第23頁【例3】編寫一個能夠以年、月、日來返回系統日期函數過程Getdate。FunctionGetdate()AsStringGetdate=Year(Date)&"年"_&Month(Date)&"月"_&Day(Date)&"日"EndFunction

調用上述函數,并將結果在馬上窗口中顯示。

SubPdate()

Debug.PrintGetdate()EndSub第24頁第三節VBA程序設計基礎第25頁一、面向對象程序設計基本概念所謂面向對象能夠這么定義:面向對象=類+對象+屬性繼承+對象之間通信一個面向對象應用系統中,每一個組成部分都是對象,所需實現操作則經過建立對象與對象之間通信來完成。第26頁1、對象

客觀世界里任何實體都能夠被看作是對象。對象能夠是詳細物,也能夠指一些概念。

在面向對象程序設計中,對象代表應用程序中元素,包含表、窗體、按鈕等。

每個對象都含有自己屬性、事件和方法;用戶就是經過屬性、事件和方法來處理對象。第27頁2、對象屬性及屬性值

屬性是對象特征,用來表示對象狀態。

不一樣類型對象,其屬性會有所不一樣;同類別對象不一樣實例,屬性值也會有差異。

既能夠在創建對象時給對象設置屬性值,也能夠在執行程序時經過命令修改對象屬性值。第28頁3、事件和事件過程

事件是對象能夠識別一個動作。

為使對象在某一事件發生時能夠做出所需要反應,必須針對這一事件編寫對應代碼來完成對應功效。

假如已經編寫了某個對象事件代碼,那么當此事件發生時,這段事件代碼將被自動激活并開始執行;假如事件沒有發生,則此段代碼永遠不會被執行。

假如沒有為對象編寫事件代碼,那么即使事件發生了,也不會產生任何動作。第29頁4、方法

方法是對象能夠執行一個動作,即當對象接收了某個消息后所采取一系列操作描述。

相同類對象含有相同方法,不一樣類對象所含有方法也有所不一樣。第30頁

每個對象都含有屬性,以及與之相關事件和方法,面向對象程序設計就是經過對象屬性、事件和方法來處理對象。對象屬性事件方法第31頁

能夠在程序代碼中引用對象屬性或調用對象方法。語法格式:

[父對象名!]對象名.屬性名

[父對象名!]對象名.方法名

父對象與子對象之間用“!”連接;

對象與屬性(方法)之間用“

.”連接。第32頁5、類

類是面向對象程序設計中關鍵。是對一類相同對象集合,這些對象含有相同性質、相同種類屬性以及方法。

類是對象抽象,而對象是類詳細實例。有了類定義后,基于類就能夠生成這類對象中任何一個對象。這些對象即使采取相同屬性來表示狀態,但它們在屬性上取值完全能夠不一樣。這些對象普通有著不一樣狀態,且彼此間相對獨立。第33頁6、DoCmd對象

DoCmd是Access數據庫一個特殊對象,它是經過調用Access內置方法,在程序中實現一些特定操作。語法格式:

DoCmd.方法名

[參數]說明:

DoCmd對象大多數方法都有參數,有些是必需,有些則是可選。若缺省,將采取默認參數。第34頁(1)用DoCmd對象打開窗體語法格式:

DoCmd.OpenForm"窗體名"功效:用默認形式打開指定窗體第35頁(2)用DoCmd對象關閉窗體語法格式一:

DoCmd.CloseacForm,"窗體名"功效:關閉指定窗體語法格式二:

DoCmd.Close功效:關閉當前窗體第36頁(3)用DoCmd對象打開報表語法格式:

DoCmd.OpenReport"報表名",acViewPreview功效:用預覽形式打開指定報表第37頁(4)用DoCmd對象關閉報表語法格式一:

DoCmd.CloseacReport,"窗體名"功效:關閉指定報表語法格式二:

DoCmd.Close功效:關閉當前報表第38頁(5)用DoCmd對象運行宏語法格式:

DoCmd.RunMacro"宏名"功效:運行指定宏(6)用DoCmd對象退出Access語法格式:

DoCmd.Quit功效:關閉全部Access對象和Access本身第39頁(7)用DoCmd對象執行宏語法格式:

DoCmd.RunMacro"宏名"[,運行次數

][,數值表示式

]功效:運行指定宏說明:☆運行次數用于計算宏運行次數☆數值表示式在每一次運行宏時進行計算,結果為False時,停頓運行宏。第40頁二、VBA編程環境:VBEVBE是編輯VBA代碼時使用界面。在VBE編輯器中能夠編寫VBA函數和過程。使用Alt+F11能夠實現數據庫窗口和VBE之間切換。第41頁1、VBE窗口組成

VBE使用各種窗口來顯示不一樣對象或是完成不一樣任務。VBE窗口主要包含:標準工具欄工程窗口屬性窗口代碼窗口對象組合框事件組合框監視窗口馬上窗口當地窗口第42頁(1)標準工具欄▲Access視圖▲插入模塊……▲運行子過程/用戶窗口▲中止運行▲終止運行/重新設計▲設計模式▲工程項目管理器▲屬性窗體▲對象瀏覽器(各按鈕功效參見教材P260)第43頁(2)工程窗口(工程資源管理器)在Access中所謂工程就是指一個數據庫應用系統。系統中全部類對象和模塊對象都在工程窗口中顯示。工程窗口以層次結構列表形式顯示當前數據庫中全部模塊文件。鼠標雙擊其中之一,即打開其代碼窗口。▲【查看代碼】按鈕打開對應代碼窗口▲【查看對象】按鈕打開對應對象窗口▲【切換文件夾】按鈕隱藏或顯示對象分類文件夾第44頁(3)屬性窗口屬性窗口列出了選定對象屬性,方便查看、修改這些屬性。若選取了多個控件,屬性窗口中列出是全部控件共同屬性。▲對象框用于選擇對象▲屬性列表用于顯示和修改對象屬性。屬性列表能夠按分類或按字母進行排序。

直接在屬性窗口中設置對象屬性,稱“靜態”設置;在代碼窗口中,用VBA代碼設置對象屬性稱“動態”設置。第45頁(4)代碼窗口代碼窗口用于顯示、編寫及修改VBA代碼。系統允許打開多個代碼窗口,以查看不一樣學體或模塊中代碼。▲對象下拉列表框顯示對象名稱。用于查看或選擇其中對象。▲過程/事件下拉列表框顯示與所選對象相關事件。能夠依據需要選擇相應事件。▲自動提醒信息框依據已經輸入內容作出對應提醒。第46頁(5)馬上窗口馬上窗口是用來進行快速表示式計算、簡單方法操作及進行程序測試工作窗口。

在馬上窗口中能夠輸入或者粘貼一行代碼并執行該代碼(按Enter鍵),執行結果將在馬上窗口中顯示。語法格式:

?

<變量名或表示式>

在代碼窗口中編寫代碼時,假如要在馬上窗口中顯示變量或表示式值,則使用Debug語句。語法格式:

Debug.Print

<變量名或表示式>

馬上窗口中代碼及運行結果是不會被保留。第47頁(6)監視窗口在調試VBA程序時,能夠利用監視窗口顯示正在運行過程定義監視表示式值。(7)當地窗口使用當地窗口能夠自動顯示正在運行過程中全部變量申明及變量值。

以上窗口均能夠用鼠標進行拖拉操作或關閉操作;也能夠經過【視圖】菜單使其顯示。第48頁2、進入VBE編程環境代碼窗口是設計人員主要操作界面。雙擊工程窗口中任何對象,都能夠在代碼窗口中打開該對象對應模塊代碼。進入VBE編程環境方法有各種,對于類模塊,其方法有:★方法一①打開窗體或報表設計視圖,并選擇對象②單擊【屬性】對話框中【事件】選項卡③選擇某個事件并設置屬性為“事件過程”④單擊屬性右側“…”按鈕

打開窗體或報表設計視圖后若無【屬性】對話框,則能夠由以下方法之一打開:☆單擊【窗體設計工具】中【設計】選項卡中【屬性表】按鈕☆組合鍵:Alt+Enter第49頁★方法二①打開窗體或報表設計視圖,并選擇對象②選擇屬性對話框中【事件】選項卡③直接單擊某個事件右側“…”按鈕④在打開對話框中選擇【代碼生成器】★方法三①打開窗體或報表設計視圖②單擊【窗體設計工具】中【設計】選項卡中【查看代碼】按鈕第50頁對于標準模塊,其方法有:★方法一

在【創建】選項卡【宏與代碼】組中,單擊【模塊】按鈕(創建一個新模塊)★方法二

雙擊數據庫導航窗格中選擇需要打開模塊對象(修改已經存在標準模塊)★方法三

在【數據庫工具】選項卡【宏】組中,單擊【VisualBasic】按鈕(僅進入VBE環境。類似于使用組合鍵Alt+F11)第51頁3、VBA程序書寫標準(1)語句書寫要求

通常一個語句寫一行

語句較長分行寫時,可用續行符“_”將語句連續寫在下一行(續行符前需加一個空格)

可以用冒號“:”將多條短語句寫在同一行中

為顯示程序流程結構,能夠采取縮進格式書寫程序。

代碼設計時,可按F1鍵顯示幫助信息。第52頁(2)注釋語句為增加程序可讀性,可在程序中設置注釋語句。注釋語句能夠添加到程序模塊任何位置,且不會被執行。語法格式一:

Rem<注釋語句>(在其它語句之后出現時要用冒號分隔)語法格式二:

'<注釋語句>(可直接位于其它語句之后)

注釋語句默認以綠色文本顯示。第53頁(3)語法檢驗在代碼窗口輸入語句時,VBA會自動進行語法檢驗,即:

當輸入一行語句并按Enter鍵后,假如該語句存在語法錯誤,則此行代碼以紅色文本顯示,并顯示一條錯誤信息。

必須找出語句中錯誤并更正后才能夠進行下一步操作。

注意語法檢驗執行時機。第54頁三、數據類型

VBA在數據類型和定義方式上均繼承了傳統Basic語言特點。

Access數據庫在創建表時所使用字段數據類型在VBA中都有對應類型(OLE對象型、備注型和自動編號數據類型除外)。

在申明變量數據類型時,既能夠使用數據類型名,也能夠使用符號來定義。(詳見教材P262)第55頁1、字符型(String)

貨幣型數據(Currency)▲字符型常量必須要用一對英文半角雙引號括起來。▲貨幣型數據整數部分最多可達15位,小數位數最多只能使用4位。第56頁2、布爾型數據(Boolean)布爾型數據也稱邏輯型數據,其數據值只有兩個:True和False。

當布爾型數據轉換為其它類型數據時,True轉換為-1,False轉換為0。

當其它類型數據轉換為布爾型數據時,0轉換為False,非零值轉換為True。第57頁3、日期/時間型數據(Date)

日期/時間數據必須用一對“#”括起來

任何能夠識別文本日期數據都能夠賦給日期變量。【例】"1949-10-01""10-01-1949"#"01-10-1949""Oct,01,1949"#1949-10-01##10-01-1949##01-10-1949##1949-10-01#輸入后顯示日期格式系統默認為:mm/dd/yyyy第58頁

以數字序列表示日期時:

☆小數點左邊表示日期:1為1899年12月31日

☆小數點右邊表示時間:0為午夜0點0.5為中午12點

☆負數表示1899年12月31日之前日期【例】Subaa()DimdAsDated=1.1Debug.PrintdEndSub1899-12-3102:24:00第59頁4、變體型數據(Variant)

如果沒有指定變量詳細數據類型,則系統默認該變量為變體型數據型。

變體型是一個特殊數據類型,除了定長字符數據及用戶自定義類型外,能夠包含任何種類數據,詳細類型由最近所賦值確定。

變體型數據可以包含Empty、Error、Nothing及Null等特殊值。

能夠用VarType和TypeName函數來檢測Variant中數據類型。第60頁5、對象型數據(Object)

對象型數據用來表示圖形、OLE對象或其它對象。

對象型數據占4個字節存放空間。

對象型變量可引用應用程序中對象。第61頁6、用戶自定義數據類型

用戶自定義數據類型是由用戶自行建立,由一個或多個VBA標準數據類型或其它用戶自定義數據類型組合而成一個數據類型。

用戶自定義數據類型在關鍵字Type…EndType之間定義。語法格式:

Type<數據類型名

> <域名1>As<數據類型

> <域名2>As<數據類型

> ……EndType第62頁【例】自定義一個新類型MyType,該類型中包含3個元素,分別命名為:MyName(字符型)、MyBirthday(日期型)、MySex(邏輯型)。TypeMyTypeMyNameAsStringMyBirthdayAsDateMySexAsBooleanEndType定義類型以后就能夠象普通類型一樣定義變量DimNewStuAsMyType第63頁

用戶自定義數據類型變量賦值時,使用以下語法格式:語法格式:

變量名

.元素名=

變量值【例】DimNewStuAsMyTypeNewStu.MyName="史建平"NewStu.MyBirthday=#1988-10-01#NewStu.MySex=True第64頁

能夠用關鍵字With…EndWith簡化賦值中重復部分。【例】DimNewStuAsMyTypeWithNewStu

.MyName="史建平"

.MyBirthday=#1988-10-01#

.MySex=TrueEndWith第65頁Access與VBA數據類型對比含義Access數據類型VBA數據類型字節型ByteByte短整型Short、SmallIntInteger長整型Integer、Int、LongLong單精度型Single、RealSingle雙精度型Double、NumberDouble字符型Char、Text、StringString貨幣型Currency、MoneyCurrency邏輯型Logical、YesNoBoolean日期型Date、TimeDate對象型OLEObject、GeneralObject變體類型不支持Variant第66頁四、常量、變量與數組

常量是在程序運行過程中,其值不能被改變量。

變量是用于存放在程序運行時其值能夠發生變化量。

每個變量都有其變量名,使用變量前能夠指定其數據類型,也能夠不指定其數據類型。

數組是由一組含有相同數據類型變量(即數組元素)組成集合。第67頁1、常量

Access中常量有3種類型:☆符號常量用Const語句創建,并且在模塊中使用常量。☆內部常量是Access或引用庫一部分。☆系統常量

True、False、Null、Yes、No、On和Off等。第68頁(1)符號常量

假如在代碼中要重復使用某個相同值,或者代表一些含有特定意義數字或字符串,能夠使用符號常量。符號常量用Const語句來創建,創建時給出常量值。語法格式:

[Public|Private]Const

符號常量名[As數據類型]=符號常量值【例】

PublicConstPIAsSingle=3.1415927ConstNationalDayAsDate=#1949-10-1#第69頁

在程序運行過程中,符號常量只能作讀取操作,不允許修改或為其重新賦值。

不允許創建與內部常量和系統常量同名符號常量。

假如用As選項定義了符號常量數據類型,且所賦值數據類型與定義數據類型不相同,那么,系統自動將值數據類型轉換為所定義數據類型;假如不能轉換將顯示錯誤提醒。

符號常量有3個作用范圍級別:局部級別(過程級別)、私有級別和公共級別。

符號常量普通以大寫字母命名,方便與變量區分(變量普通用小寫字母命名)。第70頁(2)內部常量

VBA提供了一些預定義內部符號常量,它們主要作為DoCmd命令語句中參數。

內部常量以ac兩個前輟字母指明了定義該常量對象庫,如:acForm、acCmdsaveAs等。

經過對象瀏覽器可以查看全部可用對象庫中內部常量。

【對象瀏覽器】調用能夠利用VBE界面【視圖】菜單命令或工具欄中按鈕實現。第71頁(3)系統常量

系統定義常量有七個:True、False、Null、Yes、No、On和Off。

系統常量能夠在全部應用程序中直接使用。第72頁2、變量

變量名、變量數據類型和變量值是變量三要素。變量由變量名標識。(1)變量命名規則

變量名只能由字母、數字、漢字和下劃線組成,不能含有空格和除下劃線之外其它字符,長度不能超出255個字符。

變量名必須以字母(包含漢字)開頭,且不區分字母大小寫。

變量名不能使用VBA關鍵字,不能與VBA過程、函數和方法名同名。

同一作用域內變量名必須唯一。注意區分變量命名規則與字段名命名規則(P63)。第73頁(2)變量申明方法變量申明方式有兩種:隱式申明和顯式申明。▲隱式申明

隱式申明是沒有使用dim、Public、Private和Static等關鍵字來定義變量,而是直接使用變量。

隱式聲明變量若其后無類型說明符來指明其數據類型時,默認為變體數據類型。

隱式聲明變量只在當前過程中有效(即為局部變量)。【例】x="ABC"y=123第74頁▲顯式申明

Dim語句語法格式:Dim變量名1

[As數據類型

],_變量名2

[As數據類型

],……說明:☆假如不使用As選項來定義變量數據類型,系統默認該變量為Variant數據類型。☆

Dim語句一行中能夠申明多個變量,各變量申明之間用逗號分隔。

顯式聲明是指用Dim、Private、Public、Static語句來定義變量數據類型。第75頁【例】Dima1AsInteger

將a1定義為整型

Dima2AsDouble

將a2定義為雙精度型

Dima3AsString,a4AsDate

將a3定義為字符型,a4為日期型

Dimm

m為變體型變量

Dimx,y,zAsSingle

x、y為變體型變量

z為單精度型變量第76頁

類型說明符(隱式申明)使用類型說明符定義變量數據類型時,必須將其放在變量名最終(各種類型說明符詳見教材P262)。類型說明符定義變量屬于隱式申明。【例】

Var1%

=1234

Var2#

=123.45

Var3$

="abc“%:短整數#:雙精度數&:長整數$:字符串!:單精度@:貨幣第77頁VBA在判斷一個變量數據類型時,按以下次序進行:Dim語句

數據類型說明符。沒有使用Dim語句或類型說明符申明變量,系統默認其為變體數據型。

為了防止使用隱式申明變量,能夠在程序開始處使用OptionExplicit語句來強制使用顯式申明變量。在該方式下,假如變量沒有經過顯示申明或使用類型說明符,系統將提醒錯誤。第78頁(3)變量使用范圍因變量定義位置與方式不一樣,變量作用域也有所不一樣。☆局部變量(過程級別變量)局部變量只能在定義它過程內使用,在其它過程中無法存取局部變量。☆私有變量(私有模塊級別變量)私有變量只能在定義它模塊及其子過程內使用,而在其它模塊中無法使用。☆公共變量(公共模塊級別變量)在任何模塊和過程中都能夠訪問公共變量。公共變量需要在模塊申明區域用Public申明。第79頁

公共變量和私有變量必須在模塊(或窗體)申明區域中申明。語法格式:

Public|Private變量名

As[數據類型

]功效:定義全局變量或私有變量。說明:☆全局變量必須在模塊申明區域用Public定義。☆私有變量必須在模塊申明區域用Private或Dim定義。☆在過程中用Dim定義一定是局部變量。第80頁局部變量私有變量全局變量申明方式Dim

StaticDim

PrivatePublic申明位置在子過程中在窗體/模塊申明區域在標準模塊申明區域能否被本模塊其它過程存取不能能能能否被其它模塊過程存取不能不能能Static是在過程級別中使用,用于申明變量并分配其存放空間。在整個代碼運行期間都能保留使用Static語句申明變量值,且該變量與過程外其它同名變量無關。3種變量定義方法及其作用域第81頁3、數組

數組是用相同名稱保留一組有序數據集合,普通情況下該集合中數據元素數據類型是相同。

數組元素由數組名和數組下標組成,第一個數組元素下標稱為數組下界,最終一個元素下標稱為數組上界。第82頁(1)數組申明

VBA中不允許隱式說明數組,即數組在使用前必須用Public、Private或Dim語句進行申明,說明數組大小、數據類型及作用范圍。語法格式:Dim數組名([下標下界

to]下標上界

)[As數據類型]Dim數組名([下標下界

to]下標上界[,…])[As數據類型]說明:

假如申明了數組數據類型,則數組中全部元素必須賦于相同或能夠轉換數據類型。

As選項缺省時,數組中各元素為變體數據型。第83頁

下標下界默認值為0,假如設置下標下界為非0值,則要使用to選項。【例】Dimaa(5)AsStringDimbb(1to10,1to20)Dimcc(2,2to5,5)AsInteger

該數組是一個3維數組:第1維下標:0~2

第2維下標:2~5

第3維下標:0~5第84頁

能夠在模塊通用申明部分用OptionBase來指定數組默認下標下界。

☆OptionBase1

設置數組下標下界為1

☆OptionBase0(語句默認形式)

設置數組下標下界為默認值第85頁(2)數組類型按照數組申明方式,能夠將數組分為兩種類型:靜態(固定)數組和動態數組。▲靜態(固定)數組

☆靜態數組中元素個數在申明時被指定

☆靜態數組在程序運行過程中不能改變數組元素個數【例】Dima1(5)AsIntegerDima2(1to5)Dima3(3,5)AsLong第86頁▲動態數組

☆動態數組中元素個數在申明時不指定

☆動態數組在程序運行中能夠改變數組元素個數★動態數組定義步驟:①用Dim語句聲明一個空維數組,即:不指定數組大小

Dimb1()②使用數組時用ReDim語句來指定數組大小

ReDimb1(2,3)第87頁說明:☆ReDim語句只能出現在過程中,能夠改變數組大小、上下界和數組維數。☆使用ReDim重新申明數組后,原有數組元素中值將全部去除并取其默認值。

注意教材P268敘述!第88頁☆若要保留數組中元素原有值,則需在ReDim語句中加Preserve選項。【例】

Dima1()AsStringReDima1(5)ReDimPreservea1(UBound(a1)+5)

UBound(arrayname[,dimension])函數功效是:返回數組指定維最大可用下標。【例】

Dimb1(5,10)Debug.PrintUBound(b1,1)Debug.PrintUBound(b1,2)510第89頁☆帶Preserve選項ReDim語句能夠改變數組中最終一維上界,但不能改變這一維下界,改變下界將造成錯誤。☆若改變后數組比原來小,則多出數據將丟失。第90頁【例】第91頁【例】第92頁(3)數組訪問數組申明后,數組中每個元素都能夠單獨使用,使用方法與相同數據類型普通變量相同。語法格式:

數組名(下標值

)說明:☆下標值是指定范圍內(上下界之間)一個整數,其值不能超出這個范圍。☆假如是多維數組,則下標應是多個(不能多于數組維數),各整數間用逗號隔開。【例】a1(0,0)="ABC" b1(3)=123Debug.Printb1(3)+100第93頁五、運算符和表示式1、運算符運算符是表示實現某種運算符號。依據不一樣運算,VBA中運算符可分為4種類型:

☆算術運算符

☆字符串運算符

☆關系運算符

☆邏輯運算符。P269第94頁(1)算術運算符算術運算符用來執行簡單算術運算。VBA提供了8種算術運算符(詳見教材P269)。運算符名稱優先級說明^乘冪運算1計算乘方和方根-取負運算2*乘法運算3/浮點除法3標準除法,結果為浮點數\整數除法4整數除法,結果為整數Mod取模運算5求余數+加法運算6-減法運算6

算術運算符兩邊操作數都應該是數值型,假如是數字字符或邏輯型,則系統自動將其轉換成數值型后再進行運算。第95頁

指數運算(^)求一個數某次方。

☆在利用乘方運算符時,只有當指數為整數值時,底數才能夠為負數。【例】3^4 2^(1/2)

81 1.4142(-2)^3 (-2)^(1/2)

-8 犯錯True^3 Flase^(1/2)

-1 0第96頁

整數除法(\)對兩個操作數做除法運算并返回一個整數。

☆整數除法操作數普通為整型,當操作數是小數時,首先被四舍五入為整型或長整型,然后再進行整除運算。

☆假如運算結果是小數,系統自動將其截斷為整型或長整數,不再進行四舍五入處理。第97頁【例】11/3 3.666667(浮點除法)13.5\3

4(整數除法,操作數先被四舍五入)11\3 3(整數除法,運算結果不做四舍五入)"7"\"3" 2(字符串先轉換為數值型)5\2*3 0(乘法運算級別高于整除)3.56\7/3.5 2(浮點除法級別高于整除)第98頁

取模運算(Mod)對兩個操作數做除法運算并返回余數。

☆假如操作數有小數時,系統自動將其四舍五入為整數后再進行運算。

☆結果正負號與被除數相同。第99頁【例】11Mod3

212Mod3 0-11Mod3

-211Mod-3

211.4Mod3

211.56Mod6.2

0第100頁

算術運算符兩邊操作數都應該是數值型,假如是數字字符、邏輯型,則系統自動將其轉換成數值型后再進行運算;假如是日期型能夠加(減)一個整數,表示后推(前推)若干天。【例】"123"+2 True+20 125 19#-01-01#+1 #12/31/1899#-1 #-1-2# 0:00:00#-10-1#-#-10-2#

-1#1900-1-1#+#1900-1-2#

#1900-1-4#

第101頁(2)字符串運算符字符串運算符就是將兩個字符串連接起來生成一個新字符串。字符串運算符有兩個:&

運算符、+

運算符第102頁

&

運算符用于強制兩個字符串連接。☆因為符號&還是長整型定義符,在字符串變量使用運算符&時,變量與運算符之間必須加一個空格。【例】

x&=123

xޝ-10-1#作為長整型定義符作為連接運算符第103頁☆運算符&兩邊操作數能夠是字符型、數值型或日期型。進行連接操作前先將操作數數據類型轉換為字符型,然后再進行字符串連接。【例】123&"ABC"aa=123aa&"ABC"aa&"ABC"123ABC定義變量并賦值123ABC犯錯第104頁

+運算符用于連接兩個字符串,形成一個新字符串。☆運算符兩邊操作數必須都是字符串。☆因為符號“+”還是算術運算符,所以:

如果兩邊操作數都是數值型,則進行普通加法運算。

如果一個是數值型,另一個為數字字符串,則系統自動將數字字符串轉化為數值,然后進行加法運算。

如果一個是數值型,另一個為非數字字符串,則犯錯。第105頁【例】"ABC"&123 "ABC"+"123"

ABC123 ABC123"12.5"&24 "12.5"+24

12.524 36.5"A12.5"&24 "A12.5"+24

A12.524 犯錯"123.5"&#-09-11#

123.5-9-1112.5&#-10-01# 12.5-10-1#-09-01#+10 #9999-12-31#+1 -9-11 溢出運算符"&"與"+"比較日期所能表示范圍:

100年1月1日至9999年12月31日注:年份假如是兩位數

0~29之間,系統解釋為~2029年

30~99之間,系統解釋為1930~1999年第106頁在VBA中,運算符"

+"既可用作加法運算符,也能夠用作字符串運算符,但運算符"&"專門作為字符串運算符。所以在有些情況下,用"&"比用"+"可能更為安全。第107頁(3)關系運算符關系運算符用于對兩個表示式比較大小,比較結果將是一個邏輯值,即:若關系成立,則為真(True);反之則為假(False)。

VBA提供了6種關系運算符(見教材P271)。名稱運算符舉例說明

等于="abc"="abd"False

大于

大于等于

小于等于

小于

不等于>>=<=<<>"abc">"abd"45<123"45"<="123"#-1-1#>=#-1-1#"abcd"<>"ABCD"FalseTrueTrueFalseFalse第108頁在使用關系運算符時應注意以下標準:

假如參加比較兩個操作數都是數值型,則按它們大小進行比較。

假如參加比較兩個操作數都是字符型,則從左到右一一對應比較。

☆字母不區分大小寫,且大于數字字符。

☆漢字字符按漢語拼音比較大小,且大于西文字符。

☆字符大小次序:

漢字字符>字母(按字母次序且大小寫相同)>數字>空格注意教材P271敘述。第109頁

在VBA中,允許部分不一樣數據類型量進行比較,如:

數值型與邏輯型

數值型與日期型

日期型與邏輯型

日期型與數字字符

數值型與數字字符注:均轉換為數值型后再進行比較。第110頁(4)邏輯運算符邏輯運算符用于對兩個邏輯量進行邏輯運算,其結果依然是一個邏輯值。VBA邏輯運算主要為:

AND

(與運算)

OR

(或運算)

NOT

(非運算)邏輯運算符說明Not當Not連接表示式為真時,整個表示式值為假And當And連接表示式均為真時,整個表示式值為真,不然為假Or當Or連接表示式均為假時,整個表示式值為假,不然為真第111頁

各個邏輯運算符真值表XYNotXXAndYXOrYTrueTrueTrueFalseFalseTrueFalseFalseFalseTrueTrueFalseFalseTrueTrueFalseTrueTrueFalseFalseP271第112頁2、表示式(1)表示式組成

表達式由字面值、常量、變量、運算符、函數、標識符、邏輯量和括號等按一定規則組成。

表達式經過運算得出結果,運算結果數據類型由操作數數據類型和運算符共同決定。

在算術運算表示式中,參加運算操作數可能含有不一樣數據精度,VBA要求:運算結果數據類型采取精度高數據類型。第113頁(2)表示式書寫規則

要改變運算符運算次序,只能使用圓括號且必須成對出現;

乘號不能省略;

表達式從左至右書寫,字母無大小寫區分。注意:計算機表示式與數學不一樣第114頁(3)運算優先級在一個運算表示式中,假如含有各種不一樣類型運算符,則運算進行先后次序由運算符優先級決定。優先級高低高

低算術運算符字符串運算符關系運算符邏輯運算符指數運算^優先級相同優先級相同Not取反-

And乘法和除法*/Or整數除法\模運算Mod加法和減法+-

圓括號優先級別最高,所以能夠用圓括號改變表示式運算次序。P272第115頁【例】100/5^2 412/5*2

4.812\5*2

1-12Mod5*2

-23+4*2>"12"+"34" False第116頁【例】15<8+2*2Or2>FalseAnd"A"&"12"<"B"15<12Or2>FalseAnd"A"&"12"<"B"15<12Or2>FalseAnd"A12"<"B"

FalseOrTrueAndTrueFalseOrTrue

True第117頁六、函數

VBA提供了近百個內置標準函數,以方便完成許多操作。函數標準形式:

函數名(參數列表)說明:☆函數名不可缺省,這是函數標識。☆函數參數能夠是常量、變量或表示式,且置于函數名后圓括號中;參數能夠是一個或多個,多個參數之間用逗號隔開。☆函數無參數時,其后圓括號能夠省略。☆函數被調用時,都會返回一個特定類型值。第118頁

學習函數關鍵點:

函數名、函數功效和語法格式

參數個數、數據類型以及每個參數含義(包含缺省時含義及默認值)

函數返回值及其數據類型第119頁1、數學函數(1)絕對值函數語法格式:

Abs(Number)功效:返回參數絕對值返回值數據類型:數值型說明:

Number是任何有效數值表示式。【例】

Abs(-25) 25Abs(100\24.5-25)

21第120頁(2)向下取整函數語法格式:

Int(Number)功效:返回參數向下取整值返回值數據類型:數值型說明:參數為負值時返回小于等于參數值最大負數。【例】

Int(2.5) 2Int(-2.5)

-3第121頁(3)取整函數語法格式:

Fix(Number)功效:返回參數整數部分返回值數據類型:數值型說明:參數為負值時返回大于等于參數值最小負數(注意與Int函數不一樣之處)。【例】

Int(2.5) Fix(2.5) 2 2Int(-2.4) Fix(-2.4)

-3 -2第122頁(4)開平方函數語法格式:

Sqr(Number)功效:計算參數平方根返回值數據類型:雙精度型說明:

Number值必須大于等于0。【例】

Sqr(9) Sqr(Abs(-16)) 3 4第123頁(5)三角函數語法格式:

Sin(Number)Cos(Number)Tan(Number)功效:計算參數正弦、余弦和正切值返回值數據類型:雙精度型說明:參數是以弧度為單位角度值。【例】ConstPIASSingle=3.1415927

Sin(PI/6) Tan(PI/4) 0.500000 1.000000第124頁(6)隨機函數語法格式:

Rnd[(Number)]功效:產生一個大于等于0,且小于

1隨機數返回值數據類型:單精度型【例】Int(10*Rnd)

產生1個[0,9]隨機整數

Int(10*Rnd+1

)

產生1個[1,10]隨機整數第125頁說明:☆Rnd函數產生隨機數序列與參數Number有關。☆假如想取得真正隨機數,那么應該在程序中將Randomize

作為第一條命令。(7)自然指數(對數)函數語法格式:

Exp(Expression)或者log(Expression)功效:計算eN次方或者計算以e為底數值表示式對數返回值數據類型:雙精度型第126頁(8)四舍五入函數語法格式:

Round(Expression1[,Expression2]

)功效:對Expression1值按指定小數位數進行四舍五入返回值數據類型:雙精度型第127頁說明:☆Expression1值是要進行四舍五入運算值。☆Expression2值表示在進行四舍五入運算時,小數點右邊應該保留位數,假如缺省則函數返回整數值。☆Expression2值假如是小數,則先對其進行四舍五入到整數,再對Expression1進行四舍五入運算。☆函數能夠接收小數位數最多為14位,假如Expression2值為負值,系統將作犯錯誤提醒。第128頁【例】

Round(234.2678,2)

Round(234.2678)

Round(234.2678,8/3)

Round("234.2"+"678",2)

Round(234.2678,-1)

怎樣產生1個[10,50]隨機整數?

Int(Rnd*41)+10 Round(Rnd*40)+10234.27234234.268234.27犯錯第129頁2、字符串函數(1)字符串檢索函數語法格式:

InStr([Start,]String1,String2[,Compare])功效:返回String2在String1中最早出現位置返回值數據類型:長整型說明:

String1為接收搜索字符表示式。

String2為被搜索字符表示式。

Start為數值表示式,設置搜索起始位置。假如缺省,則從第一個字符位置開始搜索。第130頁

Compare指定字符串比較方法,其值能夠是:

0

做二進制比較

1

不區分大小寫文本比較

2

基于數據庫中包含信息比較

如果指定了Compare參數,則一定要有Start參數。第131頁Instr()函數返回值參數值返回值String1為零長度0String2為零長度StartString2找不到0在String1中找到String2找到位置Start大于String1長度0String1或String2為NullNull第132頁【例】InStr("abcdABCD","bc") 2InStr(1,"abcdABCD","bc") 2InStr("","bc") 0InStr("abcdABCD","") 1InStr(3,"abcdABCD","") 10InStr(9,"abcdABCD","bc") 0第133頁【例】InStr("abcdABCD","BC") 2InStr(1,"abcdABCD","BC",0) 6InStr(1,"abcdABCD","BC",1) 2InStr(3,"abcdABCD","bc",1) 6InStr(3,"abcdABCD","bc",0) 0InStr("abcdABCD",Null) InStr(Null,"bc") Null Null第134頁(2)字符串長度檢測函數語法格式:

Len(String|Varname)功效:返回字符串所含字符數返回值數據類型:長整型說明:a)String為任何有效字符常量表示式,函數返回即為該字符串中所含字符數。第135頁b)Varname為任何有效變量名。

*假如變量是字符型(不是定長),則函數返回即為該變量所含字符數(未賦值時返回0);

*假如變量是除變體數據類型以外其它數據類型,則函數返回即為該數據類型所占空間;*假如變量是變體數據類型,則返回將其值作為字符串后所含字符數。第136頁【例】?Len("AB"+"ECD") ?Len("南京")

5 2?

Len("1234.5678") ?Len(123)

9 出錯x!=123.45 y#=123.45?Len(x)

?

Len(y)

4 8DimxAsString*10x="ABC"Debug.PrintLen(x)

10第137頁【例】

x=123.4 z=True ?Len(x) ?Len(z) 5 4DimyAsDatey=#10/15/#Debug.PrintLen(y) 8?Len(Null) Nully=#10/15/#Debug.PrintLen(y)

10第138頁(3)字符串截取函數

Left()函數語法格式:Left(String,Length)功效:從字符表示式String左側第一個字符開始,截取由Length值所指定若干個字符

Right()函數語法格式:Right(String,Length)功效:從字符表示式String右側第一個字符開始,截取由Length值所指定若干個字符

Mid()函數語法格式:Mid(String,Start[

,Length])功效:從字符表示式String返回一個子字符串此3個函數返回值數據類型均為字符型。第139頁【例】

Left("ABCD中國",8-5)

ABC

Left("ABCD中國",0)

(空字符串)

Left("ABCD中國",8)

ABCD中國

Right("ABCD中國",4)

CD中國

Right("ABCD中國",7)

ABCD中國第140頁【例】

Mid("ABCD中國",3,8)

CD中國

Mid("ABCD中國",12,2)

(空字符串)

Mid("ABCD中國",0,4)

犯錯

Mid("ABCD中國",3,-1)

犯錯第141頁(4)生成空格字符函數語法格式:

Space(Number)功效:返回數值表示式所指定空格數返回值數據類型:字符型說明:

Number值必須是個大于等于0數;假如是負數,則犯錯。【例】Space(1+2) Space(-2) □□□ 犯錯

Space(0)

(空字符串)第142頁(5)大小寫轉換函數

Ucase()函數語法格式:

Ucase(String)功效:將字符串中小寫字母轉換成大寫字母

Lcase()函數語法格式:

Lcase(String)功效:將字符串中大寫字母轉換成小寫字母此2個函數返回值數據類型均為字符型。【例】

Ucase("AbCd123") Lcase("AbCd123") ABCD123 abcd123第143頁(6)刪除空格函數

LTrim()函數語法格式:

LTrim(String)功效:刪除字符串開始空格返回值數據類型:字符型

RTrim()函數語法格式:

RTrim(String)功效:刪除字符串尾部空格返回值數據類型:字符型第144頁

Trim()函數語法格式:

Trim(String)功效:刪除字符串開始和尾部空格返回值數據類型:字符型☆String為任何有效字符表示式。☆此三個函數均不能刪除字符串中間空格。第145頁【例】

LTrim("□□□AB□□CD□□□□")

AB□□CD□□□□RTrim("□□□AB□□CD□□□□")

□□□AB□□CD

Trim("□□□AB□□CD□□□□)

AB□□CD"X□Y"+RTrim("□AB□□CD□□")+"L"

X□Y□AB□□CDL第146頁3、日期/時間函數(1)系統日期和時間函數

Date()函數語法格式:Date()功效:返回當前系統日期

Time()函數語法格式:Time()功效:返回當前系統時間

Now()函數語法格式:Now()功效:返回當前系統日期和時間【例】Date+Time=Now

返回日期格式由操作系統設置日期格式決定。True第147頁(2)截取日期分量函數

Year()函數語法格式:Year(Date)功效:返回日期表示式年份返回值數據類型:整型

Month()函數語法格式:Month(Date)功效:返回日期表示式月份返回值數據類型:整型

Day()函數語法格式:Day(Date)功效:返回日期表示式日期返回值數據類型:整型第148頁【例】

Year

溫馨提示

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

評論

0/150

提交評論