VBA|程序控制結構
與其他程序設計語言相同,VBA中的程序代碼也可按一定的順序執行。在程序中有時需要選擇某一部分代碼執行,有時需要重複執行某一段代碼。VBA中提供了完善的程序結構控制代碼來完成這些功能。
結構化程序的概念首先是從以往編程過程中無限制地使用轉移語句(GoTo)而提出來的。程序控制有三種基本結構:即順序、選擇和循環三種控制流程。
1 選擇結構
1.1 單分支結構:If...Then
寫成單行時,後面不需要跟:End If,如:
If 職稱 = "工程師" Then 工資 = 工資 + 100
1.2 雙分支結構:If...Then...Else...End If
Sub 填寫性別()
Worksheets("員工").Activate
Advertisements
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 '臨時值
Advertisements
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 <= 11
If .Cells(i, 5) = "女士" Then
.Cells(i, 17) = "女"
Else
.Cells(i, 17) = "男"
End If
i = i + 1 '使用Do循環,需要在循環體中改變循環變數
Loop
End With
End Sub
2.3 For Each...Next循環
該循環主要針對數組或對象集合中的每一個元素重複一組語句。
Sub 刪除批註()
Dim cm As Comment, str1 As String
Dim i As Integer, j As Integer
i = Worksheets(1).Comments.Count
For Each cm In Worksheets(1).Comments
j = j + 1
str1 = "第" & j & "條/共" & i & "條批註" & vbCrLf & _
"作者:" & cm.Author & vbCrLf & "批註內容:" & cm.Text & vbNewLine & vbNewLine
str1 = str1 & "單擊【是】按鈕將刪除該批註!"
If MsgBox(str1, vbQuestion + vbYesNo) = vbYes Then
cm.Delete
End If
Next
End Sub
2.4 循環嵌套:循環內的循環
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
-End-