Как остановить бесконечный цикл vba
Перейти к содержимому

Как остановить бесконечный цикл vba

  • автор:

Использование Do. Операторы цикла

Использовать Do. Операторы цикла для выполнения блока инструкций неограниченное количество раз. Операторы повторяются до тех пор, пока сохраняется условие True, или пока условие не станет True.

Повторяющиеся инструкции, когда условие имеет значение True

Существует два способа использования ключевого словаWhile для проверки условия в. Оператор Loop. Вы можете проверить условие перед вводом цикла или проверить его после выполнения цикла хотя бы один раз.

В следующей ChkFirstWhile процедуре необходимо проверить условие перед вводом цикла. Если myNum задано значение 9, а не 20, операторы внутри цикла никогда не будут выполняться. В процедуре ChkLastWhile инструкции в цикле выполняются только один раз, прежде чем условие станет False.

Sub ChkFirstWhile() counter = 0 myNum = 20 Do While myNum > 10 myNum = myNum - 1 counter = counter + 1 Loop MsgBox "The loop made " & counter & " repetitions." End Sub Sub ChkLastWhile() counter = 0 myNum = 9 Do myNum = myNum - 1 counter = counter + 1 Loop While myNum > 10 MsgBox "The loop made " & counter & " repetitions." End Sub 

Повторяющиеся инструкции до тех пор, пока условие не станет true

Существует два способа использования ключевого слова Until для проверки условия в операторе Do. Loop. Вы можете проверить условие перед вводом цикла (как показано в ChkFirstUntil процедуре) или проверить его после выполнения цикла хотя бы один раз (как показано в процедуре ChkLastUntil ). Повторение циклов продолжается, пока сохраняется условие False.

Sub ChkFirstUntil() counter = 0 myNum = 20 Do Until myNum = 10 myNum = myNum - 1 counter = counter + 1 Loop MsgBox "The loop made " & counter & " repetitions." End Sub Sub ChkLastUntil() counter = 0 myNum = 1 Do myNum = myNum + 1 counter = counter + 1 Loop Until myNum = 10 MsgBox "The loop made " & counter & " repetitions." End Sub 

Выход из do. Оператор Loop из цикла

Вы можете выйти из do. Выполните цикл с помощью инструкции Exit Do . Например, чтобы выйти из бесконечного цикла, используйте инструкцию Exit Do в блоке инструкции True либо if. Затем. Оператор Else или оператор Select Case . Если условие будет False, цикл запустится обычным образом.

В следующем примере myNum присваивается значение, которое создает бесконечный цикл. Оператор If. Then. Else проверяет это условие, а затем выходит из бесконечного цикла.

Sub ExitExample() counter = 0 myNum = 9 Do Until myNum = 10 myNum = myNum - 1 counter = counter + 1 If myNum < 10 Then Exit Do Loop MsgBox "The loop made " & counter & " repetitions." End Sub 

Чтобы остановить бесконечный цикл, нажмите клавиши ESC или CTRL+BREAK.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Обратная связь

Были ли сведения на этой странице полезными?

Обратная связь

Отправить и просмотреть отзыв по

Оператор While. End While (Visual Basic)

Выполняет последовательность операторов, если заданное условие имеет значение True .

Синтаксис

While condition [ statements ] [ Continue While ] [ statements ] [ Exit While ] [ statements ] End While 

Компоненты

Термин Определение
condition Обязательный. Выражение Boolean . Если condition имеет значение Nothing , Visual Basic обрабатывает его как False .
statements Необязательный элемент. Один или несколько операторов после While , которые выполняются каждый раз condition , — . True
Continue While Необязательный элемент. Передает управление следующей итерации While блока.
Exit While Необязательный элемент. Передает управление из While блока.
End While Обязательный. Завершает определение блока While .

Комментарии

Используйте структуру While. End While , если требуется повторять набор операторов неограниченное количество раз, пока условие остается True . Если вы хотите больше гибкости с тем, где вы проверяете условие или на какой результат вы тестируете его, вы можете предпочесть do. Оператор Loop. Если вы хотите повторять инструкции заданное количество раз, выполните for. Как правило, лучше выбрать следующий оператор.

Если condition имеет значение True , все statements выполняются до тех пор, End While пока не будет обнаружена инструкция . Затем элемент управления возвращается к оператору While и condition снова проверяется. Если condition параметр по-прежнему True имеет значение , процесс повторяется. Если это False , элемент управления передается оператору, который следует за оператором End While .

Оператор While всегда проверяет условие перед запуском цикла. Цикл продолжается, пока условие остается True . Если condition это False при первом входе в цикл, он не запускается ни разу.

Обычно condition является результатом сравнения двух значений, но это может быть любое выражение, результатом которого является логическое значение типа данных ( True или False ). Это выражение может содержать значение другого типа данных, например числового типа, которое было преобразовано в Boolean .

Вы можете вложить While циклы, поместив один цикл в другой. Вы также можете вложить различные типы структур управления друг в друга. Дополнительные сведения см. в разделе Вложенные структуры элементов управления.

Выход в режиме "Пока"

Оператор Exit While может предоставить другой способ выхода из While цикла. Exit While немедленно передает управление оператору, который следует за оператором End While .

Обычно используется Exit While после оценки некоторых условий If. Then. Else (например, в структуре). Вы можете выйти из цикла, если обнаружите условие, которое делает ненужным или невозможным продолжение итерации, например ошибочное значение или запрос на завершение. Вы можете использовать при Exit While проверке условия, которое может привести к бесконечному циклу, который может выполняться очень большое или даже бесконечное количество раз. Затем можно использовать для Exit While экранирования цикла.

Вы можете разместить любое количество операторов Exit While в While любом месте цикла.

При использовании во вложенных While циклах Exit While управление передается из самого внутреннего цикла и на следующий более высокий уровень вложенности.

Оператор Continue While немедленно передает управление следующей итерации цикла. Дополнительные сведения см. в разделе Continue Statement.

Пример 1

В следующем примере операторы в цикле продолжают выполняться до тех пор, пока index переменная не будет больше 10.

Dim index As Integer = 0 While index  

Пример 2

В следующем примере показано использование операторов Continue While и Exit While .

Dim index As Integer = 0 While index < 100000 index += 1 ' If index is between 5 and 7, continue ' with the next iteration. If index >= 5 And index  

Пример 3

В следующем примере считываются все строки в текстовом файле. Метод OpenText открывает файл и возвращает объект , StreamReader который считывает символы. В условии While Peek метод StreamReader определяет, содержит ли файл дополнительные символы.

Private Sub ShowText(ByVal textFilePath As String) If System.IO.File.Exists(textFilePath) = False Then Debug.WriteLine("File Not Found: " & textFilePath) Else Dim sr As System.IO.StreamReader = System.IO.File.OpenText(textFilePath) While sr.Peek() >= 0 Debug.WriteLine(sr.ReadLine()) End While sr.Close() End If End Sub 

См. также раздел

  • Циклические структуры
  • Оператор Do…Loop
  • Оператор For…Next
  • Логический тип данных
  • Вложенные структуры управления
  • Оператор Exit
  • Оператор Continue

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Как остановить бесконечный цикл vba

Argument 'Topic id' is null or empty

Сейчас на форуме

© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru

Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.

ООО "Планета Эксел"
ИНН 7735603520
ОГРН 1147746834949
ИП Павлов Николай Владимирович
ИНН 633015842586
ОГРНИП 310633031600071

Как прервать работу зацикленного макроса, если CTRL/Break не "того"?

Author24 — интернет-сервис помощи студентам

Привет. Макрос (видимо) зациклился и колбасит уже час вместо положеных 10 минут. Ни на что не реагирует, собственно. Хотя параллельно могу открывать другие книги ексель для работы.
Я так понимаю, что теперь тольуко принудительное закрытие книги?

вопрос: можно ли в макрос засунуть какую-то инструкцию, которая будет заставлять макрос реагировать на контрол брейк? или как keit предупредить подобные подвисания?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как прервать работу макроса, если он не откликается на Ctrl+Break?
здравствуйте иногда после нажатия Run когда очень срочно нужно прервать работу макроса я делаю -.

Как сделать так, чтобы работу макроса нельзя было прервать с помощью Ctrl+Break и других комбинаций?
Добрый день, известно, что работу мкроса можно остановить, например, ctrl+break/pause. Возможно и.

Исчезла кнопка Пауза (Прервать все/ Ctrl+Break)
Уважаемые знатоки! Исчезла возможность, во время отладки поставить на паузу отладку. При нажатии.

6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645

ЦитатаСообщение от AAAAAAAmidi Посмотреть сообщение

можно ли в макрос засунуть какую-то инструкцию, которая будет заставлять макрос реагировать

DoEvents
Это вообще полезно в длинных циклах.

Добавлено через 6 минут
Вот кстати нашёл в закромах:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
============================================================== имеется макрос (см ниже), который нормально работает, но остановить работу макроса получается только кнопкой Reset в редакторе VB или путем закрытия файла. Подскажите как его можно выключить? Const ИмяФайла7 = "C:\Alex.txt" Const ИмяФайла8 = "C:\Alex1.txt" Public РазмерФайла7 As Long, РазмерФайла8 As Long, ПоискИзмененийВременноОтключён As Boolean Const ВременнойИнтервалМеждуПроверками = 2 Public Sub СлежениеЗаФайлом() On Error Resume Next Do While True ' бесконечный цикл If Not ПоискИзмененийВременноОтключён Then If ПоискИзмененийВременноОтключён Then Exit Sub НовыйРазмерФайла7 = CreateObject("scripting.filesystemo bject").GetFile(ИмяФайла7).Size If НовыйРазмерФайла7 > РазмерФайла7 Then DoFile2 (ИмяФайла7): РазмерФайла7 = НовыйРазмерФайла7 НовыйРазмерФайла8 = CreateObject("scripting.filesystemo bject").GetFile(ИмяФайла8).Size If НовыйРазмерФайла8 > РазмерФайла8 Then DoFile1 (ИмяФайла8): РазмерФайла8 = НовыйРазмерФайла8 End If t = Timer: While t + ВременнойИнтервалМеждуПроверками > Timer: DoEvents: Wend Loop End Sub Я же вам уже писал, как это сделать: Код: Sub НазначьтеЭтотМакросНаКнопкуОстановки() ПоискИзмененийВременноОтключён = True End Sub ==============================================================

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *