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-

Advertisements

你可能會喜歡