源作者:小智雅汇
vba运行过程中终止程序与其他程序设计语言相同,VBA中的程序代码也可按一定的顺序执行。在程序中有时需要选择某一部分代码执行,有时需要重复执行某一段代码。VBA中提供了完善的程序结构控制代码来完成这些功能。
结构化程序的概念首先是从以往编程过程中无限制地使用转移语句(GoTo)而提出来的。程序控制有三种基本结构:即顺序、选择和循环三种控制流程。
1 选择结构
1.1 单分支结构:If...Then
写成单行时,后面不需要跟:End If,如:
If 职称 = "工程师" Then 工资 = 工资 + 100
1.2 双分支结构:If...Then...Else...End If
Sub 填写性别()
Worksheets("员工").Activate
With Worksheets("员工")
For i = 3 To 11
If .Cells(i, 5) = "女士" Then
.Cells(i, 17) = "女"
Else
.Cells(i, 17) = "男"
End If
Next
End With
End Sub
1.3 多分支结构:If...Then...ElseIf...Else...End If
Sub If多分支程序()
Dim str1 As String '保存输入值
Dim sPrompt As String '提示信息
Dim sTitle As String '标题
Dim sDefault As String '默认值
Dim sTemp As String '临时值
sPrompt = "请输入员工的职称:" & vbNewLine & _
"1:高级工程师" & vbNewLine & _
"2:工程师" & vbNewLine & _
"3:助理工程师" & vbNewLine & _
"4:技术员" & vbNewLine & _
"输入其他值,则无职称"
sTitle = "输入职称"
sDefault = "2"
str1 = InputBox(sPrompt, sTitle, sDefault)
If str1 = "" Then Exit Sub '用户单击“取消”按钮,退出程序
If str1 = "1" Then
sTemp = "高级工程师"
ElseIf str1 = "2" Then
sTemp = "工程师"
ElseIf str1 = "3" Then
sTemp = "助理工程师"
ElseIf str1 = "4" Then
sTemp = "技术员"
Else
sTemp = "其他"
End If
Worksheets("sheet1").Range("A1") = sTemp
End Sub
1.4 多分支结构:Select Case
Sub Case多分支程序()
Dim str1 As String '保存输入值
Dim sPrompt As String '提示信息
Dim sTitle As String '标题
Dim sDefault As String '默认值
Dim sTemp As String '临时值
sPrompt = "请输入员工的职称:" & vbNewLine & _
"1:高级工程师" & vbNewLine & _
"2:工程师" & vbNewLine & _
"3:助理工程师" & vbNewLine & _
"4:技术员" & vbNewLine & _
"输入其他值,则无职称"
sTitle = "输入职称"
sDefault = "2"
str1 = InputBox(sPrompt, sTitle, sDefault)
If str1 = "" Then Exit Sub '用户单击“取消”按钮,退出程序
Select Case str1
Case "1"
sTemp = "高级工程师"
Case "2"
sTemp = "工程师"
Case "3"
sTemp = "助理工程师"
Case "4"
sTemp = "技术员"
Case Else
sTemp = "其他"
End Select
Worksheets("sheet1").Range("A1") = sTemp
End Sub
2 循环结构
2.1 For...Next循环语句
Sub 循环嵌套()
'本例使用冒泡排序法演示循环嵌套
Dim i As Integer
Randomize
With Worksheets("sheet1")
For i = 1 To 100 '生成100个随机数据
.Cells(i, 1) = Int(Rnd * 100) + 1
Next
For i = 1 To 99 '外循环
For j = i + 1 To 100 '内循环
If .Cells(i, 1) >.Cells(j, 1) Then '比较数据大小
t = .Cells(i, 1)
.Cells(i, 1) = .Cells(j, 1)
.Cells(j, 1) = t
End If
Next
Next
End With
End Sub
2.2 Do...Loop循环
此循环结构有四种写法:
Do While 逻辑表达式...Loop
Do...Loop While 逻辑表达式
Do Until 逻辑表达式...Loop
Do...Loop Until 逻辑表达式
以下是第一种写法的代码举例:
Sub Do循环填写性别()
Worksheets("员工").Activate
With Worksheets("员工")
i = 3 '循环变量赋初值
Do While i.Cells(j, 1) Then '比较数据大小
t = .Cells(i, 1)
.Cells(i, 1) = .Cells(j, 1)
.Cells(j, 1) = t
End If
Next
Next
End With
End Sub
-End-