Циклы и VBA Цикл - это повторяющееся действие какой-либо операции. Посмотрим какие они бывают. Цикл For ... NextЦикл For ... Next самый распространённый. Потому, что он самый простой. записывается в макросе он следующим образом:
Sub Primer()
.........
For i = 1 To 100 Step 1
r = r + i
Next i
.........
End Sub
For - Объявляет наш цикл; Читается это так: Цикл от 1 до 100 с шагом в еденицу. То-есть в начале выполнения нашего цикла i = 1, далее происходит какое-то выражение или оперция и значение Next переводит переменную i на следующее значение. В данном случае шаг Step 1, т.е. следующее значение i будет равняться 2. И так далее. Как только i достигнет своего сотого значения (так как до 100 цикл), цикл прекратится выполняться и дальше пойдёт выполнение нашего программного кода, который стоит после цикла. Приведём ещё один пример, сложим значения от 1 до 100 при помощи цикла:
Sub Primer()
Dim i As Byte
Dim r As Integer
For i = 1 To 100 Step 1
r = r + i
Next i
MsgBox "Сумма чисел от 1 до 100 равняется " & r, vbInformation, "Сумма"
End Sub
Если шаг вашего цикла равен 1, то Step можно не писать. Выглядеть это будет так:
Sub Primer()
Dim i As Byte
Dim r As Integer
For i = 1 To 100
r = r + i
Next i
MsgBox "Сумма чисел от 1 до 100 равняется " & r, vbInformation, "Сумма"
End Sub
Шаг Step может принимать не только положительные значения, но и отрицательные:
Sub Primer()
Dim i As Integer
Dim r As Integer
For i = 100 To 1 Step -1
r = r + i
Next i
MsgBox "Сумма чисел от 1 до 100 равняется " & r, vbInformation, "Сумма"
End Sub
а также дробные. Например так:
Sub Primer()
Dim i As Byte
Dim r As Integer
For i = 1 To 100 Step 1.5
r = r + i
Next i
MsgBox "Сумма чисел от 1 до 100 равняется " & r, vbInformation, "Сумма"
End Sub
Цикл For Each ... NextЦикл For Each ... Next применяется когда требуется перебрать элекменты в какой либо группе, коллекции, массиве и т.п. Наприер перебрать все листы книги Excel, все ячейки в определённом диапазоне, или "пробежаться" по объектам.
For Each X In Y
....
Next X
For Each - начало нашего цикла; К примеру данным циклом можно посчитать количество листов в активной книге:
Sub Primer()
Dim Shet As Object
Dim r As Integer
For Each Shet In ActiveWorkbook.Sheets
r = r + 1
Next Shet
MsgBox "Количество листов в книге = " & r, vbInformation, "Справка"
End Sub
Или собрать все имена листов (попробуйте запустить данный код):
Sub Primer()
Dim Shet As Object
Dim r As String
For Each Shet In ActiveWorkbook.Sheets
r = Shet.Name
s = s & " " & r
Next Shet
MsgBox "В книге присутствуют следующие имена листов:" & _
vbNewLine & s, vbInformation, "Справка"
End Sub
vbNewLine - переносит текст на следующую строку сообщения. Цикл Do ... LoopЦикл Do ... Loop означает: выполнять действие пока оно истинно или ложно. Do While LoopПри проверке истинности цикл записывается следующим образом.
Sub Primer()
Dim X As Byte
Do While X < 10
X = X + 1
MsgBox "Как только X превысит значение 10 код прекратит выполняться." & _
vbNewLine & "Сейчас X = " & X
Loop
End Sub
При такой записи цикл будет выполняться до тех пор, пока Х истинно, то-есть меньше 10. Do - это начало нашего цикла; При этом он может записываться и так:
Sub Primer()
Dim X As Byte
Do
X = X + 1
MsgBox "Как только X превысит значение 10 код прекратит выполняться." & _
vbNewLine & "Сейчас X = " & X
Loop While (X < 10)
End Sub
Тут мы сначало открываем цикл, пишем ему какой-то алгоритм, и только потом проверяем его на истинность. Do Until LoopПри проверке цикла на ложность, код записывается следующим образом:
Sub Primer()
Dim X As Byte
Do Until X > 5
MsgBox "Как только X превысит значение 5 код прекратит выполняться." & _
vbNewLine & "Сейчас X = " & X
X = X + 1
Loop
End Sub
При такой записи цикл будет выполняться до тех пор пока условие Х > 5 ложно. Как только Х превысит значение 5 и условие станет истинно, цикл прекратит выполняться. Do - это начало нашего цикла; При этом он тоже может записываться наоборот:
Sub Primer()
Dim X As Byte
Do
X = X + 1
MsgBox "Как только X превысит значение 6 код прекратит выполняться." & _
vbNewLine & "Сейчас X = " & X
Loop Until (X > 5)
End Sub
То-есть сперва мы выполняем код, а потом проверяем на наше условие. У некоторых может возникнуть такой вопрос: А как выйти из цикла экстренно, не заканчивая его выполнение? Например мы нашли наше ложное или истинное условие и хотим его покинуть.
Sub Primer()
Dim X As Byte
Do
If X = 3 Then Exit Do
X = X + 1
MsgBox "Как только X превысит значение 6 код прекратит выполняться." & _
vbNewLine & "Сейчас X = " & X
Loop Until (X > 5)
MsgBox "Всё!!!"
End Sub
При этом тот код, который у нас написан после цикла будет выполняться дальше. Ещё один нюанс. Источник: http://vbabesaba.com/index.htm | |
| |
Просмотров: 282 | | |
Всего комментариев: 0 | |