Операторы цикла в vbscript

Циклы. Циклы – одна из самых полезных штук, которые позволяют не раздувать код на много строчек. Так что стоит рассмотреть их. Начнём, как всегда, с самого просто. С цикла FOR… NEXT
Данная конструкция самая простая.
n – переменная счётчика цикла. Правее указывается длинна цикла(в данном случае от 1 до 10). Цикл заканчивается фразой NEXT. Всё что заключено между FOR и NEXT будет выполнятся указанное количество раз(10 раз, в данном случае).
Так же, можно самому задавать «шаг» цикла. Это число, на которое будет увеличиваться счётчик цикла с каждым проходом. По умолчанию шаг цикла равен 1.
Рассмотрим следующий пример:
Как видим, всё элементарно. Цикл выполняется от 2 до 10 с шагом 2, т.е. счётчик цикла уже принимает значения не от 1 до 10, как в прошлый раз, а от 2 до 10 с шагом 2. То есть цикл выполнится 5 раз.
Цикл можно пускать так же и в обратную сторону, указав соответствующий шаг, т.е. 1 строчка будет следующего вида:
FOR n=10 to 2 STEP -2.
Теперь давайте рассмотрим другие варианты циклов.
Так же цикл можно прервать оператором Exit For, выполнив его в теле цикла.
Давайте теперь разберём разновидность конструкции FOR – конструкцию FOR EACH … NEXT
Конструкция FOR EACH… NEXT отличается от основной конструкции тем, что длинна определяется не переменной, а количеством элементов в массиве или коллекции. Проблема для понимания заключается ещё и в том, что для различных случаев оно может выглядеть слегка по-разному. В дальнейшем я приведу примеры, т.к. мы будем часто использовать эту конструкцию. А пока разберём лёгкий пример на основе массивов, тем более массивы наша следующая тема.
Итак, пример:
Как мы видим, FOR EACH указывает что для каждого Item(элемента) в массиве Array(объявленном ранее) делать следующие действия: приравнивать элементу массива случайное числе. Вот небольшой, но полезный нюанс.
Случайные числа в VBS:
Формат приравнивания случайного числа: случайное_число = Int(минимум + (Rnd() * максимум))
Далее, в переменную TEXT записываются значения элементов через пробел. Указатель номера элемента n увеличивается на 1. Это не счётчик цикла, в данном случае. Счётчиком цикла является количество элементов массива(в данном случае от нуля до 5, то есть 6 элементов и 6 проходов цикла).
В итоге выводится TEXT
А теперь перейдём к следующей конструкции – конструкции Do … Loop
Кроме разобранного For… Next есть конструкция Do … Loop. Давайте рассмотрим пример использования.
Действие данной конструкции очень простое. На второй строчке проверяется условие num=0. Если это не так, то выполняется тело данного цикла. Когда же num=0 – происходит завершение цикла без прохода. Do Until – Делать ДО тех пор. В данном примере происходит вывод таблицы умножения числа 2 на число num, равное 10. Переменная текст складывается из: Состояние переменной Text + значение переменной num + текст «x 2 = » плюс результат умножения num на 2 и плюс переход на следующую строку(константа VbLf). Мы к работе с текстом ещё вернёмся, но объяснить надо было.
Until можно ставить не только после Do, но и после Loop. Тогда проверка условия будет осуществляться уже ПОСЛЕ выполнения цикла. Тот же самый цикл, тот же результат, но другое исполнение:
И есть ещё одна разновидность данной конструкции. Пример:
Смысл данной конструкции в следующем: Цикл выполняется до тех пор, пока условие WHILE верно, то есть до тех пор, пока num>0. Точно так же как и с Until проверка может осуществляться либо до выполнения цикла, либо после. Если выполнять проверку после прохода цикла, то условие WHILE указывается после слова Loop.
Данный цикл можно прервать как и цикл FOR, выполнив в теле цикла EXIT DO.
Есть ещё одна конструкция. Она заменена более гибкой Do… Loop. Эта конструкция – While Wend. Пример ниже:
Как видите, всё тоже просто. В самом начале цикла условие – Num>0. Цикл выполняется до тех пор, пока это условие верно. В отличии от более гибкого Do… Loop нельзя указать условие после прохода цикла. Do While… Loop равносильно этому циклу.
На этом, тема циклов должна быть теперь понятной. Предлагаю заняться теперь массивами. Это будет следующей темой статьи.
Источник
Почему циклы используются в VBScript?
Циклы используются для выполнения одного и того же блока кода снова и снова. Существует несколько операторов зацикливания VBScript. Вот некоторые из операторов зацикливания VBScript: «Пока», «До», «Вперед» и т. Д. Итак, как вы решите, какой оператор цикла использовать для ваших нужд?
При выполнении циклов вы можете знать или не знать, сколько раз вы хотите выполнить набор инструкций. Например, вы хотите вычислить сумму двух чисел десять раз. В этом случае вы уже знаете, что хотите повторить блок кода 10 раз. Предположим, вы хотите вычислить сумму двух чисел, пока конкретная переменная не станет истинной. Здесь вы не знаете, сколько раз цикл должен быть выполнен. Таким образом, основываясь на том, знаете ли вы или не знаете количество выполнений, вы можете использовать различные типы операторов зацикливания.
For … Следующие циклические операторы используются, если вы хотите повторить блок кода конечное число раз, а если вы знаете количество раз, если вы хотите повторить блок кода.
Операции «делать пока» и «делать до» используются, когда вы хотите повторить блок кода, пока условие не станет истинным или ложным, то есть когда вы не знаете, сколько раз вы хотите выполнить блок кода.
В этом уроке вы узнаете
- Почему циклы используются в VBScript?
- Делать во время цикла
- Делать до цикла
- Пока петля
- For-Next Loop
- Петля For-Step-Next
- Цикл For-Each-Next
Давайте посмотрим на эти циклические операторы по одному.
VBScript сделать пока цикл
Если вы не знаете, сколько раз вам нужно выполнить блок кода, вы будете использовать циклы Do While. Например, вы хотите вывести сообщение «Welcome», в то время как значение переменной x меньше 5. В этом случае будет использоваться цикл Do While.
<script type=”text/vbscript”> Dim x x=1 Do While x<5 document.write(“Welcome.”) x=x+1 Loop </script>
Если вы попытаетесь выполнить код, вы получите такой вывод:
Блок выполняется четыре раза (когда x = 1,2,3 и 4), и цикл заканчивается, когда значение x становится равным 5. Если вы забудете инструкцию x = x + 1, то ваш цикл станет бесконечным один. Этот вид циклов известен как бесконечные циклы . Бесконечные циклы могут даже сломать вашу систему. Таким образом, при использовании циклических операторов Do во время выполнения вы должны убедиться, что существует некоторый код, который сделает условие цикла в той или иной точке истинным.
Если вы присвоите значение 7 переменной x в начале, то блок кода не будет выполнен ни разу. Предположим, что вы хотите выполнить блок кода хотя бы один раз, независимо от условия, тогда вы можете использовать цикл Do While. Измените код следующим образом:
Пример VBScript:
<script type=”text/vbscript”> Dim x x=7 Do document.write(“Welcome.”) x=x+1 Loop While x<5 </script>
Если вы выполните этот код, вы получите сообщение «Добро пожаловать» только один раз. Здесь условие проверяется только после выполнения цикла один раз.
VBScript делать до цикла
Цикл «До» также используется, когда вы не знаете, сколько времени вам нужно для выполнения блока кода. Первый блок кода в цикле «До» («До тех пор, пока x <5») эквивалентен приведенному ниже блоку кода.
<script type=”text/vbscript”> Dim x x=1 Do Until x=5 document.write(“Welcome.”) x=x+1 Loop </script>
Это даст вам тот же вывод, что и первый блок кода в цикле Do While. Вы увидите приветственное сообщение четыре раза. Подобно Do ….. Loop Пока, мы должны сделать … Loop Пока тоже.
Если вы хотите выйти из цикла «делать пока» или «делать до» между ними, вы можете использовать оператор Exit Do. Предположим, что вы хотите выйти из блока, когда значение x станет 3 в приведенной выше программе, тогда вам нужно кодировать так:
<script type=”text/vbscript”> Dim x x=1 Do Until x=5 If x=3 Then Exit Do document.write(“Welcome.”) x=x+1 Loop </script>
Если вы выполните код, ваш вывод будет выглядеть так:
Здесь цикл завершается, когда значение x становится 3.
VBScript пока цикл
Хотя … Wend цикл похож на цикл Do While, хотя обычно не используется. Так как цикл Do Do более структурирован, чем цикл Wend Wend, программисты обычно используют операторы Do While.
<script type=”text/vbscript”> Dim x x = 1 While x < 5 document.write(“Welcome.”) x=x+1 Wend </script>
Выход будет
VBScript For-Next Loop
Цикл For-Next может использоваться для выполнения блока кода определенное количество раз. Цикл «VBScript For» определяет переменную счетчика и ее начальное и конечное значения. Оператор Next увеличивает переменную счетчика на единицу.
For i = 1 To 5 document.write(“The number is ” & i & “
“) Next
Если вы выполните код, вы получите такой вывод:
VBScript For-Step-Next Loop
По умолчанию переменная счетчика увеличивается на единицу. Если вы хотите увеличить или уменьшить переменную счетчика на указанное вами значение, вы можете использовать цикл For …. Step …. Next. Предположим, что в приведенном выше коде вы хотите увеличить счетчик на 2, а затем изменить свой код следующим образом:
For i = 1 To 5 Step 2 document.write(“The number is ” & i & “<br />”) Next </script>
Выход этого кода будет:
Если вы хотите выйти из цикла For Next или For Step Next между ними, вы можете использовать Exit для оператора. Предположим, что вы хотите выйти из блока, когда значение i становится 3 в вышеуказанной программе, тогда вам нужно кодировать так:
<script type=”text/vbscript”> For i = 1 To 5 Step 2 If i=3 Then Exit For document.write(“The number is ” & i & “<br />”) Next </script>
Выход будет:
VBScript For-Each-Next Loop
Если вы хотите повторить блок кода для каждого элемента в коллекции или для каждого элемента массива VBS, то вам нужно использовать цикл For … Each … Next.
<script type=”text/vbscript”> Dim students(4) students(0)=”John” students(1)=”Hanah” students(2)=”Sarah” students(3)=”Kevin” students(4)=”Emma” For Each x In students document.write(x & “<br />”) Next </script>
Выход вышеуказанного кода будет
Пример кода
<html> <> <script type=”text/vbscript”> Dim name, length name = InputBox(“Enter your name”) length = Len(name)’Gives length of the input string For i = 1 To length txt = Mid(name,i,1)’Returns a specified number of characters from a string, the first parameter is the string, second parameter is the starting position and third parameter is the number of characters to return If txt=”a” or txt=”A” or txt=”e” or txt=”E” or txt=”i” or txt=”I” or txt=”o” or txt=”O” or txt=”u” or txt=”U” Then counter = counter+1 End If Next document.write(“Hi ” & name & “!!!Your name contains ” & counter & ” vowels.”) </script> </> <body> </body> </html>
Сохраните файл как loop.html в нужном вам месте. Теперь откройте файл в Internet Explorer, и вы получите окно с просьбой ввести ваше имя. Введите имя, скажем, Аарон, вот так:
Нажмите OK, и ваш вывод будет выглядеть так:
Резюме
- Операторы зацикливания используются для повторного выполнения одного и того же блока кода.
- Вы будете использовать циклы Do-While, Do-To и While-Wend, когда вы не знаете заранее, сколько раз должен выполняться блок.
- Вы будете использовать циклы For-Next, For-Next-Step и For-Each-Next, если вы уже знаете, сколько раз вам нужно выполнить блок кода.
Источник
Доброго времени суток! Данную статью я решил посвятить рубрике по основам программирования в Visual Basic for Application. И сегодня мы поговорим о циклах в VBA, разберём их синтаксис и рассмотрим несколько примеров, которые часто встречаются программисту.
Сначала напомню, что цикл – процесс повторения части кода, выполняемый, пока не будет выполнено или нарушено заданное нами условие.
В данной статье мы разберём синтаксис и примеры следующих циклов в VBA:
- For
- For each
- While
- Until
Цикл For в VBA
Цикл for в VBA обычно используется при зацикливании фрагмента кода, если нам известно конечное значение counter – счетчика, при котором мы выйдем из цикла.
Возьмём для примера самый распространённый пример:
Сгенерировать массив из 5 целых значений
Dim mas(5) As Integer For i% = 0 To 4 mas(i) = Int((10 * Rnd) + 1) Next i
Обратите ваше внимание, что в этом примере используется неявное объявление при работе с циклами в VBA. i% – означает неявное объявление переменной i в формате integer. Такая конструкция по сути заменяет следующую: dim i as integer. Это используется для сокращения кода и для удобства написания и чтения. В старых версиях VBA необходимо указывать знак формата после каждого использования неявной переменной. В более поздних версиях достаточно всего один раз.
VBA для цикла for даёт возможность использовать функцию Step. Как ясно из перевода, это шаг, с которым мы будем проходить наш интервал. По умолчанию, он равен 1. Популярный вариант использования встречается в случаях, когда counter связан с переменной, используемой внутри цикла. Например, при написании программ, связанных с функциями.
Найти пересечение графика функции y = 5*x + 5 с осью ординат
expr(x As Integer) As Integer expr = 5 * x + 5 End Sub CodeTown() Dim i As Integer For i = -10 To 10 Step 1 If expr(i) = 0 Then MsgBox “При Y = 0, Х = “+ CStr(i) Next i End Sub
Теперь представим, что у нас достаточно большой диапазон и мы не хотим заставлять компьютер считать лишние итерации. На этот случай существует команда Exit For. Перепишем наш последний пример с новой командой.
expr(x As Integer) As Integer expr = 5 * x + 5 End Sub CodeTown() Dim i As Integer For i = -10 To 10 Step 1 If expr(i) = 0 Then MsgBox “При Y = 0, Х = “+ CStr(i) Exit For End If Next i End Sub
C помощью команды Exit можно закончить выполнение любого цикла в VBA. Достаточно указать после Exit название используемого цикла. Также им возможно завершить работу любой процедуры или функции.
Цикл For Each в VBA
For Each в VBA основан на переборе всех элементов, указанного типа в массиве, объекте или группе.
Самый популярный вариант его использования – перебор страниц в рабочей книге.
Вывести названия всех листов в рабочей книге
For Each ws In ThisWorkbook.Worksheets MsgBox ws.Name Next ws
И ещё один интересный пример:
Изменить размер шрифта и выравнить по центру текст в label
For Each element In UserForm1.Controls If InStr(1, UserForm1.Controls.Item(i%).Name, “Label”) > 0 Then UserForm1.Controls.Item(i%).TextAlign = fmTextAlignCenter UserForm1.Controls.Item(i%).Font.Size = 20 i% = i% + 1 End If Next element
Тут следует понимать, что через Controls можно обратиться к любому элементу формы. Если отфильтровать по имени, например, как мы сделали выше, то можно выделить группы элементов и изменить их свойства. В данном случае, размер шрифта и выравнивание.
Цикл While в VBA
Циклы в VBA, которые используют структуру Do..Loop (это while и until циклы) можно записывать с разным расположением фрагмента условия. Как видите на картинке выше, условие может проверяться после выполнения одной итерации, а может перед запуском цикла.
Самый популярный пример:
Отсортируйте по возрастанию сгенерированный массив методом пузырька
Dim mas(5) As Integer For i% = 0 To 4 mas(i%) = Int((10 * Rnd) + 1) Next i Dim count As Integer, temp As Integer count = 1 Do While count > 0 count = 0 For i% = 0 To 3 If mas(i) > mas(i + 1) Then temp = mas(i) mas(i) = mas(i + 1) mas(i + 1) = temp count = count + 1 End If Next i% Loop
В вышеуказанном примере мы отсортировали массив с рандомными значениями в порядке возрастания. Метод пузырька считается достаточно долгим, но простым в реализации. В основном, им сортируют небольшие числовые массивы.
Цикл Until в VBA
Как видите, отличия от while крайне несущественные. Цикл Until в VBA можно реализовать с помощью конструкции while NOT (condition). Тем не менее, приведу пример:
Заставить пользователя ввести число
Dim temp As Variant Do temp = InputBox(“Введите число”) Loop Until IsNumeric(temp)
Почему заставить? Потому, что если пользователь закроет окно ввода, это его не спасёт, оно будет появляться вновь и вновь пока он не введёт любое число.
На этом мы закончим. Сегодня мы рассмотрели важную тему циклов в VBA, разобрали основные примеры. Конечно все примеры по этой обширной теме сложно разобрать, но, тем не менее, основы вы должны понять. Оставляйте ваши комментарии, если у вас возникли вопросы.
Скачать исходник
Источник
VBS (Visual Basic Scripting) – язык написания сценариев высокого уровня, по синтаксису похожий на VBA, применяемый для автоматизации администрирования Windows, обработки данных и т.д. Если Вы уже знаете Visual Basic или Visual Basic для приложений (VBA), VBScript будет очень знаком. Основные понятия VBScript являются общими для большинства языков программирования.
Объявление переменных и массивов
В VBS есть глобальные и локальные переменные, доступные только в конкретной области.
Dim Variable1 ‘ объявление глобальной переменной Public Variable2 ‘ объявление глобальной переменной Private Variable3 ‘ объявление локальной переменной
Использование Public и Private по большей части имеют смысл при использовании классов в VBS, которые будут рассмотрены в следующей статье. В языке VBS так же можно объявить константы:
Const Const1 = Value1
Переменную так же можно вообще не объявлять, а сразу присваивать ей значение, однако, так делать не рекомендуется, т.к. в случае опечатки в названии переменной, можно получить не те результаты, что ожидались. Чтобы компилятор требовал явного объявления всех переменных, нужно использовать оператор Option Explicit
Тип переменной задается при присвоении ей значения, при этом тип может меняться в процессе выполнения программы.
Массивы объявляются с помощью скобок.
Dim Arr1(10) ‘ Объявление массива с фиксированным размером (11 элементов) Dim Arr2() ‘ Объявление динамического массива ReDim Preserve Arr2(100) ‘ Изменение размера динамического массива
Как и с переменными, тип массива задается при присвоении значения, причем, у разных элементов массива могут быть разные типы.
Очистить массив от данных можно так:
Erase имя_массива
Условия и ветвления
Условия в VBS осуществляется с помощью If Then Else. Пример:
Dim s If Part(“w”, Now) = vbMonday Then s = “Сегодня понедельник” Else s = “Сегодня не понедельник” End If MsgBox s
Оператор Select Case поможет при большом количестве сравнений. Пример:
Dim x,s x = Part(“w”, Now) Select Case x Case vbMonday s = “Понедельник” Case vbTuesday s = “Вторник” Case vbWednesday s = “Среда” Case vbThursday s = “Четверг” Case vbFriday s = “Пятница” Case vbSaturday s = “Суббота” Case Else s = “Воскресенье” End select MsgBox s
Циклы
В VBS используется два основных вида циклов.
Синтаксис цикла For … Next
For переменная=начало To конец [Step шаг] тело цикла [Exit For] тело цикла Next
Операторы в квадратных скобках не обязательны. Step – задает шаг изменения переменной цикла, на сколько она увеличивается или уменьшается с каждой итерацией (повтором) цикла. Exit For – позволяет прервать цикл “досрочно”, т.е. выйти из цикла, когда необходимо и передать управление оператору, следующему за Next.
Пример цикла For … Next
For i = 1 To 10 summ = summ + i Next
Еще один вариант цикла For Each … Next. Он позволяет перебирать элементы какого-либо списка (массива), в случае, если его размеры не известны. В цикле так же можно использовать Exit For при необходимости.
Пример цикла For Each … Next
Dim Arr(3), el, s Arr(0) = 1 Arr(1) = “строка” Arr(2) = 3 For Each el In Arr s = s & elem & vbCrLf Next MsgBox s
Цикл Do .. Loop используется когда необходимо выполнять цикл до тех пор пока условие верно или, наоброт, выйти из цикла если условие стало верно.
Синтаксис цикла с предусловием:
Do [While | Until] условие тело цикла [Exit Do] тело цикла Loop
Синтаксис цикла с постусловием:
Do тело цикла [Exit Do] тело цикла Loop [While | Until] условие
Как и с циклом For оператор Exit Do позволяет “досрочно” выйти из цикла.
Пример
i = 0 Do While i < 3 MsgBox i i=i+1 Loop
Цикл While Wend – альтернативная форма записи цикла Do Loop с предусловием. Цикл выполняется пока условие верно.
While условие тело цикла Wend
Заключение
Мы рассмотрели основные операторы языка VBS. Так же стоит упомянуть еще несколько моментов:
- Операторы можно записывать в одну строку, разделяя их двоеточием :
- Для записи комментария в начале строку нужно использовать апостроф ‘ или оператор REM
- Файлы VBScript записываются как обычные текстовые файлы в кодировке Windows-1251.
На этом, основы VBS можно считать рассмотренными.
Источник