簡(jiǎn)明Excel VBA
本文集同步于GitHub倉(cāng)庫(kù):# bluetata/concise-excel-vba
1.5 語(yǔ)句結(jié)構(gòu)
程序通常都是順序依次執(zhí)行的。語(yǔ)句結(jié)構(gòu)用來(lái)控制程序執(zhí)行的步驟,
一般有選擇語(yǔ)句翩剪、循環(huán)語(yǔ)句。
1.5.1 選擇語(yǔ)句
選擇語(yǔ)句用來(lái)判斷程序執(zhí)行那一部分代碼
語(yǔ)法:If ... Then ... End If</br>
If選擇可以嵌套使用</br>
常用的三種形式:
- 普通模式
If 10 > 3 Then
操作1 ' 執(zhí)行這一步
End If
' 增加Else和Else If邏輯
If 1 > 2 Then
操作1
ElseIf 1 = 2 Then
操作2
Else
操作3 ' 執(zhí)行這一步
End If
- 嵌套If語(yǔ)句
If 10 > 3 Then
If 1 > 2 Then
操作1
Else
操作2 ' 執(zhí)行這一步
End If
Else
操作3
End If
- Select ... Case ... 多選一饶氏,類似于java中的 Switch ... Case ... 語(yǔ)句
Dim Length As Integer
Length = 10
Select Length
Case Is >= 8
操作1 ' 執(zhí)行這一步
Case Is > 20
操作2
Case Else
操作3
End Select
sample code:
Private Sub switch_demo_Click()
Dim MyVar As Integer
MyVar = 1
Select Case MyVar
Case 1
Debug.Print "The Number is the Least Composite Number"
Case 2
Debug.Print "The Number is the only Even Prime Number"
Case 3
Debug.Print "The Number is the Least Odd Prime Number"
Case Else
Debug.Print "Unknown Number"
End Select
End Sub
1.5.2 循環(huán)語(yǔ)句
循環(huán)語(yǔ)句用來(lái)讓程序重復(fù)執(zhí)行某段代碼
- 普通For ... Next循環(huán)</br>
語(yǔ)法:For 循環(huán)變量 = 初始值 To 終值 Step 步長(zhǎng)</br>
注:在VBA循環(huán)中可以使用Exit
關(guān)鍵字來(lái)跳出循環(huán),類似于Java中的break有勾,
在for循環(huán)中語(yǔ)法為:Exit For
疹启,在do while循環(huán)中為:Exit Do
,也可以利用GoTo
語(yǔ)句
跳出本次循環(huán)蔼卡,詳見(jiàn):1.5.3 GoTo語(yǔ)句</br>
Dim i As Integer
For i = 1 To 10 Step 2 ' 設(shè)定i從1到10喊崖,每次增加2,總共執(zhí)行5次
操作1 ' 可以通過(guò)設(shè)定 Exit For 退出循環(huán)
Next i
- For Each ... 循環(huán)</br>
語(yǔ)法:For Each 變量 In 集合或數(shù)組
Dim arr
Dim i As Integer
arr = Array(1, 2, 3, 4, 5)
For Each i In arr ' 定義變量i雇逞,遍歷arr數(shù)組
操作1
Next i
- Do ... While循環(huán)</br>
語(yǔ)法:</br>
-
前置循環(huán)條件:</br>
-
后置循環(huán)條件:</br>
Sample code:
Dim i As Integer
i = 1
Do While i < 5 ' 循環(huán)5次
i = i + 1
Loop
' ===============================================
' 將判斷條件后置的Do...While
Dim i As Integer
i = 1
Do
i = i + 1
Loop While i < 5 ' 循環(huán)4次
- Do Until 直到...循環(huán)</br>
語(yǔ)法:</br>
Do Until 表達(dá)式 表達(dá)式為真時(shí)跳出循環(huán)
Dim i As Integer
i = 5
Do Until i < 1
i = i - 1
Loop
' ===============================================
' 后置的Do Until
Dim i As Integer
i = 5
Do
i = i - 1
Loop Until i < 1
<a name="1.5.3"></a>
1.5.3 GoTo語(yǔ)句
GoTo
無(wú)條件地分支直接跳轉(zhuǎn)到過(guò)程中指定的行荤懂。
注: GoTo語(yǔ)句大多用于錯(cuò)誤處理時(shí),但會(huì)影響程序結(jié)構(gòu)塘砸,增加閱讀和代碼調(diào)試難度节仿,
除非必要時(shí),應(yīng)盡量避免使用GoTo語(yǔ)句掉蔬。
Sub TestGoTo
Dim lngSum As Long, i As Integer
i = 1
JUMPX:
i = i + 1
If i <= 100 Then GoTo JUMPX
Debug.Print "1到100的自然數(shù)之和是:" & lngSum
End Sub
CONTINUE
循環(huán)中實(shí)現(xiàn)continue操作廊宪,類似java語(yǔ)言的continue直接跳出本次循環(huán)
Sub continueTest()
Dim i
For i = 0 To 5
If i = 1 Then
'// 跳轉(zhuǎn)到CONTINUE部分
GoTo CONTINUE
ElseIf i = 3 Then
'// 跳轉(zhuǎn)到CONTINUE部分
GoTo CONTINUE
End If
'//沒(méi)有GoTo語(yǔ)句的時(shí)候打印counter: i
Debug.Print i
CONTINUE: '// countinue跳轉(zhuǎn)塊矾瘾,可以寫邏輯,如果沒(méi)有邏輯就直接進(jìn)行下次循環(huán)
Next
End Sub
選擇
和循環(huán)
提供了多種實(shí)現(xiàn)同一目的的語(yǔ)句結(jié)構(gòu)箭启,他們都能實(shí)現(xiàn)同樣的作用壕翩,
差別一般是初始條件。還有書(shū)寫的復(fù)雜度册烈。正確的選擇要使用的語(yǔ)句結(jié)構(gòu)戈泼,
代碼邏輯上會(huì)更清楚婿禽,方便人的閱讀赏僧。
簡(jiǎn)寫
在操作對(duì)象的屬性時(shí)常常要先把對(duì)象調(diào)用路徑都寫出來(lái),用with
可以簡(jiǎn)化這一操作
' 簡(jiǎn)化前
WorkSheets("表1").Range("A1").Font.Name="仿宋"
WorkSheets("表1").Range("A1").Font.Size=12
WorkSheets("表1").Range("A1").Font.ColorIndex=3
' 使用`With`
With WorkSheets("表1").Range("A1").Font
.Name = "仿宋"
.Size = 12
.ColorIndex =3
End With