|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Все циклы VBA в одной статье
Время создания: 12.10.2019 20:24
Раздел: Разные закладки - VBA - Меню VB-справка
Запись: xintrea/mytetra_db_adgaver_new/master/base/1570882994dtis2pgy54/text.html на raw.githubusercontent.com
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Автор Дмитрий Якушев На чтение13 мин. Просмотров390 Рамакришна, Источники индийской мудрости Сейчас … мы идем по кругу Эта статья содержит полное руководство по VBA Do While и VBA While Loops. (Если вы ищете информацию о циклах VBA For и For Each, перейдите сюда ) Цикл VBA While существует, чтобы сделать его совместимым со старым кодом. Однако Microsoft рекомендует использовать цикл Do Loop, поскольку он более «структурирован и гибок». Оба этих цикла рассматриваются в этом посте. Для быстрого ознакомления с этими циклами перейдите к таблице быстрого руководства ниже. Если вы ищете что-то конкретное, вы можете посмотреть содержание ниже. Содержание
Краткое руководство по VBA While Loops
Если вы никогда ранее не использовали циклы, тогда вы можете прочитать «Что такое циклы и зачем они вам нужны» из моего поста в журнале For Loop. Я собираюсь сосредоточиться в основном на Do Loop в этой статье. Как я упоминал выше, мы видели, что цикл While Wend считается устаревшим. Для полноты информации я все равно его включил в эту статью. Итак, во-первых, зачем нам нужны циклы Do While, когда у нас уже есть циклы For? Цикл For против цикла Do While Когда мы используем цикл For Loop, мы заранее знаем, сколько раз мы хотим его запустить. Например, мы можем захотеть запустить цикл один раз для каждого элемента в коллекции, массиве или словаре. В следующем примере кода мы видим в начале каждого цикла, сколько раз он будет выполняться.
Цикл Do другой. Он работает:
Другими словами, количество циклов в большинстве случаев не имеет значения. Итак, что такое условие и как мы их используем? Условие — это утверждение, которое оценивается как истинное или ложное. Они в основном используются с операторами Loops и If . При создании условия вы используете такие знаки, как >, <, <>,> =, =. Ниже приведены примеры условий
Вы могли заметить x = 5 как условие. Его следует путать с х = 5, при использовании в качестве назначения. Например
В следующей таблице показано, как «=» используется в условиях и назначениях.
Цикл Do можно использовать четырьмя способами, и это часто вызывает путаницу. Однако в каждом из этих четырех способов есть только небольшая разница. Do всегда в начале первой строки, а Loop всегда в конце последней строки.
Мы можем добавить условие после любой строки.
Условию предшествует While или Until, которое дает нам эти четыре возможности
Давайте посмотрим на некоторые примеры, чтобы прояснить это. Представьте, что вы хотите, чтобы пользователь ввел список элементов. Каждый раз, когда пользователь вводит элемент, вы печатаете его в «Immediate Window». Когда пользователь вводит пустую строку, вы хотите, чтобы приложение закрывалось. В этом случае цикл For не подойдет, поскольку вы не знаете, сколько элементов будет вводить пользователь. Пользователь может ввести пустую строку первым или с сотой попытки. Для этого типа сценария вы бы использовали цикл Do. Следующий код показывает это
Код входит в цикл и продолжается до тех пор, пока не достигнет строки «Loop While». На этом этапе он проверяет, оценивается ли условие как истинное или ложное. Если условие оценивается как ложное, то код выходит из цикла и продолжается. Когда условие находится в строке Do, цикл может вообще не работать. Так что он будет работать ноль или более раз. В нашем последнем примере условие находится в строке Loop, потому что мы всегда хотим получить хотя бы одно значение от пользователя. В следующем примере мы используем обе версии цикла. Цикл будет выполняться, пока пользователь не введет букву «н».
В приведенном выше примере оба цикла будут вести себя одинаково. Однако, если мы установим для sCommand значение «н» до запуска цикла «Do While», код не войдет в цикл.
Второй цикл в вышеприведенном примере (то есть Loop While) всегда будет запускаться хотя бы один раз. При использовании Do Loop условию должно предшествовать Until или While. Until и While, по сути, противоположны друг другу. Они используются в VBA аналогично тому, как они используются в английском языке. Например:
Другой пример:
Еще один пример:
Как видите, использование Until и While — это просто противоположный способ написания одного и того же условия. Следующий код показывает циклы «While» и «Until» рядом. Как видите, единственная разница в том, что условие полностью изменено. Примечание: знаки <> означают «не равно».
Примером использования Until и While является проверка объектов. Когда объект не был назначен, он имеет значение Nothing. Поэтому, когда мы объявляем переменную книги в следующем примере, она имеет значение Nothing, пока мы не назначим ее Workbook.
Противоположностью Nothing не является Nothing, что может сбить с толку. Представьте, что у нас есть две функции: GetFirstWorkbook и GetNextWorkbook, которые возвращают некоторые объекты книги. Код будет печатать имя рабочей книги до тех пор, пока функции больше не вернут действительную рабочую книгу. Вы можете увидеть пример кода здесь:
Написание этого кода с использованием Do While было бы более запутанным, так как условие Not Is Nothing
Это делает код более понятным, и наличие четких условий — всегда хорошо. Честно говоря, разница маленькая, и выбор между «While» и «Until» действительно сводится к личному выбору. Мы можем выйти из любого цикла Do с помощью оператора Exit Do. Следующий код показывает пример использования Exit Do
В этом случае мы выходим из цикла Do Loop, если ячейка содержит текст «Найдено». Этот цикл в VBA, чтобы сделать его совместимым со старым кодом. Microsoft рекомендует использовать циклы Do, поскольку они более структурированы. Из MSDN: «Оператор Do… Loop обеспечивает более структурированный и гибкий способ выполнения циклов». Цикл VBA While имеет следующий формат: While <Условие> Разница между циклами VBA While и VBA Do заключается в следующем:
Условие для цикла VBA While такое же, как и для цикла VBA Do While. Два цикла в приведенном ниже коде работают точно так же.
Даже если вы никогда не писали код в своей жизни, я уверен, что вы слышали фразу «Бесконечный цикл». Это цикл, в котором условие никогда не будет выполнено. Обычно это происходит, когда вы забыли обновить счетчик. Следующий код показывает бесконечный цикл
В этом примере cnt установлен в 1, но он никогда не обновляется. Поэтому условие никогда не будет выполнено — cnt всегда будет меньше 5. В следующем коде cnt обновляется каждый раз, поэтому условие будет выполнено.
Как вы можете видеть, использование For Loop безопаснее для подсчета, поскольку оно автоматически обновляет счет в цикле. Ниже приведен тот же цикл с использованием For.
Это явно лучший способ сделать это. Цикл For устанавливает начальное значение, условие и счет в одну строку. Конечно, можно использовать бесконечный цикл, используя For — это потребует немного больше усилий 🙂
Когда у вас бесконечный цикл — VBA не выдаст ошибку. Ваш код будет продолжать работать, а редактор Visual Basic не будет отвечать. Раньше вы могли выйти из цикла, просто нажав Ctrl и Break. В настоящее время разные ноутбуки используют разные комбинации клавиш. Полезно знать, как это настроено в вашем ноутбуке, чтобы в случае возникновения бесконечного цикла вы могли легко остановить код. Вы также можете выйти из цикла, убив процесс. Нажмите Ctrl + Shift + Esc. На вкладке Процессы найдите Excel / Microsoft Excel. Щелкните правой кнопкой мыши по этому и выберите «Завершить процесс». Это закроет Excel, и вы можете потерять часть работы — так что гораздо лучше использовать Ctrl + Break или его эквивалент. Использование функций Worksheet вместо циклов Иногда вы можете использовать функцию листа вместо цикла. Например, представьте, что вы хотите добавить значения в список ячеек. Вы можете сделать это с помощью цикла, но было бы более эффективно использовать функцию таблицы Sum. Это быстрее и экономит много кода. Использовать функции рабочего листа очень просто. Ниже приведен пример использования Sum и Count.
В следующем примере используется цикл для выполнения того же действия. Как видите, это гораздо более длинный способ достижения той же цели.
Источник |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Так же в этом разделе:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|