第四講 Excel vba 程序及常用語(yǔ)句
主 講:ggsmart(葉楓)
一、 SUB過程
1 什么是Sub 過程
就是通過代碼完成一個(gè)任務(wù)。
Vba 的過程主要包括“sub過程”和“function函數(shù)過程”兩種。
Sub過程運(yùn)行后不可反回值;function函數(shù)過程運(yùn)行后可以返回值。
2 聲明sub過程
l 錄制“宏”就是一個(gè)簡(jiǎn)單的sub過程。使用錄制宏功能只能生成sub過程的代碼。
l Sub 過程的特點(diǎn):
1) 以“sub過程名()”開頭,以“end sub”結(jié)束;
2) Sub 過程一般保存在模塊里;
3) 返回運(yùn)行結(jié)果。
3 Sub語(yǔ)句
[ public | private ] [static] sub 過程名稱
([參數(shù)1,參數(shù)2……])
[語(yǔ)句塊]
[Exit Sub]
[語(yǔ)句塊]
End sub
注釋:[public]公共過程,表面聲明的過程是一個(gè)公共過程。一個(gè)過程被聲明為公共過程之后,就表明該過程中所有模塊中其他過程都可以訪問這個(gè)過程。公共過程一般被省略。
[private]私有過程,表明這個(gè)過程聲明為私有過程。私有過程只能在同一模塊中被其他過程可以訪問。
[static]過程結(jié)束后將保存過程中的變量。
Sub過程是必須的,表明過程的存在。后面括號(hào)里的參數(shù)是一系列的變量,這些變量將接受傳遞到過程中的參數(shù)值,使用“’”分割參數(shù)。如果過程沒有參數(shù)就必須有一組空的括號(hào)。如我們錄制的宏就是沒有參數(shù)的sub過程。
[Exit sub]是在過程正式結(jié)束之前強(qiáng)制立即在過程中退出。
End sub必須選擇的語(yǔ)句,表示過程的結(jié)束。它與sub是一對(duì),再寫入sub過程回車后它自用產(chǎn)生。
例如:使用MsgBox對(duì)話框顯示提示文字“這是我的第一個(gè)VBA過程”
代碼:Sub mysub()
MsgBox "這是我的第一個(gè)VBA過程"
End Sub
例如:使用private過程顯示MsgBox對(duì)話框的提示文字“這是我的第一個(gè)私有過程語(yǔ)句”
代碼:Private Sub tset()
MsgBox "這是我的第一個(gè)私有過程語(yǔ)句"
End Sub
Sub 語(yǔ)句可以相互調(diào)用。調(diào)用的方法是只需在另一個(gè)程序代碼中輸入該過程的名稱。方法如下:
l 輸入過程名以及參數(shù),參數(shù)使用逗號(hào)隔開。
例如:Sub text()
mysub
技巧:點(diǎn)擊“工具”——宏——選擇“mysub”,這是就會(huì)調(diào)出第一個(gè)sub過程語(yǔ)句。
l 在過程名稱以及參數(shù)前使用Call 過程名[(參數(shù)1,參數(shù)2,…)]
例如:Sub text()
Call mysub
End Sub
l 利用Application對(duì)象的run方法
Application。Run表示過程名的字符串(或字符串變量)[,參數(shù)1,參數(shù)2…]
例如:Sub myapp()
Application.Run "mysub" ‘run之后是空格,表示過程名稱的字符串,字符串需要使用英文狀態(tài)下的雙引號(hào)括起來
Application.Run "tset"
End Sub
又例如:Sub myapp()
Dim a As String
a = "siyou"
Application.Run a
End Sub
公共模塊可以在其他模塊調(diào)用,私有模塊只能在本模塊里調(diào)用。
二、 判斷與循環(huán)語(yǔ)句
1. 順序結(jié)果語(yǔ)句:就是從上到下,有程序的第一行語(yǔ)句執(zhí)行到最后一行語(yǔ)句。如宏代碼。
2. 判斷分支語(yǔ)句:它是根據(jù)條件跳過部分語(yǔ)句執(zhí)行另一部分的語(yǔ)句。
3. 循環(huán)語(yǔ)句:就是循環(huán)執(zhí)行一段語(yǔ)句。
l IF語(yǔ)句
IF 邏輯表達(dá)式 Then
語(yǔ)句塊1
[Else 語(yǔ)句塊2]
End If
代碼1.
Sub 出題() '********生成新的題目
[d6].Value = Int(Rnd * 20)
[f6].Value = Int(Rnd * 20)
End Sub
Sub dt()
' If [h6].Value = [d6].Value + [f6].Value Then '***檢查是否答對(duì)
' MsgBox "答對(duì)了,你真棒!"
' End If
' If [h6].Value <> [d6].Value + [f6].Value Then '***檢查是否答對(duì)
' MsgBox "答錯(cuò)了,繼續(xù)努力!"
' End If
代碼2.
If [h6].Value = [d6].Value + [f6].Value Then '***檢查是否答對(duì)
MsgBox "答對(duì)了,你真棒!"
Else
MsgBox "答錯(cuò)了,繼續(xù)努力!"
End If
Call 出題 '調(diào)用過程,重新生成題目
l If 邏輯表達(dá)式1 Then
語(yǔ)句塊1
[ElseIf邏輯表達(dá)式2 Then
語(yǔ)句塊2
Elseif 邏輯表達(dá)式3 Then
語(yǔ)句塊3
……..
Else
語(yǔ)句塊n
End if
代碼3.
Sub test()
If [h6].Value = "" Then
MsgBox "還沒有輸入答案!"
ElseIf [h6].Value = [d6].Value + [f6].Value Then '***檢查是否答對(duì)
MsgBox "答對(duì)了,你真棒!"
Else
MsgBox "答錯(cuò)了,繼續(xù)努力!"
End If
Call 出題
End Sub
l Select case 語(yǔ)句
If 語(yǔ)句一般是可以嵌套的,他只有二元判斷。如果需要在三種或更多判斷語(yǔ)句上,一般使用select case 語(yǔ)句。
l Select case 語(yǔ)句測(cè)試表達(dá)試
Case 表達(dá)式列表1
語(yǔ)句塊1
Case 表達(dá)式列表2
語(yǔ)句塊2
Case 表達(dá)式列表3
語(yǔ)句塊3
………..
Case 表達(dá)式列表n
語(yǔ)句塊n
Case Else
語(yǔ)句塊 n+1
End select
1. 測(cè)試表達(dá)式必須為數(shù)值表達(dá)式或字符串表達(dá)式,
2. 表達(dá)式列表可以是用逗號(hào)隔開的表達(dá)式,也可以使用 TO 或IS 關(guān)鍵字。如:
l Case1,2,3,4
l Case 1 to 4
l Case is<4
3. case語(yǔ)句后面可以使用多重表達(dá)式,各表達(dá)式的數(shù)據(jù)類型可以不相同,他們之間是“邏輯表達(dá)式”的關(guān)系。如:case 1 to4,”4”
實(shí)例2.
代碼1. Sub sl1()
Select Case [h6].Value
Case ""
MsgBox "還沒有輸入答案。"
Case [d6].Value + [f6].Value
MsgBox "答對(duì)了,真棒!"
Case Else
MsgBox "答錯(cuò)了,請(qǐng)繼續(xù)努力!"
End Select
Call 出題 '********重新出題
End Sub
代碼:Sub 等sl級(jí)()
Dim dj As String
Select Case [d3].Value
Case Is >= 90
dj = "A"
Case Is >= 80
dj = "B"
Case Is >= 60
dj = "C"
Case Is >= 20
dj = "D"
Case Else
dj = "E"
End Select
[e3].Value = dj
End Sub
l FOR 循環(huán)語(yǔ)句
For —next 循環(huán)語(yǔ)句
For 循環(huán)變量 = 初值 To 終值 [ spet 步長(zhǎng)]
循環(huán)體
[Exit For]
循環(huán)體
代碼:Sub sum1to100()
Dim mysum As Long, i As Integer
For i = 1 To 100 Step 1
mysum = mysum + i
Debug.Print I ‘ 這個(gè)語(yǔ)句的作用是將I的傳遞輸入到立即窗口
Next i
MsgBox "1到100的自然數(shù)和是:" & mysum
End Sub
實(shí)例4.
Sub 等級(jí)for()
Dim dj As String, i As Integer
For i = 14 To 157 Step 1
Select Case Cells(i, "D").Value
Case Is >= 90
dj = "A"
Case Is >= 80
dj = "B"
Case Is >= 60
dj = "C"
Case Is >= 20
dj = "D"
Case Else
dj = "E"
End Select
Cells(i, "E").Value = dj
Next i
End Sub
l For Each —Next 循環(huán)語(yǔ)句
For each 元素變量 In 對(duì)象集合
語(yǔ)句塊
[Exit for]
語(yǔ)句塊
Next [元素變量]
實(shí)例5. Sub 等級(jí)each()
Dim dj As String, rng As Range
For Each rng In Range("d14:d143")
Select Case rng.Value
Case Is >= 90
dj = "A"
Case Is >= 80
dj = "B"
Case Is >= 60
dj = "C"
Case Is >= 20
dj = "D"
Case Else
dj = "E"
End Select
rng.Offset(0, 1).Value = dj
Next rng
End Sub
實(shí)例6. Sub ll()
Dim dj As String, i As Integer
For i = 14 To 143
Select Case Cells(i, "D").Value
Case Is >= 90
dj = "A"
Case Is >= 80
dj = "B"
Case Is >= 60
dj = "C"
Case Is >= 20
dj = "D"
Case Else
dj = "E"
End Select
Cells(i, "E").Value = dj
Next i
End sub
l Do [while]循環(huán)語(yǔ)句
1.開頭判斷循環(huán)條件
Do [while循環(huán)條件]
循環(huán)體
[exit do]
循環(huán)體
Loop
2.結(jié)尾循環(huán)判斷條件
Do
循環(huán)體
[eixt do]
循環(huán)體
Loop [while循環(huán)條件]
l 1. 開頭判斷循環(huán)體 2.結(jié)尾判斷循環(huán)體
DO UNTIL循環(huán)語(yǔ)句 DO
DO [until循環(huán)條件] 循環(huán)體
循環(huán)體 [Exit do]
[Exit do] 循環(huán)體
循環(huán)體 loop [until循環(huán)語(yǔ)句]
LOOP
Sub 等級(jí)do()
Dim dj As String, i As Integer
i = 3
Do While Cells(i, "D") <> ""
Select Case Cells(i, "D").Value
Case Is >= 90
dj = "A"
Case Is >= 80
dj = "B"
Case Is >= 60
dj = "C"
Case Is >= 20
dj = "D"
Case Else
dj = "E"
End Select
Cells(i, "E").Value = dj
i = i + 1
Loop ' 返回語(yǔ)句
End Sub
聯(lián)系客服