简明Excel VBA
本文集同步于GitHub仓库:# Youchien/concise-excel-vba
1.5 语句结构
程序通常都是顺序依次执行的。语句结构用来控制程序执行的步骤,
一般有选择语句、循环语句。
1.5.1 选择语句
选择语句用来判断程序执行那一部分代码
语法:If ... Then ... End If</br>
If选择可以嵌套使用</br>
常用的三种形式:
- 普通模式
If 10 > 3 Then
操作1 ' 执行这一步
End If
' 增加Else和Else If逻辑
If 1 > 2 Then
操作1
ElseIf 1 = 2 Then
操作2
Else
操作3 ' 执行这一步
End If
- 嵌套If语句
If 10 > 3 Then
If 1 > 2 Then
操作1
Else
操作2 ' 执行这一步
End If
Else
操作3
End If
- Select ... Case ... 多选一,类似于java中的 Switch ... Case ... 语句
Dim Length As Integer
Length = 10
Select Length
Case Is >= 8
操作1 ' 执行这一步
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 循环语句
循环语句用来让程序重复执行某段代码
- 普通For ... Next循环</br>
语法:For 循环变量 = 初始值 To 终值 Step 步长</br>
注:在VBA循环中可以使用Exit
关键字来跳出循环,类似于Java中的break,
在for循环中语法为:Exit For
,在do while循环中为:Exit Do
,也可以利用GoTo
语句
跳出本次循环,详见:1.5.3 GoTo语句</br>
Dim i As Integer
For i = 1 To 10 Step 2 ' 设定i从1到10,每次增加2,总共执行5次
操作1 ' 可以通过设定 Exit For 退出循环
Next i
- For Each ... 循环</br>
语法:For Each 变量 In 集合或数组
Dim arr
Dim i As Integer
arr = Array(1, 2, 3, 4, 5)
For Each i In arr ' 定义变量i,遍历arr数组
操作1
Next i
- Do ... While循环</br>
语法:</br>
-
前置循环条件:</br>
image.png -
后置循环条件:</br>
image.png
Sample code:
Dim i As Integer
i = 1
Do While i < 5 ' 循环5次
i = i + 1
Loop
' ===============================================
' 将判断条件后置的Do...While
Dim i As Integer
i = 1
Do
i = i + 1
Loop While i < 5 ' 循环4次
- Do Until 直到...循环</br>
语法:</br>
Do Until 表达式 表达式为真时跳出循环
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语句
GoTo
无条件地分支直接跳转到过程中指定的行。
注: GoTo语句大多用于错误处理时,但会影响程序结构,增加阅读和代码调试难度,
除非必要时,应尽量避免使用GoTo语句。
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的自然数之和是:" & lngSum
End Sub
CONTINUE
循环中实现continue操作,类似java语言的continue直接跳出本次循环
Sub continueTest()
Dim i
For i = 0 To 5
If i = 1 Then
'// 跳转到CONTINUE部分
GoTo CONTINUE
ElseIf i = 3 Then
'// 跳转到CONTINUE部分
GoTo CONTINUE
End If
'//没有GoTo语句的时候打印counter: i
Debug.Print i
CONTINUE: '// countinue跳转块,可以写逻辑,如果没有逻辑就直接进行下次循环
Next
End Sub
选择
和循环
提供了多种实现同一目的的语句结构,他们都能实现同样的作用,
差别一般是初始条件。还有书写的复杂度。正确的选择要使用的语句结构,
代码逻辑上会更清楚,方便人的阅读。
简写
在操作对象的属性时常常要先把对象调用路径都写出来,用with
可以简化这一操作
' 简化前
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
网友评论