VBA基础 - 分支和循环
概要
编程语言的基础除了数据类型, 就是控制结构了. 所谓控制结构, 主要就是分支和循环.
分支
废话不说, 直接示例代码:
单条件判断
1 Sub Test()
2 If 2 > 1 Then
3 Debug.Print "xxxx"
4 End If
5 End Sub
执行后输出:
xxxx
多条件判断
-
if-elseif-else 结构
1 Option Explicit 2 3 Sub Test() 4 score 55 5 score 65 6 score 85 7 score 95 8 End Sub 9 10 Function score(points As Integer) 11 12 If points > 0 And points < 60 Then 13 Debug.Print "不及格" 14 ElseIf points > 80 And points < 90 Then 15 Debug.Print "良好" 16 ElseIf points >= 90 Then 17 Debug.Print "优秀" 18 Else 19 Debug.Print "及格" 20 End If 21 22 End Function
输出结果:
不及格 及格 良好 优秀
-
select-case 结构
1 Option Explicit 2 3 Sub Test() 4 score 55 5 score 65 6 score 85 7 score 95 8 End Sub 9 10 Function score(points As Integer) 11 12 Select Case points 13 Case 90 To 100 14 Debug.Print "优秀" 15 Case 80 To 90 16 Debug.Print "良好" 17 Case 60 To 80 18 Debug.Print "及格" 19 Case 0 To 60 20 Debug.Print "不及格" 21 End Select 22 23 End Function
输出结果:
不及格 及格 良好 优秀
异常处理
其实异常处理, 也是一种条件判断, 只不过只将异常作为条件
1 Option Explicit
2
3 Sub Test()
4 Dim x As Integer
5
6 On Error GoTo finally
7 x = 10 / 0
8
9 finally:
10 Debug.Print "发生错误"
11
12 End Sub
输出结果:
发生错误
循环
for-next
1 Option Explicit
2
3 Sub Test()
4 Dim n As Integer
5
6 Debug.Print "打印 1 ~ 10 的奇数"
7 For n = 1 To 10 Step 2
8 Debug.Print n
9 Next n
10
11 End Sub
执行结果:
打印 1 ~ 10 的奇数
1
3
5
7
9
for-each-next
1 Option Explicit
2
3 Sub Test()
4 Dim n As Variant
5
6 Debug.Print "打印 1 ~ 10 的奇数"
7 For Each n In Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
8 If Not n Mod 2 = 0 Then
9 Debug.Print n
10 End If
11 Next
12
13 End Sub
执行结果:
打印 1 ~ 10 的奇数
1
3
5
7
9
do-loop-until
1 Option Explicit
2
3 Sub Test()
4 Dim n As Integer
5
6 Debug.Print "打印 1 ~ 10 的奇数"
7 Do
8 n = n + 1
9
10 If Not n Mod 2 = 0 Then
11 Debug.Print n
12 End If
13 Loop Until n >= 10
14
15 n = 0
16
17 Debug.Print "打印 1 ~ 10 的奇数"
18 Do Until n >= 10
19 n = n + 1
20
21 If Not n Mod 2 = 0 Then
22 Debug.Print n
23 End If
24 Loop
25
26 End Sub
执行结果:
打印 1 ~ 10 的奇数
1
3
5
7
9
打印 1 ~ 10 的奇数
1
3
5
7
9
上例中, until 的位置对循环的影响:
- until 在 Do 后面: 先进行判断, 再运行循环体
- until 在 Loop 后面: 先运行循环体, 再进行判断
示例:
1 Option Explicit
2
3 Sub Test()
4 Dim n As Integer
5
6 n = 0
7 Do
8 Debug.Print "会运行"
9 Loop Until n = 0
10
11 n = 0
12 Do Until n = 0
13 Debug.Print "不会运行"
14 Loop
15
16 End Sub
执行结果如下:
会运行
do-loop-while
1 Option Explicit
2
3 Sub Test()
4 Dim n As Integer
5
6 Debug.Print "打印 1 ~ 10 的奇数"
7 Do
8 n = n + 1
9
10 If Not n Mod 2 = 0 Then
11 Debug.Print n
12 End If
13 Loop While n < 10
14
15 n = 0
16
17 Debug.Print "打印 1 ~ 10 的奇数"
18 Do While n < 10
19 n = n + 1
20
21 If Not n Mod 2 = 0 Then
22 Debug.Print n
23 End If
24 Loop
25
26 End Sub
执行结果和 until 一样:
打印 1 ~ 10 的奇数
1
3
5
7
9
打印 1 ~ 10 的奇数
1
3
5
7
9
while vs until:
- while 是满足条件运行循环体
- until 是满足条件退出循环体
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2014-09-29 CPPUTest 单元测试框架(针对 C 单元测试的使用说明)