




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第8章VBA編程入門第8章VBA編程入門內容提要8-1VBA概念8-2VBA編程基礎8-3VBA常用語句8-4VBA程序流程控制8-5數組8-6VBA與宏8-7小結及練習內容提要8-1VBA概念VBA(VisualBasicforApplication)是MicrosoftOffice系列軟件的內置編程語言,其語法結構與VisualBasic編程語言互相兼容,采用的是面向對象的編程機制和可視化的編程環(huán)境。8-1VBA概述8-1-1VBA簡介VBA(VisualBasicforApplicati
集合和對象VBA中的應用程序是由許多對象組成的,如表、窗體、查詢等。對象是幫助構造應用程序的元素,以特定的方式組織這些對象,就形成了應用程序。數據庫窗口把可供選擇的對象排列在一起,形成不同的類。8-1-2面向對象程序設計的基本概念集合和對象8-1-2面向對象程序設計的基本概念對象的屬性、事件和方法屬性
屬性描述了對象的自身性質。其格式為:
對象名.屬性=屬性值事件事件是指可以發(fā)生在一個對象上且能夠被該對象所識別的動作。如:單擊某個命令按鈕就產生該按鈕的“單擊”事件當某個對象發(fā)生某一事件后,就會驅動系統去執(zhí)行預先編好的、與這一事件相對應的一段程序。對象的屬性、事件和方法屬性方法方法是系統事先設計好的,可以完成一定操作的特殊過程,是附屬于對象的行為和動作。在需要使用的時候可以直接調用。其調用格式為:
對象名.方法名方法
Access中除數據庫的7個對象外,還提供一個重要的對象:DoCmd對象除窗體、控件的SetFocus(獲得控制焦點)方法外,用得最多得是DoCmd對象的一些方法。使用這些方法,可以在VBA中運行Access的操作。Access中除數據庫的7個對象外,還提供一個重要的對打開當前數據庫中的“雇員”窗體
DoCmd.OpenForm"Employees"
在數據庫窗口中選擇“雇員”窗體DoCmd.SelectObjectacForm,"
Employees
",True在數據庫窗口中關閉“雇員”窗體
DoCmd.CloseacForm,“Employees”,acSaveYes刪除數據庫中的“雇員”表
DoCmd.DeleteObject"Employees"
DoCmd對象的常用方法(參照教材P190頁)打開當前數據庫中的“雇員”窗體DoCmd對象的常用方法(例8-1新建一個窗體并添加兩個命令按鈕,運行窗體后,單擊第一個按鈕,新式一個消息框;單擊第二個按鈕,退出當前窗體。(參照教材P191頁)
通過此例,體會可視化編程、面向對象、事件過程、應用方法等基本概念。例8-1新建一個窗體并添加兩個命令按鈕,運行窗體后,單擊第進入VBE編程環(huán)境VBE窗口的組成
VBE窗口由工具欄、工程資源管理器窗口、屬性窗口、代碼窗口和立即窗口組成。在VBE環(huán)境中編寫VBA代碼8-1-3VBA編程環(huán)境進入VBE編程環(huán)境8-1-3VBA編程環(huán)境標準工具條視圖MicrosoftAccess按鈕:切換Access2000窗口插入按鈕:插入模塊或過程運行子過程/用戶窗體按鈕:運行模塊中的程序中斷按鈕:中斷正在運行的程序重新設置按鈕:結束正在運行的程序設置模式按鈕:在設計模式和非設計模式之間切換工程資源管理器按鈕:用于打開工程資源管理器屬性窗口按鈕:用于打開屬性窗口對象瀏覽器按鈕:用于打開對象瀏覽器MicrosoftAccsee插入模塊運行子過程/用戶窗體設計模式中斷重新設計工程資源管理器對象瀏覽器屬性窗口標準工具條視圖MicrosoftAccess按鈕:切換A工程窗口-選擇對象屬性窗口-選擇對象的屬性代碼窗口選擇事件VBE編程環(huán)境工程窗口屬性窗口代碼窗口選擇事件VBE編程環(huán)境8-2-1常量、變量8-2VBA編程基礎常量:在程序運行中其存儲的值不會改變。變量:在程序運行中其值可以改變。VBA使用常量、變量來存儲值。用來保存在程序運行期間數據。8-2-1常量、變量8-2VBA編程基礎常量:在程序運行常量
在程序運行過程中,其值不會被改變的量稱為常量。在VBA中有三類常量:直接常量
如:10,20%,123.0,“AB”,“VBA程序設計”等
符號常量系統常量
指VBA系統預先定義好的,用戶可以直接引用的量。如:acForm,acQuery,vbOk,vbRed
常量符號常量
在程序中,某個常量多次被使用,則可以使用一個符號來代替該常量,這樣不僅在書寫上方便,而且有效地改進了程序的可讀性和可維護性。
VBA中使用關鍵字Const
聲明符號常量。其格式如下:
Const常量名[類型符號]=常數表達式如:
ConstPI#=3.1415926符號常量
變量是內存中的臨時單元,存放在程序執(zhí)行過程中產生的中間結果和最后輸出結果。
在程序中使用變量,就要給變量定義名稱及類型,即對變量進行聲明。變量變量是內存中的臨時單元,存放在程序執(zhí)行過程中產生的中
變量命名規(guī)則變量名必須以字母或漢字開頭,后可跟字母、漢字、數字或下劃線組成(不能含有小數點和空格),長度不超過255個字符的字符串;不能使用VBA中的關鍵字;VBA中不區(qū)分變量名的大小寫;變量名的最后一個字符可以是%、&、!、#、$等表示數據類型的聲明符。說明:常量名的命名規(guī)則與變量名的命名規(guī)則相同變量命名規(guī)則說明:常量名的命名規(guī)則與變量名的命名規(guī)則相同8-2-2數據類型與變量的聲明
在VBA中,數據類型用來決定變量可以保存何種數據。VBA支持多種數據類型,為用戶編程提供了方便。參照教材P196頁表8-1VBA的數據類型8-2-2數據類型與變量的聲明在VBA中,數據類型
VBA的數據類型數據類型類型聲明符存儲空間
取值范圍整型(Integer)%2-32768~32767長整型(Long)&4-2147483648~2147483647單精度浮點型(Single)!4負數:-3.402823E38~-1.401298E-45正數:1.401298E-45~3.402823E38雙精度浮點型(Double)#8負數:-1.79769313486232E308~-4.94065645841247E-324正數:4.94065645841247E-324~1.79769313486232E308貨幣型(Currency)@8-922337203685477.5808~922337203685477.5807日期型(Date)8100年1月1日~9999年12月31日字符型(String)$0字符~65400個字符字節(jié)型(Byte)10~255邏輯型(Boolean)2True或False對象型(Object)4任何引用的對象變體型(Variant)VBA的數據類型數據類型類型聲明符存儲空間取變量聲明用Dim|Static語句顯式聲明局部變量格式:Dim變量名[AS類型]
或Dim變量名類型符語句中的“As類型”子句是可選的。如果使用該子句,就可以定義變量的數據類型。未使用,默認變量的類型為變體型(Variant)。例如:DimiAsinteger,s
表示聲明了一個名為i的整型變量和一個名為s的變體型變量。變量聲明關鍵字Dim或Static的區(qū)別:Dim聲明:隨過程的調用而分配存貯單元,每次調用都對變量初始化;過程體結束,變量的內容自動消失,存儲單元釋放。Static聲明:Static聲明的變量,也稱為靜態(tài)變量。靜態(tài)變量在程序運行過程中一直保留其值,即每次調用過程,變量保持原來的值。
關鍵字Dim或Static的區(qū)別:隱式聲明變量
未進行上述的聲明而直接使用變量,稱變量的隱式聲明。采用隱式聲明的變量都是變體型(Variant)。
注意:
VBA中允許不事先聲明而直接使用變量,可以通過語句
OptionExplicit,來要求所使用的變量必須事先聲明,否則VBA會發(fā)出警告信息。隱式聲明變量下面是一個簡單的程序,其使用的變量a,b,Sum都沒有事先定義。PrivateSubForm_Click()
Sum=0
a=10
b=20Sum=a+bPrint"Sum=";SumEndSub
良好的編程習慣應該是“先聲明變量,后使用變量”,這樣做可以提高程序的效率,同時也使程序易于調試。VBA中可以強制顯式聲明,可以在窗體模塊、標準模塊和類模塊的通用聲明段中加入語句:OptionExplicit下面是一個簡單的程序,其使用的變量a,b,Sum都沒有事聲明而未賦值的變量的值為:數值型變量初始化為0;字符型變量為零長度字符串;變體型變量初始化為Empty。
變量的初始化聲明而未賦值的變量的值為:變量的初始化8-2-3運算符和表達式(教材P199頁)運算符算術運算符8-2-3運算符和表達式(教材P199頁)運算符例如:"123"+"456"
結果"123456"
"123"&"456"
結果"123456"
使用上&與+的區(qū)別:例如:"abcdef"&12345
結果為"abcdef12345"
"123"&456
結果為"123456"
"abcdef"+12345結果為出錯
"123"+456結果為579
連接運算符:&、+(字符串連接)例如:"123"+"456"結果"123456"
將兩個操作數進行大小比較,結果為邏輯值。
注意:字符串比較,則按字符的ASCII碼值從左到右一一比較,直到出現不同的字符為止。關系運算符將兩個操作數進行大小比較,結果為邏輯值。關系運算符將操作數進行邏輯運算,結果是邏輯值邏輯運算符將操作數進行邏輯運算,結果是邏輯值邏輯運算符組成由變量、常量、函數等運算對象加上運算符、圓括號組成的式子。書寫規(guī)則
(1)運算符不能相鄰。例a+-b是錯誤的。
(2)乘號不能省略。例x乘以y應寫成:x*y。
(3)括號必須成對出現,均使用圓括號。
(4)表達式從左到右在同一基準上書寫,無高低。運算優(yōu)先級算術運算符>連接運算符>關系運算符>邏輯運算表達式組成表達式例1:用人單位招聘秘書:年齡小于40歲的女性,學歷??苹虮究?,年齡<40,性別=“女”,(學歷=“??啤保瑢W歷=“本科”)
AndAndOr例2:算術表達式:正確的VBA表達式:3〈=xAndx<=7
錯誤的VBA表達式:3<=x<=7或
3<=xOrx<=7
考慮:若分別寫成:年齡<40And性別="女"And(學歷="???And學歷="本科")年齡<40Or性別="女"Or(學歷="???Or學歷="本科")例1:用人單位招聘秘書:年齡小于40歲的女性,學歷??苹虮究?/p>
函數實際上是系統事先定義好的內部程序,用來完成特定的功能。VBA提供了大量的內部函數,供用戶在編程時使用。
函數的調用形式為:函數名(參數表)常用內部函數
參照教材P201頁表8-5常用內部函數,在立即窗口練習,體會函數的功能。8-2-4常用函數函數實際上是系統事先定義好的內部程序,用來完成特定的InputBox函數
InputBox(提示[,標題][,缺省])
其中:提示:提示信息;標題:對話框標題;缺省:輸入區(qū)缺省值。
注意:函數的返回值為字符型數據。輸入、輸出函數InputBox函數輸入、輸出函數使用MsgBox,可以在對話框中顯示文本信息。格式為:
MsgBox(提示信息[,按鈕數目和類型][,標題])MsgBox函數或方法(用于顯示輸出信息)MsgBox函數:變量[%]=MsgBox(提示[,按鈕][,標題])MsgBox方法:MsgBox提示[,按鈕][,標題]使用MsgBox,可以在對話框中顯示文本信息。MsgBox函8-3VBA常用語句
VBA代碼不區(qū)分字母的大小寫
系統保留字自動轉換每個單詞的首字母大寫;
語句書寫自由一行可書寫幾句語句,之間用冒號(:)分隔;一句語句可分若干行書寫,用續(xù)行符將語句分開。8-3-1VBA語句書寫規(guī)則8-3VBA常用語句VBA代碼不區(qū)分字母的大小寫8-3賦值語句:給變量、常量或對象的屬性指定一個值或表達式。8-3-2VBA常用語句
格式:[LET]變量名=表達式
作用:將表達式的值賦值給變量名。一般用于給變量賦值或對控件設定屬性值。例如:s=10Text1.Text="歡迎使用VBA"注意:雖然賦值號與關系運算符等于號都用“=”表示,VBA會根據所處的位置自動判斷是何種意義的符號賦值語句:給變量、常量或對象的屬性指定8-3-2VBA常用聲明語句:命名和定義常量、變量、數組以及過程。注釋語句在程序中的適當位置加上注釋語句有利于程序的維護和閱讀。
格式:Rem注釋內容 或用單引號’注釋內容聲明語句:命名和定義常量、變量、數組以及過程。結構化程序設計由順序、分支、循環(huán)這3種基本結構所組成。語句組2語句組1TF語句組2條件語句組1
8-4VBA程序流程控制FT條件語句組TF條件語句組結構化程序設計由順序、分支、循環(huán)這3種基本結構所組成。語句組單行If語句格式:If表達式Then語句1[Else語句2]功能:If測試指定的條件,如果條件表達式為真(True),則執(zhí)行Then后面的語句1,否則執(zhí)行語句2(若Else子句未省略)。分支結構TF語句2條件語句1TF條件語句1單行If語句分支結構TF語句2條件語句1TF條件語句1PrivateSubp1()DimxAsInteger,yAsIntegerx=InputBox("請輸入x值")
Ifx>=0Theny=2*x+1MsgBox"y:"&yEndSubPrivateSubp1()DimxAsInteger,yAsIntegerx=InputBox(“請輸入x值”)
Ifx>=0Theny=2*x+1Elsey=1MsgBox"y:"&yEndSub根據輸入x的值,觀察y的輸出結果PrivateSubp1()PrivateSubp多行If語句格式:If表達式Then
語句組1[Else
語句組2]EndIf多行If語句多行If語句的執(zhí)行過程是:如果“表達式”的值為真,則執(zhí)行語句組1;否則執(zhí)行語句組2。當執(zhí)行完語句組1或語句組2后,程序流程跳轉到語句EndIf的后面。語句組可以由一條或多條語句組成,語句組不能與Then書寫在同一行,否則VBA認為是一個單行If語句,會導致Else沒有匹配的If。語句“EndIf”是多行If語句的結束標志。在多行If語句中,即使省略Else子句,也要寫該結束標志。省略Else子句時的多行If語句形式為:
If表達式Then
語句組
EndIf多行If語句的執(zhí)行過程是:如果“表達式”的值為真,則執(zhí)行語句
例:計算分段函數單行If語句實現:
Ifx=0Theny=cos(x)-x^3+3*xIfx<>0Theny=sin(x)+sqr(x*x+1)
多行If語句實現:Ifx<>0Theny=sin(x)+sqr(x*x+1)Elsey=cos(x)-x^3+3*xEndIf例:計算分段函數單行If語句實現:Ifx=0ThenIf語句的嵌套If語句的嵌套是指If或Else后面的語句塊中又包含If語句。
If<表達式1>Then
If<表達式11>Then…EndIf
…
EndIfIf語句的嵌套
例:已知x,y,z三個數,使得x>y>z
用一個IF語句和一個嵌套的IF語句實現Ifx<yThent=x:x=y:y=t
Ify<zThent=y:y=z:z=t
Ifx<yThent=x:x=y:y=tEndIf
EndIfIf語句的嵌套注意事項:書寫鋸齒型;If與EndIf配對例:已知x,y,z三個數,使得x>y>zIfx<yIf…Then…ElseIf語句(多分支結構)
If<表達式1>Then <語句塊1>ElseIf<表達式2>Then <語句塊2> … [Else
語句塊n+1]
EndIfIf…Then…ElseIf語句(多分支結構)不管有幾個分支,依次判斷,當某條件滿足,執(zhí)行相應的語句,其余分支不再執(zhí)行;若條件都不滿足,且有Else子句,則執(zhí)行該語句塊,否則什么也不執(zhí)行。ElseIf不能寫成ElseIf。說明:不管有幾個分支,依次判斷,當某條件滿足,執(zhí)行相應的語句,其余47可編輯47可編輯例:已知百分制成績mark,顯示對應的五級制成績下列三種方法哪些正確,哪些錯誤?例:已知百分制成績mark,顯示對應的五級制成績<表達式列表>:與<變量或表達式>同類型的下面四種形式之一:
表達式
例:"A"
一組枚舉表達式(用逗號分隔)
2,4,6,8
表達式1To表達式2
60To100
Is關系運算符表達式
Is<60SelectCase語句(情況語句)語句格式:
SelectCase變量或表達式
Case表達式列表1
語句塊1 Case表達式列表2
語句塊2 …
[CaseElse
語句塊n+1]
EndSelect數值型或字符串表達式<表達式列表>:與<變量或表達式>同類型的下面四種形式之一:程序流程圖語句塊n+1語句塊1語句塊2語句塊n條件2TF…...條件nTF條件1TF程序流程圖語句塊n+1語句塊1語句塊2語句塊n條件2TF…例:變量strC中存放了一個字符,判斷該字符類型。用多分支結構實現:
IfUcase(strC)>="A"AndUcase(strC)<="Z"Then PrintstrC+"是字母字符"ElseIfstrC>="0"AndstrC<="9"Then PrintstrC+"是數字字符"Else PrintstrC+"其他字符"EndIf用SelectCase語句實現:
SelectCasestrC Case"a"To"z","A"To"Z" PrintstrC+"是字母字符" Case"0"To"9" PrintstrC+"是數字字符" CaseElse PrintstrC+"其他字符"EndSelect例:變量strC中存放了一個字符,判斷該字符類型。例如:在輸入成績文本框中輸入一個分數,單擊“判斷”命令按鈕后,在成績等級文本框中顯示對應的成績等級。輸入的成績在90~100分為A,80~89分為B,70~79分為C,60~69分為D,0~59分為E,否則顯示出錯信息。
編程點撥:根據題意,當輸入的成績不在[0,100]內時,應顯示出錯信息,在該范圍內時,應進行分等級。判斷是否為合法成績可用If語句,而分等級最好使用SelectCase語句。
例如:在輸入成績文本框中輸入一個分數,單擊“判斷”命令按鈕后條件函數
IIf函數形式為:
IIf(表達式,當表達式為True時的值,當表達式為False時的值)
例如:求x,y中大的數,放入max變量中。
max=IIf(x>y,x,y)
條件函數循環(huán)結構(參照教材P211頁)
For…Next循環(huán)
Do…Loop循環(huán)循環(huán)結構(參照教材P211頁)For…Next循環(huán)結構:將一段程序重復執(zhí)行指定的次數,其中使用一個計數變量,統計執(zhí)行的次數。格式:
For循環(huán)變量=初值to終值[Step步長]
語句塊
[ExitFor]
語句塊
Next[循環(huán)變量]For…Next循環(huán)語句P211循環(huán)體For…Next循環(huán)結構:將一段程序重復執(zhí)行指定的次數,其中
循環(huán)變量
<=終值
語句塊
ExitFor
語句塊
循環(huán)變量加步長
T
F
循環(huán)變量得初值
循環(huán)變量<=終值語句塊ExitFor語句塊功能:執(zhí)行For語句時,“循環(huán)變量”設為“初值”;執(zhí)行到Next語句時,步長加(減)到循環(huán)變量上;再執(zhí)行For語句時,若“循環(huán)變量”超過“終值”則循環(huán)結束。步長:未指定值時默認為1。若“步長”是正數或0,則“初值”應大于等于“終值”,否則,“初值”應小于等于“終值”。功能:執(zhí)行For語句時,“循環(huán)變量”設為“初值”;執(zhí)行到Ne例:計算累加程序S=1+2+3+4….+x,并輸出結果。方法:接收一個累加的終值,確定一個循環(huán)變量,循環(huán)變量有2個作用(加數和循環(huán)變量),確定一個存儲累加和的變量。使用循環(huán)計算,最后輸出顯示結果。
DimsAsinteger,xAsintegerx=InputBox("請輸入累加的終值")Forx=lToxs=s+xNext思考:計算=1+3+5+7…X或2+4+6+8…X如何編寫?例:計算累加程序S=1+2+3+4….+x,并輸出結果。例:計算累乘程序S=1*2*3*4…X
方法:接收一個累乘的終值,確定一個循環(huán)變量,循環(huán)變量有2個作用(乘數和循環(huán)變量),確定一個存儲累乘積的變量。使用循環(huán)計算,最后輸出顯示結果。
DimSAsinteger,iAsintegerx=InputBox("請輸入累加的終值")S=1Fori=lToxS=S*iNext注意:累乘的乘數和乘積變量的初值為1。例:計算累乘程序S=1*2*3*4…X注意:出了循環(huán),循環(huán)控制變量值的問題。例程序段:
Fori=2To13Step3循環(huán)執(zhí)行次數
debug.Printi 輸出i的值分別為:25811Nextidebug.Printi出了循環(huán)輸出為:i=14注意:出了循環(huán),循環(huán)控制變量值的問題。例:改變循環(huán)控制變量對循環(huán)的影響
PrivateSubCommand1_Click()j=0Fori=1To20Step2
i=i+3j=j+1Print"第";j;"次循環(huán)i=";iNextiPrint"退出循環(huán)后i=";iEndSub正常情況:i=1,3,5,7,9,11,13,15,17,19現在:i=4,9,14,19例:改變循環(huán)控制變量對循環(huán)的影響Do…Loop循環(huán)語句(用于控制循環(huán)次數未知)
形式1:
Do{While|Until}<條件>
語句塊
[ExitDo
語句塊]Loop
形式2:
Do
語句塊
[ExitDo
語句塊] Loop{While|Until}<條件>Do…Loop循環(huán)語句(用于控制循環(huán)次數未知)Do…Loop語句(循環(huán)結構)DoWhile…Loop語句DoUntil…Loop語句Do…LoopWhile語句Do…LoopUntil語句Do…Loop語句(循環(huán)結構)DoWhile…Loop
DoWhile…Loop語句
i=1DoWhilei<=10s=s+ii=i+1Loop
當i<=10成立時,執(zhí)行循環(huán)體循環(huán)變量i必須有初值防止產生死循環(huán)有可能一次也不執(zhí)行循環(huán)體修改循環(huán)控制變量,改變加數值DoWhile…Loop語句i=1修改循環(huán)控制Do…LoopWhile
i=1Dos=s+ii=i+1LoopWhilei<=10當i<=10成立時,執(zhí)行循環(huán)體循環(huán)變量i必須有初值防止產生死循環(huán)至少執(zhí)行一次循環(huán)體修改循環(huán)控制變量,改變加數值Do…LoopWhilei=1修改循環(huán)控制變量DoUntil…Loop
i=1DoUntili>10s=s+ii=i+1Loop
當i>10成立時,結束執(zhí)行循環(huán)體循環(huán)變量i必須有初值防止產生死循環(huán)有可能一次也不執(zhí)行循環(huán)體修改循環(huán)控制變量,改變加數值DoUntil…Loopi=1修改循環(huán)控制變量Do…LoopUntil
i=1Dos=s+ii=i+1LoopUntili>10當i>10成立時,結束執(zhí)行循環(huán)體循環(huán)變量i必須有初值防止產生死循環(huán)至少執(zhí)行一次循環(huán)體修改循環(huán)控制變量,改變加數值Do…LoopUntili=1修改循環(huán)控制變補充:While…Wend語句格式如下:
While<條件> <循環(huán)塊> Wend說明:該語句的功能與DoWhile<條件>….Loop實現的循環(huán)完全相同。補充:While…Wend語句三種循環(huán)語句:即For、Do—Loop,共同的特點是重復執(zhí)行一個語句系列(循環(huán)體),不同點是控制重復次數的時機和方法不一樣。參照教材P206-P214頁實例,掌握程序的控制結構。三種循環(huán)語句:即For、Do—Loop,共同的特點是重復執(zhí)
數組:數組不是一種數據類型,而是一組相同類型的變量的集合??梢韵袷褂闷胀ㄗ兞恳粯邮褂脭到M中的每一個元素。使用數組的好處是用一個數組名代表邏輯上相關的一批數據,用下標表示該數組中的各個元素,可以提高處理數據的效率,縮短和簡化程序。8-5數組數組:數組不是一種數據類型,而是一組相同類型的變量的集
數組不是一種數據類型,而是一組相同類型的變量的集合,數組必須先聲明后使用。
兩類數組:靜態(tài)(定長)數組、動態(tài)(可變長)數組
1.一維數組
定義一維數組的形式:
Dim數組名([下界To]上界)[As類型]
聲明了數組的名、維數、大小、類型8-5-1數組的定義數組不是一種數據類型,而是一組相同類型的變量的集合,說明:數組名的命名規(guī)則與變量的命名相同。數組的元素個數:上界-下界+1。缺省<下界>為0,若希望下標從1開始,可在模塊的通用部分使用OptionBase語句將設為1。其使用格式是:
OptionBase0|1
'后面的參數只能取0或1例如:
OptionBase1'將數組聲明中缺省<下界>下標設為1下界>和<上界>不能使用變量,必須是常量,常量可以是直接常量、符號常量,一般是整型常量。說明:
如果省略As子句,則數組的類型為變體類型。
數組中各元素在內存占一片連續(xù)的存儲空間,一維數組在內存中存放的順序是按下標大小的順序。例:Dimmark(1to100)AsInteger例:Dima(-1to3)AsInteger聲明一維數組a,包含了5個整型元素a(-1)、a(0)、a(1)、a(2)、a(3);如果省略As子句,則數組的類型為變體類型。例:Dimma
在定義靜態(tài)數組時,每一維的元素個數必須是常數,不能是變量或表達式。
如:錯誤的聲明,下標是變量
Dimx(n)
或:
n=Inputbox(“輸入n”)
Dimx(n)AsSingle注意:在定義靜態(tài)數組時,每一維的元素個數必須注意:在數組聲明中的下標說明了數組的整體,即每維的大小;而在程序其他地方出現的下標表示數組中的一個元素。兩者寫法形式相同,但意義不同。例如:Dimx(10)AsInteger
x(10)=100
表示聲明了數組x,有11個數組元素對x(10)這個數組元素賦值在數組聲明中的下標說明了數組的整體,即每維的大??;而在程序其定義二維數組的形式:Dim數組名([下界1To]上界1,下界2To]上界2)As類型例如:Dima(2,3)AsSingle
二維數組在內存的存放順序是“先行后列”。數組a的各元素在內存中的存放順序是:
a(0,0)→a(0,1)→a(0,2)→a(0,3) a(1,0)→a(1,1)→a(1,2)→a(1,3) a(2,0)→a(2,1)→a(2,2)→a(2,3)
2.二維數組定義二維數組的形式:例如:Dima(2,3)AsS例:DimlArray(0To3,0To4)AsLong共有4×5個元素等價于:DimlArray(3,4)AsLong
例:DimlArray(0To3,0To4
動態(tài)數組指在聲明數組時未給出數組的大小(省略括號中的下標),當要使用它時,隨時用ReDim語句重新指出數組大小。形式如下:
ReDim數組名(下標[,下標2…])[As類型]
例:Private
SubS1()
Dimx()AsSingle …
n=Inputbox(“輸入n”)
ReDimx(n)…EndSub3.動態(tài)數組動態(tài)數組指在聲明數組時未給出數組的大小(省略括號中的說明:
Dim、Static、Public聲明語句是說明性語句,可出現在過程內或通用聲明段;ReDim語句是執(zhí)行語句,只能出現在過程內;在過程中可多次使用ReDim來改變數組元素的個數
ReDim中的下標可以是常量,也可以是有了確定值的變量。如:n=InputBox(“輸入n的值”) ReDimArr(n)
靜態(tài)數組在程序編譯時分配存儲單元,動態(tài)數組在運行時分配存儲單元。說明:一維數組元素的引用使用形式:數組名(下標)其中:下標可以是常量、整型變量或表達式。例如:設有下面的數組A(10)、B(10)AsInteger
則下面的語句都是正確的。
A(1)=B(2)+B(1)+5'取數組元素運算
A(i)=B(i)'下標使用變量
A(i+2)=B(i+1) '下標使用表達式注意:引用數組時不能下標越界8-5-2數組的基本操作1.數組元素的引用一維數組元素的引用使用形式:數組名(下標)8-5-2引用二維數組的形式:數組名([下標1,下標2)
下標1指定元素在二維表中所在的行,下標2指定元素在二維表中所在的列。例如:a(1,2)=10a(i+2,j)=a(2,3)*2
在程序中常常通過二重循環(huán)來操作使用二維數組元素。
引用二維數組的形式:例如:a(1,2)=10數組引用實例:數組引用實例:通過循環(huán)給數組元素的初值
Fori=1To10'A數組的每個元素值為1 A(i)=1Nexti
數組的輸入(通過InputBox()函數)Fori=1To4Forj=1To5sc(i,j)=InputBox("輸入sc("&i&","&j&")的值")NextjNexti2.數組元素的輸入通過循環(huán)給數組元素的初值2.數組元素的輸入
用戶自定義數據類型也稱為記錄數據類型,它是在基本數據類型不能滿足實際需要時,由用戶以基本的數據類型為基礎,按照一定的語法規(guī)則自定義而稱的數據類型。自定義類型的定義
Type
自定義類型名
元素名[(下標)]As類型名
… [元素名[(下標)]As類型名]EndType
8-5-3自定義數據類型類型名:為標準類型元素名:表示自定義類型中的一個成員下標:表示是數組用戶自定義數據類型也稱為記錄數據類型,它是在基本數據例如:以下定義了一個有關學生信息的自定義類型:
TypeStudNoAsInteger '學號
NameAsString*20 '姓名
SexAsString*1 '性別
Mark(1To4)AsSingle '4門課程成績
TotalAsSingle'總分
EndType例如:以下定義了一個有關學生信息的自定義類型:自定義類型變量的聲明和使用聲明形式
Dim變量名As自定義類型名例:DimStudentAsStud
引用形式:變量名.元素名
例:表示Student變量中的姓名,第4門課程的成績:
Student.Name=“張三”
Student.Mark(4)=70
自定義類型變量的聲明和使用
8-6-1在VBA中執(zhí)行宏在VBA代碼中,使用DoCmd對象的RunMacro方法,可以執(zhí)行已創(chuàng)建好的宏。格式:DoCmd.RunMacroMacroName[,
RepeatCount][,RepeatExpression]8-6VBA與宏VBA與宏都是Access的編程工具,編程時,可以在VBA代碼中執(zhí)行宏,也可以在宏操作中使用VBA代碼。8-6-1在VBA中執(zhí)行宏8-6VBA與宏
【說明】MacroName:必選項,表示當前數據庫中要執(zhí)行的宏名稱;RepeatCount:可選項,表示要執(zhí)行宏的次數,省略時只運行一次宏。RepeatCount是一個整數值;RepeatExpression:可選項,在每次執(zhí)行宏時進行計算,當結果為False(值為0)時,停止執(zhí)行宏。RepeatExpression是一個數值型表達式。參照教材P217頁例題,體會在VBA中執(zhí)行宏的過程【說明】參照教材P217頁例題,體會在VBA中執(zhí)行宏的8-6-2將宏轉換為VBA代碼
Access能夠自動將宏轉換為VBA的事件過程或模塊,執(zhí)行這些事件過程或模塊的結果與運行宏的功能相同。8-6-2將宏轉換為VBA代碼
本章主要介紹了VBA的編程環(huán)境;VBA中常量、變量、表達式、函數的使用;VBA中常用語句;VBA程序流程控制中順序控制、選擇控制、循環(huán)控制等三種結構,還介紹了數組的概念及應用,通過本章的學習應掌握VBA編程的基本方法,理解面向對象機制,熟悉可視化的編程環(huán)境,為使用VBA程序設計語言開發(fā)出功能強大的數據庫應用程序打好基礎。8-7小結本章主要介紹了VBA的編程環(huán)境;VBA中常量、變量、
練習
結合教材中的實例,掌握掌握VBA編程的基本方法。完成本章習題。練習 結合教材中的實例,掌握掌握VBA編程的基本方法92可編輯92可編輯第8章VBA編程入門第8章VBA編程入門內容提要8-1VBA概念8-2VBA編程基礎8-3VBA常用語句8-4VBA程序流程控制8-5數組8-6VBA與宏8-7小結及練習內容提要8-1VBA概念VBA(VisualBasicforApplication)是MicrosoftOffice系列軟件的內置編程語言,其語法結構與VisualBasic編程語言互相兼容,采用的是面向對象的編程機制和可視化的編程環(huán)境。8-1VBA概述8-1-1VBA簡介VBA(VisualBasicforApplicati
集合和對象VBA中的應用程序是由許多對象組成的,如表、窗體、查詢等。對象是幫助構造應用程序的元素,以特定的方式組織這些對象,就形成了應用程序。數據庫窗口把可供選擇的對象排列在一起,形成不同的類。8-1-2面向對象程序設計的基本概念集合和對象8-1-2面向對象程序設計的基本概念對象的屬性、事件和方法屬性
屬性描述了對象的自身性質。其格式為:
對象名.屬性=屬性值事件事件是指可以發(fā)生在一個對象上且能夠被該對象所識別的動作。如:單擊某個命令按鈕就產生該按鈕的“單擊”事件當某個對象發(fā)生某一事件后,就會驅動系統去執(zhí)行預先編好的、與這一事件相對應的一段程序。對象的屬性、事件和方法屬性方法方法是系統事先設計好的,可以完成一定操作的特殊過程,是附屬于對象的行為和動作。在需要使用的時候可以直接調用。其調用格式為:
對象名.方法名方法
Access中除數據庫的7個對象外,還提供一個重要的對象:DoCmd對象除窗體、控件的SetFocus(獲得控制焦點)方法外,用得最多得是DoCmd對象的一些方法。使用這些方法,可以在VBA中運行Access的操作。Access中除數據庫的7個對象外,還提供一個重要的對打開當前數據庫中的“雇員”窗體
DoCmd.OpenForm"Employees"
在數據庫窗口中選擇“雇員”窗體DoCmd.SelectObjectacForm,"
Employees
",True在數據庫窗口中關閉“雇員”窗體
DoCmd.CloseacForm,“Employees”,acSaveYes刪除數據庫中的“雇員”表
DoCmd.DeleteObject"Employees"
DoCmd對象的常用方法(參照教材P190頁)打開當前數據庫中的“雇員”窗體DoCmd對象的常用方法(例8-1新建一個窗體并添加兩個命令按鈕,運行窗體后,單擊第一個按鈕,新式一個消息框;單擊第二個按鈕,退出當前窗體。(參照教材P191頁)
通過此例,體會可視化編程、面向對象、事件過程、應用方法等基本概念。例8-1新建一個窗體并添加兩個命令按鈕,運行窗體后,單擊第進入VBE編程環(huán)境VBE窗口的組成
VBE窗口由工具欄、工程資源管理器窗口、屬性窗口、代碼窗口和立即窗口組成。在VBE環(huán)境中編寫VBA代碼8-1-3VBA編程環(huán)境進入VBE編程環(huán)境8-1-3VBA編程環(huán)境標準工具條視圖MicrosoftAccess按鈕:切換Access2000窗口插入按鈕:插入模塊或過程運行子過程/用戶窗體按鈕:運行模塊中的程序中斷按鈕:中斷正在運行的程序重新設置按鈕:結束正在運行的程序設置模式按鈕:在設計模式和非設計模式之間切換工程資源管理器按鈕:用于打開工程資源管理器屬性窗口按鈕:用于打開屬性窗口對象瀏覽器按鈕:用于打開對象瀏覽器MicrosoftAccsee插入模塊運行子過程/用戶窗體設計模式中斷重新設計工程資源管理器對象瀏覽器屬性窗口標準工具條視圖MicrosoftAccess按鈕:切換A工程窗口-選擇對象屬性窗口-選擇對象的屬性代碼窗口選擇事件VBE編程環(huán)境工程窗口屬性窗口代碼窗口選擇事件VBE編程環(huán)境8-2-1常量、變量8-2VBA編程基礎常量:在程序運行中其存儲的值不會改變。變量:在程序運行中其值可以改變。VBA使用常量、變量來存儲值。用來保存在程序運行期間數據。8-2-1常量、變量8-2VBA編程基礎常量:在程序運行常量
在程序運行過程中,其值不會被改變的量稱為常量。在VBA中有三類常量:直接常量
如:10,20%,123.0,“AB”,“VBA程序設計”等
符號常量系統常量
指VBA系統預先定義好的,用戶可以直接引用的量。如:acForm,acQuery,vbOk,vbRed
常量符號常量
在程序中,某個常量多次被使用,則可以使用一個符號來代替該常量,這樣不僅在書寫上方便,而且有效地改進了程序的可讀性和可維護性。
VBA中使用關鍵字Const
聲明符號常量。其格式如下:
Const常量名[類型符號]=常數表達式如:
ConstPI#=3.1415926符號常量
變量是內存中的臨時單元,存放在程序執(zhí)行過程中產生的中間結果和最后輸出結果。
在程序中使用變量,就要給變量定義名稱及類型,即對變量進行聲明。變量變量是內存中的臨時單元,存放在程序執(zhí)行過程中產生的中
變量命名規(guī)則變量名必須以字母或漢字開頭,后可跟字母、漢字、數字或下劃線組成(不能含有小數點和空格),長度不超過255個字符的字符串;不能使用VBA中的關鍵字;VBA中不區(qū)分變量名的大小寫;變量名的最后一個字符可以是%、&、!、#、$等表示數據類型的聲明符。說明:常量名的命名規(guī)則與變量名的命名規(guī)則相同變量命名規(guī)則說明:常量名的命名規(guī)則與變量名的命名規(guī)則相同8-2-2數據類型與變量的聲明
在VBA中,數據類型用來決定變量可以保存何種數據。VBA支持多種數據類型,為用戶編程提供了方便。參照教材P196頁表8-1VBA的數據類型8-2-2數據類型與變量的聲明在VBA中,數據類型
VBA的數據類型數據類型類型聲明符存儲空間
取值范圍整型(Integer)%2-32768~32767長整型(Long)&4-2147483648~2147483647單精度浮點型(Single)!4負數:-3.402823E38~-1.401298E-45正數:1.401298E-45~3.402823E38雙精度浮點型(Double)#8負數:-1.79769313486232E308~-4.94065645841247E-324正數:4.94065645841247E-324~1.79769313486232E308貨幣型(Currency)@8-922337203685477.5808~922337203685477.5807日期型(Date)8100年1月1日~9999年12月31日字符型(String)$0字符~65400個字符字節(jié)型(Byte)10~255邏輯型(Boolean)2True或False對象型(Object)4任何引用的對象變體型(Variant)VBA的數據類型數據類型類型聲明符存儲空間取變量聲明用Dim|Static語句顯式聲明局部變量格式:Dim變量名[AS類型]
或Dim變量名類型符語句中的“As類型”子句是可選的。如果使用該子句,就可以定義變量的數據類型。未使用,默認變量的類型為變體型(Variant)。例如:DimiAsinteger,s
表示聲明了一個名為i的整型變量和一個名為s的變體型變量。變量聲明關鍵字Dim或Static的區(qū)別:Dim聲明:隨過程的調用而分配存貯單元,每次調用都對變量初始化;過程體結束,變量的內容自動消失,存儲單元釋放。Static聲明:Static聲明的變量,也稱為靜態(tài)變量。靜態(tài)變量在程序運行過程中一直保留其值,即每次調用過程,變量保持原來的值。
關鍵字Dim或Static的區(qū)別:隱式聲明變量
未進行上述的聲明而直接使用變量,稱變量的隱式聲明。采用隱式聲明的變量都是變體型(Variant)。
注意:
VBA中允許不事先聲明而直接使用變量,可以通過語句
OptionExplicit,來要求所使用的變量必須事先聲明,否則VBA會發(fā)出警告信息。隱式聲明變量下面是一個簡單的程序,其使用的變量a,b,Sum都沒有事先定義。PrivateSubForm_Click()
Sum=0
a=10
b=20Sum=a+bPrint"Sum=";SumEndSub
良好的編程習慣應該是“先聲明變量,后使用變量”,這樣做可以提高程序的效率,同時也使程序易于調試。VBA中可以強制顯式聲明,可以在窗體模塊、標準模塊和類模塊的通用聲明段中加入語句:OptionExplicit下面是一個簡單的程序,其使用的變量a,b,Sum都沒有事聲明而未賦值的變量的值為:數值型變量初始化為0;字符型變量為零長度字符串;變體型變量初始化為Empty。
變量的初始化聲明而未賦值的變量的值為:變量的初始化8-2-3運算符和表達式(教材P199頁)運算符算術運算符8-2-3運算符和表達式(教材P199頁)運算符例如:"123"+"456"
結果"123456"
"123"&"456"
結果"123456"
使用上&與+的區(qū)別:例如:"abcdef"&12345
結果為"abcdef12345"
"123"&456
結果為"123456"
"abcdef"+12345結果為出錯
"123"+456結果為579
連接運算符:&、+(字符串連接)例如:"123"+"456"結果"123456"
將兩個操作數進行大小比較,結果為邏輯值。
注意:字符串比較,則按字符的ASCII碼值從左到右一一比較,直到出現不同的字符為止。關系運算符將兩個操作數進行大小比較,結果為邏輯值。關系運算符將操作數進行邏輯運算,結果是邏輯值邏輯運算符將操作數進行邏輯運算,結果是邏輯值邏輯運算符組成由變量、常量、函數等運算對象加上運算符、圓括號組成的式子。書寫規(guī)則
(1)運算符不能相鄰。例a+-b是錯誤的。
(2)乘號不能省略。例x乘以y應寫成:x*y。
(3)括號必須成對出現,均使用圓括號。
(4)表達式從左到右在同一基準上書寫,無高低。運算優(yōu)先級算術運算符>連接運算符>關系運算符>邏輯運算表達式組成表達式例1:用人單位招聘秘書:年齡小于40歲的女性,學歷專科或本科,年齡<40,性別=“女”,(學歷=“??啤?,學歷=“本科”)
AndAndOr例2:算術表達式:正確的VBA表達式:3〈=xAndx<=7
錯誤的VBA表達式:3<=x<=7或
3<=xOrx<=7
考慮:若分別寫成:年齡<40And性別="女"And(學歷="???And學歷="本科")年齡<40Or性別="女"Or(學歷="???Or學歷="本科")例1:用人單位招聘秘書:年齡小于40歲的女性,學歷專科或本科
函數實際上是系統事先定義好的內部程序,用來完成特定的功能。VBA提供了大量的內部函數,供用戶在編程時使用。
函數的調用形式為:函數名(參數表)常用內部函數
參照教材P201頁表8-5常用內部函數,在立即窗口練習,體會函數的功能。8-2-4常用函數函數實際上是系統事先定義好的內部程序,用來完成特定的InputBox函數
InputBox(提示[,標題][,缺省])
其中:提示:提示信息;標題:對話框標題;缺?。狠斎雲^(qū)缺省值。
注意:函數的返回值為字符型數據。輸入、輸出函數InputBox函數輸入、輸出函數使用MsgBox,可以在對話框中顯示文本信息。格式為:
MsgBox(提示信息[,按鈕數目和類型][,標題])MsgBox函數或方法(用于顯示輸出信息)MsgBox函數:變量[%]=MsgBox(提示[,按鈕][,標題])MsgBox方法:MsgBox提示[,按鈕][,標題]使用MsgBox,可以在對話框中顯示文本信息。MsgBox函8-3VBA常用語句
VBA代碼不區(qū)分字母的大小寫
系統保留字自動轉換每個單詞的首字母大寫;
語句書寫自由一行可書寫幾句語句,之間用冒號(:)分隔;一句語句可分若干行書寫,用續(xù)行符將語句分開。8-3-1VBA語句書寫規(guī)則8-3VBA常用語句VBA代碼不區(qū)分字母的大小寫8-3賦值語句:給變量、常量或對象的屬性指定一個值或表達式。8-3-2VBA常用語句
格式:[LET]變量名=表達式
作用:將表達式的值賦值給變量名。一般用于給變量賦值或對控件設定屬性值。例如:s=10Text1.Text="歡迎使用VBA"注意:雖然賦值號與關系運算符等于號都用“=”表示,VBA會根據所處的位置自動判斷是何種意義的符號賦值語句:給變量、常量或對象的屬性指定8-3-2VBA常用聲明語句:命名和定義常量、變量、數組以及過程。注釋語句在程序中的適當位置加上注釋語句有利于程序的維護和閱讀。
格式:Rem注釋內容 或用單引號’注釋內容聲明語句:命名和定義常量、變量、數組以及過程。結構化程序設計由順序、分支、循環(huán)這3種基本結構所組成。語句組2語句組1TF語句組2條件語句組1
8-4VBA程序流程控制FT條件語句組TF條件語句組結構化程序設計由順序、分支、循環(huán)這3種基本結構所組成。語句組單行If語句格式:If表達式Then語句1[Else語句2]功能:If測試指定的條件,如果條件表達式為真(True),則執(zhí)行Then后面的語句1,否則執(zhí)行語句2(若Else子句未省略)。分支結構TF語句2條件語句1TF條件語句1單行If語句分支結構TF語句2條件語句1TF條件語句1PrivateSubp1()DimxAsInteger,yAsIntegerx=InputBox("請輸入x值")
Ifx>=0Theny=2*x+1MsgBox"y:"&yEndSubPrivateSubp1()DimxAsInteger,yAsIntegerx=InputBox(“請輸入x值”)
Ifx>=0Theny=2*x+1Elsey=1MsgBox"y:"&yEndSub根據輸入x的值,觀察y的輸出結果PrivateSubp1()PrivateSubp多行If語句格式:If表達式Then
語句組1[Else
語句組2]EndIf多行If語句多行If語句的執(zhí)行過程是:如果“表達式”的值為真,則執(zhí)行語句組1;否則執(zhí)行語句組2。當執(zhí)行完語句組1或語句組2后,程序流程跳轉到語句EndIf的后面。語句組可以由一條或多條語句組成,語句組不能與Then書寫在同一行,否則VBA認為是一個單行If語句,會導致Else沒有匹配的If。語句“EndIf”是多行If語句的結束標志。在多行If語句中,即使省略Else子句,也要寫該結束標志。省略Else子句時的多行If語句形式為:
If表達式Then
語句組
EndIf多行If語句的執(zhí)行過程是:如果“表達式”的值為真,則執(zhí)行語句
例:計算分段函數單行If語句實現:
Ifx=0Theny=cos(x)-x^3+3*xIfx<>0Theny=sin(x)+sqr(x*x+1)
多行If語句實現:Ifx<>0Theny=sin(x)+sqr(x*x+1)Elsey=cos(x)-x^3+3*xEndIf例:計算分段函數單行If語句實現:Ifx=0ThenIf語句的嵌套If語句的嵌套是指If或Else后面的語句塊中又包含If語句。
If<表達式1>Then
If<表達式11>Then…EndIf
…
EndIfIf語句的嵌套
例:已知x,y,z三個數,使得x>y>z
用一個IF語句和一個嵌套的IF語句實現Ifx<yThent=x:x=y:y=t
Ify<zThent=y:y=z:z=t
Ifx<yThent=x:x=y:y=tEndIf
EndIfIf語句的嵌套注意事項:書寫鋸齒型;If與EndIf配對例:已知x,y,z三個數,使得x>y>zIfx<yIf…Then…ElseIf語句(多分支結構)
If<表達式1>Then <語句塊1>ElseIf<表達式2>Then <語句塊2> …
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論