EcelVBA語法基礎_第1頁
EcelVBA語法基礎_第2頁
EcelVBA語法基礎_第3頁
EcelVBA語法基礎_第4頁
EcelVBA語法基礎_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第2章 VBA語法基礎和其他編程語言類似,VBA程序代碼也是有基礎語句組成的。在本章中,將結(jié)合具體 的例子來介紹VBA語法的基礎內(nèi)容。主要包括輸入、輸出語句、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)等。 在講解各例子的時候,將詳細分析例子的應用范圍。2.1 輸入和輸出語句在本小節(jié)中,將詳細講解最基礎的語法結(jié)構(gòu):順序結(jié)構(gòu)。順序結(jié)構(gòu)不需要使用特殊的 控制語句,編輯工具按照用戶編寫的程序語句依次編譯,依次執(zhí)行。本小節(jié)中,將詳細講 解最基礎的順序語句:輸入和輸出語句。案例8輸出數(shù)據(jù)表1功能說明在Excel VBA中,用戶可以使用Print方法輸入各種類型的數(shù)據(jù)。同時,用戶可以在 程序代碼中設置不同的輸出,來檢測程序代碼。2

2、. 語法說明在Excel VBA中,Print方法組要應用于Debug對象,其語法格式如下:Debug .P rint outputliSt參數(shù)outputlist表示需要打印的表達式或列表。如果省略參數(shù),則打印空白行。 Print方 法先計算表達式的數(shù)值,然后輸出結(jié)果。在outputlist參數(shù)中還可以使用分隔符,格式化 輸出的結(jié)果,分隔符有以下幾種:? Spc(n):插入n個空格到輸出數(shù)據(jù)之間;? Tab(n):移動光標到適當位置,n為移動的列數(shù);? 分號:表示前后兩個數(shù)據(jù)項連在一起輸出;? 逗號:以14個字符為一個輸出區(qū),每個數(shù)據(jù)輸出到對應的輸出區(qū)。3案例說明本例使用Print方法向VB

3、E的立即窗口中輸出數(shù)據(jù)表。4編寫代碼輸出數(shù)據(jù)表的代碼如下:Sub GetNumbersODim i As IntegerDim j As IntegerFori = 1 To 5For j = 1 To iDebug. Print i; "+" j; "=" i + j;"NextDebug. PrintNextEnd Sub5. 運行結(jié)果F5”運行子過程,在“立即窗口”輸出數(shù)據(jù)計算表,如圖 2.1所示。按功能鍵“I ” q 5456 1圖2.1輸岀結(jié)果6.程序分析在上面的程序代碼中,利用循環(huán)結(jié)構(gòu)依次輸出不同情況的數(shù)字計算結(jié)果。關于循環(huán)結(jié) 構(gòu)的

4、知識,將在后面章節(jié)中詳細講解。案例9輸入用戶名1. 功能說明在Excel VBA開發(fā)過程中,經(jīng)常需要和用戶進行交互。例如,很多程序代碼的結(jié)果依 賴于用戶輸入的信息。這個時候,用戶需要調(diào)用輸入函數(shù),提供用戶輸入信息,并接收用 戶所輸入的信息。2. 語法說明在Excel VBA中,用戶可以使用InputBox函數(shù)輸入信息。該函數(shù)將打開對話框,用 戶可以在對話框中輸入數(shù)據(jù),并返回所輸入的內(nèi)容。其語法格式如下:I Inpu tBox (promp t, title , default , xpo s , yp os , help file, context)各參數(shù)的含義如下:Prompt:對話框消息出

5、現(xiàn)的字符串表達式。最大長度為1024個字符。如果需要在對話框中顯示多行數(shù)據(jù),則可在各行之間用回車符換行符來分隔。Title :對話框標題欄中的字符串。如果省略該參數(shù),則把應用程序名放入標題欄中。Default :顯示在文本框中的字符串。如果省略該參數(shù),則文本框為空。? Xpos:和Ypos成對出現(xiàn),指定對話框的左邊與屏幕左邊的水平距離。如果省略該參 數(shù),則對話框會在水平方向居中。? Ypos:和Xpos成對出現(xiàn),指定對話框的上邊與屏幕上邊的距離。如果省略該參數(shù), 則對話框被放置在屏幕垂直方向距下邊大約三分之一的位置。?Help file :設置對話框的幫助文件,可省略。?Context :設置

6、對話框的幫助主題編號,可省略。3. 案例說明在本例中,將演示使用InputBox函數(shù)對話框輸入信息,然后將信息輸出到立即窗口中。4. 編寫代碼在模塊中輸入以下代碼:Sub CetUserNameODim Title As StringDim Name As StringDim StrName As StringTitle ="輸入用戶名-Name ="在選框中輸入用戶名:-StrName = Inpu tBox(Name, Title)Debug.Print"用戶名:"StrNameEnd Sub5. 運行結(jié)果2.2所示。在(1) 按功能鍵“ F5”運行

7、子過程,將彈出“輸入個人信息”窗口,如圖 對話框中輸入內(nèi)容后單擊“確定”按鈕。2.3所示。(2) 在“立即窗口”中將輸出這些內(nèi)容,如圖圖2.2輸入用戶名1唧”11jJj圖2.3輸岀結(jié)果06. 程序分析本案例比較簡單,直接使用InputBox函數(shù)來輸入信息。對于InputBox函數(shù)的其他參 數(shù),都直接使用默認數(shù)值。在實際開發(fā)中,用戶可以設置這些參數(shù)的數(shù)值,實現(xiàn)不同的功 能案例10事件確認1. 功能說明在Excel VBA編碼和調(diào)試代碼的過程中,經(jīng)常需要獲取代碼運行的階段性結(jié)果或者信 息。例如,在編寫數(shù)據(jù)處理的代碼中,用戶需要跟蹤某變量的數(shù)值變化。因此,需要在程 序進行的不同地方,顯示該變量的數(shù)值

8、。2. 語法說明在Excel VBA中,用戶可以使用MsgBox函數(shù)來顯示提示信息。MsgBox函數(shù)可打開 對話框,顯示提示信息。并根據(jù)用戶選擇對話框中的按鈕,執(zhí)行不同的程序代碼。其語法 格式如下:I Value=MsgBox (promp t,buttons,title ,he Ip)通過函數(shù)返回值可獲得用戶單擊的按鈕,并可根據(jù)按鈕數(shù)值而選擇程序段來執(zhí)行。函 數(shù)有5個參數(shù),各參數(shù)的意義與Inputbox函數(shù)參數(shù)的意義類似。對于buttons參數(shù),其含義是指定顯示按鈕的數(shù)目及形式、使用提示圖標樣式以及默 認按鈕等。其常數(shù)值如表2.1所示。表2.1按鈕常數(shù)值常量值說明vbOkOnly0只顯示“確

9、定”(Ok)按鈕vbOkCancel1顯示“確定”(Ok)及“取消”(Cancel)按鈕vbAbortRetryIgnore2顯示“異常終止”(Abort)、“重試”(Retry)及“忽略”(Ignore)按鈕vbYesNoCancel3顯示“是”(Yes)、“否”(No)及“取消”(Cancel)按鈕vbYesNo4顯示“是”(Yes)及“否”(No)按鈕vbRetryCancel5顯示“重試”(Retry)及“取消”(Cancel)按鈕vbCritical16顯示 Critical Message 圖標vbQuestion32顯示 Warning Query圖標vbExclamation4

10、8顯示 Warning Message 圖標vbInformation64顯示 Information Message 圖標vbDefaultButton10以第一個按鈕為默認按鈕I釧vbDefaultButton2256以第二個按鈕為默認按鈕仇vbDefaultButton3512以第三個按鈕為默認按鈕-亍vbDefaultButton4768以第四個按鈕為默認按鈕vbA pp licationModal0進入該消息框,當前應用程序暫停vbSystemModal4096進入該消息框,所有應用程序暫停表2.1中的數(shù)值(或常數(shù))可分為四組,其作用分別為: 第一組值(05 ):確定對話框中按鈕的類

11、型與數(shù)量。6? 第二組值(16,32,48,64):確定對話框中顯示的圖標。? 第三組值(0 , 256,512):設置對話框的默認活動按鈕。? 第四組值(0 , 4096):確定消息框的強制響應性。buttons參數(shù)由上面4組數(shù)值組成,其組成方法是:從每一類中選擇一個值,把這些數(shù) 值組合起來,就是buttons參數(shù)的值。3案例說明本例的主要功能是當用戶激活工作表 Sheetl時,Excel顯示激活的信息。4編寫代碼(1) 進入VBE,在代碼窗口左上方的對象列表中選擇“ Worksheet",如圖2.4所示。(2) 在代碼窗口右上方的事件列表中選擇“ Activate ”,如圖2.5

12、所示。Wik ii圖2.4對象列表(3)在上面生成的事件過程中輸入以下代碼:P rivate Sub Worksheet_Activate()MsgBox ("你激活了 Sheet1工作表!")End Sub5.運行結(jié)果打開工作薄,然后選擇Sheet1工作表,結(jié)果如圖2.6所示。 F " I ha ZbpI dLC.Tr: 'I'-B H TrfciK«-«._rtrRaT" 0 ln±蛀*3 卩 Miruq+J'qriv ri-Achi-n-l-k圖2.5事件列表r -丿”-:;后 曲' r

13、a; I L.r 尋 s* =£ 嚴二::査 « 戸D16-上 l CK-HXB-E-hT 4 b ! Jlut t 1Jitt: J 一 !* _ f.列=I ujW丄百二1亠創(chuàng)瑪邛圖2.6顯示的提示信息6. 程序分析在本例中,使用的是MsgBox函數(shù)的最簡單形式,也就是直接使用 MsgBox函數(shù)顯示 一個字符串信息。在實際開發(fā)中,用戶可以設置各參數(shù),得到不同的顯示結(jié)果。2.2 選擇結(jié)構(gòu)在Excel VBA中,除了常見的順序結(jié)構(gòu)之外,還有一種常見結(jié)構(gòu):選擇結(jié)構(gòu)。選擇結(jié) 構(gòu)的程序?qū)⒏鶕?jù)給定的條件選擇執(zhí)行后續(xù)的代碼。選擇結(jié)構(gòu)在日常生活中應用十分廣泛, 在本小節(jié)將結(jié)合具體的例子

14、來講解如何使用選擇結(jié)構(gòu)。案例11判斷優(yōu)秀員工1. 功能說明在實際開發(fā)中,當用戶只需要進行一種情況的判斷時,最方便的方法是IfThen語句。If后面的語句就是判斷的條件,Then后面的語句是需要執(zhí)行的操作。2. 語法說明在Excel VBA中,使用If.Then語句可有條件地執(zhí)行語句。其語法格式如下:If邏輯表達式Then 語句 語句 語句End If圖2.7 If -Then語句流程圖邏輯表達式可以是計算數(shù)值的表達式,VBA將為0看作為False,而非零數(shù)值都被看 作True。該語句的執(zhí)行順序是:當邏輯表達式的值是 True,貝U執(zhí)行位于Then與End If之 間的語句;當邏輯表達式的值是F

15、alse,則不執(zhí)行Then與End If之間的語句,直接跳出循 環(huán)結(jié)構(gòu),其流程圖如圖IfThen結(jié)構(gòu)還有單行結(jié)構(gòu)條件語句。其語法格式如下:I If邏輯表達式 Then_語句該語句的功能為:當邏輯表達式的值是 True,貝U執(zhí)行Then后的語句;當邏輯表達式 的值是False,則不執(zhí)行Then后的語句。3. 案例說明某公司統(tǒng)計了員工上個月的銷量,根據(jù)銷量數(shù)值,公司判定銷量數(shù)值大于350的員工2.8所示。為優(yōu)秀員工。對于優(yōu)秀員工將其對應的單元格標紅,原始數(shù)據(jù)如圖圖2.8原始數(shù)據(jù)4. 編寫代碼判斷優(yōu)秀員工的代碼如下:Sub ShowExcel()Dim i As IntegerFor i = 2 T

16、o 10If Sheets(1).Cells(i, 2).Value > 350 Then Cells(i, 2).lnterior.Colorlndex = 3End IfNextEnd Sub5. 運行結(jié)果打開工作薄,然后運行程序代碼,結(jié)果如圖2.9所示。Eli-、AlIt.ic£.:1aCr:t1陽JC r*12435E懇13爪s.stnsp:?京三黑i霸-尋ao:3611W ” 二 W .竺fli : 嚴丄 £ U圖2.9運行結(jié)果6. 程序分析lf.The n語句可1時,執(zhí)行第一從上面案例的結(jié)果中可以看出,當程序處理的只有一個條件時,使用 以很便利的解決問題。

17、案例12根據(jù)編號分組1. 功能說明當用戶在實際開發(fā)時,經(jīng)常需要進行多條件判斷。例如,當滿足條件 種操作;當不滿足條件1時,執(zhí)行另外一種操作。當用戶需要編寫這些類型的代碼時,前 面案例中的IfThen語句將無法滿足,用戶需要使用If . . ThenElse語句。2.語法 說明在Excel VBA中,用戶可以使用If . . ThenElse語句,根據(jù)條件是否成立分別執(zhí)行 兩段不同的代碼,其語法格式如下:If邏輯表達式Then語句序列1Else語句序列2End If該語句的執(zhí)行過程是:當邏輯表達式的值是 True時,將執(zhí)行“語句序列1”中的各條 語句;當“邏輯表達式”的值為False時,就執(zhí)行“

18、語句序列2”中的各條語句,其流程圖 如圖2.10所示。<語句序列41T圖2.10 If Then Else語句流程圖3.案例說明p某公司統(tǒng)計了員工上個月的銷量,公司需要根據(jù)員工編號判斷員工的組別。當編號是弭衣仏工I 偶數(shù)的時候,員工屬于女組;當編號是奇數(shù)時,員工屬于男組,原始數(shù)據(jù)如圖2.11所示。真4. 編寫代碼分組的程序代碼如下:Sub ShowTeam()Dim i As IntegerFor i = 2 To 10If Sheets(1).Cells(i, 1).Value Mod 2 Then Cells(i, 3).Value ="男組"ElseCells(

19、i, 3).Value ="女組"End IfNextEnd Sub5. 運行結(jié)果打開工作薄,運行程序代碼,得到的結(jié)果如圖2.12所示。應 W首喬I五 1* 百 I-圖2.12運行結(jié)果JT"ar6. 程序分析從上面的典型例子中可以看出,當在實際情況中需要根據(jù)某條件執(zhí)行兩種不同的操作 時,可以使用If. ThenElse語句便利的完成任務。案例13計算消費金額1. 功能說明在實際開發(fā)中,用戶可能需要處理多條件問題。例如,某公司根據(jù)多個銷量,將折扣 分為多個檔次。在計算銷售金額的時候,需要判斷具體銷售屬于哪個檔次,然后根據(jù)該檔 次的折扣值,計算銷售金額。這個時候,用戶

20、可以使用 Select Case語句。2. 語法說明在Excel VBA 中,Select Case結(jié)構(gòu)的語法格式如下:Select Case 測試表達式Case表達式列表1語句序列1Case表達式列表2語句序列2Case Else語句序列nEnd Select根據(jù)上面的程序結(jié)構(gòu),代碼首先計算“測試表達式”的值,然后將表達式的值與結(jié)構(gòu) 中的Case的值進行比較。如果相等,就執(zhí)行與該Case語句下面的語句塊,執(zhí)行完畢再跳轉(zhuǎn)到End Select語句后執(zhí)行,其流程圖如圖2.13所示。圖2.13 Select Case語句流程圖在Select Case結(jié)構(gòu)中,“測試表達式”通常是數(shù)值或字符型的變量。

21、“表達式列表”可 以是一個或幾個值的列表。如果在列表中有多個值,需要用逗號將各值分開。表達式列表 可以分下面幾種情況:? 表達式:表示具體的取值。例:例,Case 8h.Io 12, 17, ls>35。1表達式:表示范語句序例,2 I Case-Is>45 表示所有列大于 45的值。 5混測試表達式Case 5,8,9。"? 表達式A To表達式B:表示數(shù)據(jù)范圍。例,"Cases To 12 表示812之間的值。? Is比較運算符 一 一 ?以上三種情況的混合;3. 案例說明某銷售公司根據(jù)商品的銷量實行不同的折扣,公司需要根據(jù)銷量和價格,計算其銷量 的總額,其

22、中原始數(shù)據(jù)如圖2.14所示。丄'亡芒.:,.Tj二? SS St時S亍蛤-r T 帀h i-li1前爺E壯乍1iooC!IS占MlA);oo河2Diao1弓1射曲100細 1a56591廣11 wr W) IE圖2.14原始數(shù)據(jù)4. 編寫代碼計算銷量金額的代碼如下:I Sub GetIncomeODim IntSale As IntegerDim discount As SingleDim SingleMoney As SingleDim i As IntegerDim Int Pric As IntegerFor i = 2 To 10Int Pric = Cells(i, 1).V

23、alueIntSale = Cells(i, 2).ValueSelect Case IntSaleCase Is <= 100discount = 0.95Case Is <= 150discount = 0.85Case Is <= 200discount = 0.7Case Is <= 300discount = 0.65Case Elsediscount = 0.6End SelectSingleMoney = IntSale * Int Pric * discountCells(i, 3).Value = SingleMoneyNext iEnd Sub5.

24、運行結(jié)果打開工作薄,運行程序代碼,得到的結(jié)果如圖2.15所示。EL2is,is2Cjt'D15DICOC . - _dM25回5岡7.廠嗣Lt 12.5 '壬釘°WQ 矗'TJj'圖2.15計算所銷售金額 16. 程序分析用戶可以使用If. ThenElseif結(jié)構(gòu)來重新編寫上面的案例,然后和 Select Case結(jié) 構(gòu)進行比較,可以發(fā)現(xiàn)Select Case結(jié)構(gòu)在處理多條件的情況下,要簡潔很多。2.3 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是Excel VBA中經(jīng)常使用的一種程序結(jié)構(gòu),當用戶需要使用程序代碼反復完 成同一任務的時候,則需要使用循環(huán)結(jié)構(gòu)。在本小節(jié)中,將結(jié)合

25、具體例子來講解如何使用 循環(huán)結(jié)構(gòu)。案例14計算自然數(shù)之和1. 功能說明當用戶在進行循環(huán)運算的時候,有時可能了解具體循環(huán)的次數(shù)。這個時候可以使用 ForNext循環(huán)語句依次完成循環(huán)運算。其中,最典型的例子就是計算自然數(shù)的總和。當 用戶需要計算自然數(shù)之和時,循環(huán)次序已經(jīng)由自然數(shù)的大小決定。2. 語法說明在Excel VBA中,如果知道循環(huán)的次數(shù),可以使用ForNext循環(huán)語句來執(zhí)行循環(huán)。 For循環(huán)的語法如下:For循環(huán)變量=初始值To終值Step步長值語句序列1Exit For語句序列2Next 循環(huán)變量在上面的結(jié)構(gòu)中,循環(huán)變量控制循環(huán),每重復一次循環(huán)之后,循環(huán)變量的值將以步長 值相加。步長的默

26、認數(shù)值是1,并且可正可負。如果步長值為正,則初始值必須小于等于 終值,才執(zhí)行循環(huán)體。如果步長值為負,則初始值必須大于等于終值,才能執(zhí)行循環(huán)體。 ForNext 循環(huán)結(jié)構(gòu)的流程圖如圖 2.16 所示 。3案例說明根據(jù)循環(huán)結(jié)構(gòu)計算1+2+3+- + 1000的數(shù)值。4. 編寫代碼計算自然數(shù)之和程序代碼如下:Sub GetSumsODim clock As IntegerDim sum As LongDim counter As Integer clock = 1sum = 0counter = 1For counter = 1 To 1000sum = sum + clockclock = clo

27、ck + 1NextMsgBox "1+2+3+.+1000 = " & sum, vbOKOnly,"計算自然數(shù)之和"End Sub5. 運行結(jié)果運行程序代碼,結(jié)果如圖2.17所示。圖2.17運行結(jié)果6. 程序分析從上面的結(jié)果中可以看出,由于用戶計算的是自然數(shù)之和。所以,在代碼中不需要設 置參數(shù)Step的數(shù)值。案例15為單元格賦值1. 功能說明在Excel中,由一種特殊的循環(huán)。在其循環(huán)結(jié)構(gòu)中,其循環(huán)運算的范圍是一個區(qū)域。 例如,用戶需要在某工作表的單元格區(qū)域中進行循環(huán)。這個時候,用戶可以使用For Each Next循環(huán)語句。2. 語法說明在E

28、xcel VBA 中,F(xiàn)or EachNext循環(huán)語句的語法格式如下:For Each元素In對象集合語句序列1Exit For語句序列2Next該循環(huán)結(jié)構(gòu)可在對象集合每個元素中執(zhí)行循環(huán)體。集合中必須至少有一個元素,才會 進入For Each循環(huán)體。循環(huán)結(jié)構(gòu)先對“對象集合”中的第一個元素執(zhí)行循環(huán)語句,然后對 “對象集合”其他的元素執(zhí)行循環(huán)語句,當“對象集合”中的所有元素都執(zhí)行結(jié)束,會退 出循環(huán)。在循環(huán)體中,用戶可以設置多個 Exit For語句,退出循環(huán)。3. 案例說明本例的主要功能是利用循環(huán)結(jié)構(gòu)為單元格區(qū)域賦值。4. 編寫代碼為單元格賦值的程序代碼如下:Sub GetValues()Dim

29、counter As IntegerDim rng As RangeWorksheets("sheet1").ActivateFor Each rng In Range("A1:E10")rng.Value = countercounter = counter + 1NextEnd Sub結(jié)果如圖2.18所示。5. 運行結(jié)果運行程序代碼,ifTXinFE12145?g11L2li1*馬口IS777576f / *it32討AS3*料414i斗61:1Fp 稅". asF- Tit 峻I屮-it rl 圖2.18為單元格區(qū)域賦值T s6.程序分析從上面例子的結(jié)果中可以看出,循環(huán)結(jié)構(gòu)首先填充第一行單元格的

溫馨提示

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

評論

0/150

提交評論