Рубрикатор
|
ЦиклыЦикл - это повторяющееся действие какой-либо операции. Посмотрим какие они бывают. Цикл 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 При этом тот код, который у нас написан после цикла будет выполняться дальше. Цикл With – End WithКонструкция With – End With позволяет выполнять несколько операций над одним объектом. Для анализа работы посмотрим, как работают следующие процедуры: Sub changeFont() Selection.Font.Name = "Times New Roman" Selection.Font.FontStyle = "Bold Italic" Selection.Font.Size = 12 Selection.Font.Underline = xlUnderlineStyleSingle Selection.Font.ColorIndex = 5 End Sub Эту процедуру можно записать с помощью With – End With. Процедура работает точно также: Sub changeFont2() With Selection.Font .Name = "Times New Roman" .FontStyle = "Bold Italic" .Size = 12 .Underline = xlUnderlineStyleSingle .ColorIndex = 5 End With End Sub Смысл использования второго варианта заключается в том, что он более быстрый с точки зрения обработки операций в процедуре, хотя и менее понятен с точки зрения языка програмирования. Ещё один нюанс.
|
Поиск
|
||