Vba excel прервать бесконечный цикл

I am using a While…Wend loop of VBA.

Dim count as Integer

While True
    count=count+1

    If count = 10 Then
        ''What should be the statement to break the While...Wend loop? 
        ''Break or Exit While not working
    EndIf
Wend

I don’t want to use condition like `While count<=10…Wend

pgSystemTester's user avatar

asked Aug 30, 2012 at 15:52

Priyank Thakkar's user avatar

Priyank ThakkarPriyank Thakkar

4,70219 gold badges56 silver badges92 bronze badges

A While/Wend loop can only be exited prematurely with a GOTO or by exiting from an outer block (Exit sub/function or another exitable loop)

Change to a Do loop instead:

Do While True
    count = count + 1

    If count = 10 Then
        Exit Do
    End If
Loop

Or for looping a set number of times:

for count = 1 to 10
   msgbox count
next

(Exit For can be used above to exit prematurely)

answered Aug 30, 2012 at 15:58

Alex K.'s user avatar

2

Another option would be to set a flag variable as a Boolean and then change that value based on your criteria.

Dim count as Integer 
Dim flag as Boolean

flag = True

While flag
    count = count + 1 

    If count = 10 Then
        'Set the flag to false         '
        flag = false
    End If 
Wend

answered Dec 3, 2019 at 8:51

Sam Martin's user avatar

The best way is to use an And clause in your While statement

Dim count as Integer
count =0
While True And count <= 10
    count=count+1
    Debug.Print(count)
Wend

answered Jul 18, 2020 at 20:16

deseosuho's user avatar

deseosuhodeseosuho

9383 gold badges10 silver badges28 bronze badges

What about setting the ‘While’ test perameters in the loop so that the loop ends on the next iteration. For example…

OS = 0
While OS <> 1000 
OS = OS + 1 
If OS = 500 Then OS = 1000 
Wend

Ok, that’s a totally pointless example but it shows the principle…

answered Mar 11, 2022 at 11:45

RannochRob's user avatar

4 / 4 / 1

Регистрация: 17.09.2015

Сообщений: 64

1

05.11.2015, 13:29. Показов 40035. Ответов 5


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

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

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

спасибо



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

05.11.2015, 13:29

Ответы с готовыми решениями:

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

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

При Ctrl+Break возникает ошибка «Code execution has been interrupted»
Sub Sam8()
K = 1
Do While Mid(Cells(5, 5), K, 1) &lt;&gt; &quot; &quot;
K = K + 1
Loop
Range(&quot;A8&quot;).Value =…

Как в Word 2010 аккорду «Ctrl ё» присвоить действие кнопки «формат по абзацу»
Скажите, плиз… как в Word 2010 аккорду &quot;Ctrl+ё&quot; присвоить действие кнопки &quot;Формат по абзацу&quot;….

5

Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

05.11.2015, 14:01

2

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

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

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

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

Visual Basic
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
 
==============================================================



1



Ушел с CyberForum совсем!

873 / 182 / 25

Регистрация: 04.05.2011

Сообщений: 1,020

Записей в блоге: 110

05.11.2015, 14:04

3

спасибо !

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

«scripting.filesystemo bject»

очепятка !



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

05.11.2015, 14:14

4

Спасибо что заметили — может кто с правами исправит в теме, я в закромах уже подправил



0



132 / 15 / 2

Регистрация: 27.11.2013

Сообщений: 509

06.11.2015, 12:16

5

У меня тоже макрос не прерывается стандартными средствами — Breake, Сtrl. Тока если вырубить файл через диспетчер. А на самодельную кнопку команду break насадить никак нельзя?
У меня кстати и некоторые функциональные клавиши не работают. Например, F4 — отн/ абс ссылки в формулах. Это чето программное, я подозреваю. Lenovo, епта, чо с них взять. Под функциональные клавиши можно код VBA написать? Подскажите хотя бы тему, где рыть



0



Аксима

6076 / 1320 / 195

Регистрация: 12.12.2012

Сообщений: 1,023

06.11.2015, 15:18

6

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

Под функциональные клавиши можно код VBA написать?

Насчет всех кнопок не знаю, но вот эмулятор кнопки F4, кажется, получилось сделать:

Visual Basic
1
2
3
4
5
6
7
8
Sub ChangeAbsoluteRelative()
    Dim i As Long, cellFormula As String, convFormula As String, cell As Range
    Set cell = ActiveCell: cellFormula = cell.Formula
    For i = 1 To 4
        convFormula = Application.ConvertFormula(cellFormula, Application.ReferenceStyle, Application.ReferenceStyle, i)
        If cellFormula = convFormula Then cell.Formula = Application.ConvertFormula(cellFormula, Application.ReferenceStyle, Application.ReferenceStyle, i Mod 4 + 1)
    Next i
End Sub

Пробуйте.

С уважением,

Аксима



1



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

06.11.2015, 15:18

Помогаю со студенческими работами здесь

Если навел мышкой на 1 то вывести «единица», если 2 то «Двойка», если на 3 то «тройка» и тд., и это все в одной функции
Ребят, выручайте.

&lt;div id=&quot;1&quot; onMouseOver=&quot;inf()&quot; onMouseOut=&quot;noinf()&quot;&gt;1&lt;/div&gt;
&lt;br&gt; …

Как запретить использовать клавиши масштабирования и «Ctrl + Колесу прокрутки» и обновления страницы «F5» в WebBrowser — е ?
Как запретить использовать клавиши масштабирования и &quot;Ctrl + Колесу прокрутки&quot; и обновления…

Как написать регулярное выражение для выдергивания английских букв и символов: «+», «,», «:», «-«, » «, «!», «?» и «.»
Не могу ни как собразить как написать регулярное выражение для выдергивания английских букв и…

Операции со строками.Заменить в строке букву «а» на «с», если она стоит на чётном месте,и на «у» если на нечётном
Дана строка.Заменить в строке букву &quot;а&quot; на &quot;с&quot;, если она стоит на чётном месте,и на &quot;у&quot; если на…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

6

Цикл Do While… Loop в VBA Excel, его синтаксис и описание отдельных компонентов. Примеры использования цикла Do While… Loop.

Цикл Do While… Loop в VBA Excel предназначен для повторения блока операторов пока выполняется заданное условие (возвращается значение True). Синтаксис этого цикла аналогичен синтаксису цикла Do Until… Loop, который повторяется до тех пор, пока условие не выполняется (возвращается значение False).

Синтаксис цикла Do While… Loop существует в двух вариантах, определяющих, когда проверяется условие.


Условие проверяется до выполнения операторов:

Do While condition

    [ statements ]

    [ Exit Do ]

    [ statements ]

Loop


Условие проверяется после выполнения операторов:

Do

    [ statements ]

    [ Exit Do ]

    [ statements ]

Loop While condition


В квадратных скобках указаны необязательные атрибуты цикла Do While… Loop.

Компоненты цикла Do While… Loop

Компонент Описание
condition Обязательный атрибут. Условие выполнения цикла. Выражение, возвращающее значение типа Boolean.
statements Необязательный* атрибут. Операторы вашего кода.
Exit Do Необязательный атрибут. Оператор выхода** из цикла до его окончания.

*Если не использовать в цикле свой код, смысл применения цикла теряется.

**Очень полезный оператор для цикла Do While… Loop, так как при некоторых обстоятельствах он может стать бесконечным. Если такой риск существует, следует предусмотреть возможность выхода из бесконечного цикла VBA с помощью оператора Exit Do.

Примеры циклов Do While… Loop

Простейшие циклы

Цикл Do While… Loop с условием до исполняемых операторов:

Sub test1()

Dim a As Byte

  Do While a < 10

    a = a + 1

  Loop

MsgBox a

End Sub

Цикл Do While… Loop с условием после исполняемых операторов:

Sub test2()

Dim a As Byte

  Do

    a = a + 1

  Loop While a < 10

MsgBox a

End Sub

В обоих случаях окно MsgBox выведет число 10. Когда значение переменной a будет равно 10, проверяемое условие выдаст значение False, и цикл будет остановлен.

Проход по строкам листа

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

Дни Игрок Брошено Попало в цель
1 день Белка 1 15 6
1 день Белка 2 12 7
2 день Белка 1 14 8
2 день Белка 2 16 7
3 день Белка 1 20 9
3 день Белка 2 14 6
4 день Белка 1 26 10
4 день Белка 2 13 5
5 день Белка 1 17 4
5 день Белка 2 21 7

Исходя из этих данных необходимо узнать, сколько шишек осталось у Белки 1 в дупле. Для этого необходимо вычесть из 100 шишек количество выброшенных Белкой 1 и прибавить шишки, заброшенные в ее дупло Белкой 2. Вычисления начинаем со второй строки (в первой заголовки) и в условии для цикла Do While… Loop указываем «первая ячейка текущей строки не является пустой». Таблица должна начинаться с первой ячейки рабочего листа «A1», и под ней, как минимум, одна строка должна быть пустой, точнее, первая ячейка этой строки.

Sub test3()

Dim i As Long, n As Long

i = 2

n = 100

  Do While Cells(i, 1) <> «»

    If Cells(i, 2) = «Белка 1» Then

      n = n Cells(i, 3)

    Else

      n = n + Cells(i, 4)

    End If

    i = i + 1

  Loop

MsgBox n

End Sub

Результат, выведенный в информационном сообщении MsgBox, будет равен 40. Вы можете скопировать таблицу на рабочий лист книги Excel и поэкспериментировать с кодом VBA.

Бесконечный цикл и Exit Do

Пример бесконечного цикла:

Sub test4()

Dim a As Byte

  Do While a < 10

  a = a + 1

    If a = 9 Then

      a = 0

    End If

  Loop

End Sub

При запуске этой процедуры цикл Do While… Loop начинает выполняться бесконечно. Мне приходилось останавливать бесконечные циклы VBA в Excel 2000 и Excel 2016. В Excel 2000 помогло сочетание клавиш Ctrl+Break, а в Excel 2016 при закрытии редактора VBA крестиком появляется окно:

Информационное окно «Microsoft Excel не отвечает»

Информационное окно «Microsoft Excel не отвечает»

Ожидать отклика программы нет смысла, поэтому нажимаем «Перезапустить программу» или «Закрыть программу».

Совет: перед запуском процедуры с циклом Do While… Loop, который может стать бесконечным, обязательно сохраните книгу, иначе, при принудительном закрытии редактора VBA ваши изменения будут утеряны. Кроме того, при принудительном закрытии редактора VBA, Excel может отключить макросы. Включите их в окне «Центр управления безопасностью», открыть которое можно по ссылке «Безопасность макросов» на ленте в разделе «Разработчик». Подробнее о включении макросов в разных версиях Excel читайте в статье: Как разрешить выполнение макросов в Excel?.

Пример использования оператора Exit Do:

Sub test5()

Dim a As Byte, n As Long

  Do While a < 10

  a = a + 1

  n = n + 1

    If a = 9 Then

      a = 0

    End If

    If n = 1000 Then

      Exit Do

    End If

  Loop

MsgBox n

End Sub

Когда число итераций цикла дойдет до 1000, он будет завершен, и информационное сообщение MsgBox выведет на экран число повторений цикла Do While… Loop из этого примера.


Содержание

  1. Использование Do. Операторы цикла
  2. Повторяющиеся инструкции, когда условие имеет значение True
  3. Повторяющиеся инструкции до тех пор, пока условие не станет true
  4. Выход из do. Оператор Loop из цикла
  5. См. также
  6. Поддержка и обратная связь
  7. Оператор Exit (Visual Basic)
  8. Синтаксис
  9. Операторы
  10. Комментарии
  11. Пример 1
  12. Пример 2
  13. Пример 3
  14. Оператор While. End While (Visual Basic)
  15. Синтаксис
  16. Компоненты
  17. Комментарии
  18. Выход в режиме «Пока»
  19. Пример 1
  20. Пример 2
  21. Пример 3
  22. Циклы в VBA
  23. Оператор цикла «For» в Visual Basic
  24. Цикл «For … Next»
  25. Цикл «For Each»
  26. Оператор прерывания цикла «Exit For»
  27. Цикл «Do While» в Visual Basic
  28. Exit statement
  29. Syntax
  30. Remarks
  31. Example
  32. See also
  33. Support and feedback

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

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

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

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

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

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

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

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

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

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

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

См. также

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

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

Источник

Оператор Exit (Visual Basic)

Завершает процедуру или блок и немедленно передает управление инструкции после вызова процедуры или определения блока.

Синтаксис

Операторы

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

Exit For
Немедленно завершает For цикл, в котором он отображается. Выполнение продолжается с инструкцией , следующей за оператором Next . Exit For может использоваться только в цикле For . Next или For Each . Next . При использовании во вложенных For циклах Exit For выходит из самого внутреннего цикла и передает управление следующему более высокому уровню вложения.

Exit Function
Немедленно завершает процедуру Function , в которой она отображается. Выполнение продолжается с инструкцией, следующей за оператором, который вызвал процедуру Function . Exit Function может использоваться только внутри Function процедуры.

Чтобы указать возвращаемое значение, можно присвоить его имени функции в строке перед оператором Exit Function . Чтобы назначить возвращаемое значение и выйти из функции в одном операторе, можно использовать оператор Return.

Exit Property
Немедленно завершает процедуру Property , в которой она отображается. Выполнение продолжается инструкцией, которая вызвала процедуру Property , то есть инструкцией, запрашивающей или устанавливающей значение свойства. Exit Property может использоваться только в процедуре Get свойства или Set .

Чтобы указать возвращаемое значение в процедуре Get , можно присвоить значение имени функции в строке перед оператором Exit Property . Чтобы назначить возвращаемое значение и выйти из Get процедуры в одном операторе Return , можно использовать оператор .

Set В процедуре Exit Property оператор эквивалентен оператору Return .

Exit Select
Немедленно выходит из Select Case блока, в котором он отображается. Выполнение продолжается с инструкцией , следующей за оператором End Select . Exit Select может использоваться только внутри Select Case оператора .

Exit Sub
Немедленно завершает процедуру Sub , в которой она отображается. Выполнение продолжается с инструкцией, следующей за оператором, который вызвал процедуру Sub . Exit Sub может использоваться только внутри Sub процедуры.

Sub В процедуре Exit Sub оператор эквивалентен оператору Return .

Exit Try
Немедленно выходит из Try блока или Catch , в котором он отображается. Выполнение продолжается с блоком Finally , если он есть, или с оператором после оператора в End Try противном случае. Exit Try может использоваться только внутри Try блока или Catch , а не внутри Finally блока.

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

Комментарии

Не путайте Exit операторы с End операторами . Exit не определяет конец оператора .

Пример 1

В следующем примере условие цикла останавливает цикл, если index переменная больше 100. Однако If оператор в цикле приводит к остановке Exit Do цикла, если переменная индекса больше 10.

Пример 2

В следующем примере возвращается значение имени myFunction функции , а затем используется Exit Function для возврата из функции:

Пример 3

В следующем примере оператор Return используется для назначения возвращаемого значения и выхода из функции:

Источник

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

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

Синтаксис

Компоненты

Термин Определение
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.

Пример 2

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

Пример 3

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

Источник

Циклы в VBA

Встречаются ситуации, когда от программы VBA требуется совершить несколько раз подряд один и тот же набор действий (то есть повторить несколько раз один и тот же блок кода). Это может быть сделано при помощи циклов VBA.

К циклам VBA относятся:

Далее мы подробно рассмотрим каждый из этих циклов.

Оператор цикла «For» в Visual Basic

Структура оператора цикла For в Visual Basic может быть организована в одной из двух форм: как цикл For … Next или как цикл For Each.

Цикл «For … Next»

Цикл For … Next использует переменную, которая последовательно принимает значения из заданного диапазона. С каждой сменой значения переменной выполняются действия, заключённые в теле цикла. Это легко понять из простого примера:

В этом простом цикле For … Next используется переменная i, которая последовательно принимает значения 1, 2, 3, … 10, и для каждого из этих значений выполняется код VBA, находящийся внутри цикла. Таким образом, данный цикл суммирует элементы массива iArray в переменной Total.

В приведённом выше примере шаг приращения цикла не указан, поэтому для пошагового увеличения переменной i от 1 до 10 по умолчанию используется приращение 1. Однако, в некоторых случаях требуется использовать другие значения приращения для цикла. Это можно сделать при помощи ключевого слова Step, как показано в следующем простом примере.

Так как в приведённом выше примере задан шаг приращения равный 0.1, то переменная dTotal для каждого повторения цикла принимает значения 0.0, 0.1, 0.2, 0.3, … 9.9, 10.0.

Для определения шага цикла в VBA можно использовать отрицательную величину, например, вот так:

Здесь шаг приращения равен -1, поэтому переменная i с каждым повторением цикла принимает значения 10, 9, 8, … 1.

Цикл «For Each»

Цикл For Each похож на цикл For … Next, но вместо того, чтобы перебирать последовательность значений для переменной-счётчика, цикл For Each выполняет набор действий для каждого объекта из указанной группы объектов. В следующем примере при помощи цикла For Each выполняется перечисление всех листов в текущей рабочей книге Excel:

Оператор прерывания цикла «Exit For»

Оператор Exit For применяется для прерывания цикла. Как только в коде встречается этот оператор, программа завершает выполнение цикла и переходит к выполнению операторов, находящихся в коде сразу после данного цикла. Это можно использовать, например, для поиска определённого значения в массиве. Для этого при помощи цикла просматривается каждый элемент массива. Как только искомый элемент найден, просматривать остальные нет необходимости – цикл прерывается.

Применение оператора Exit For продемонстрировано в следующем примере. Здесь цикл перебирает 100 записей массива и сравнивает каждую со значением переменной dVal. Если совпадение найдено, то цикл прерывается:

Цикл «Do While» в Visual Basic

Цикл Do While выполняет блок кода до тех пор, пока выполняется заданное условие. Далее приведён пример процедуры Sub, в которой при помощи цикла Do While выводятся последовательно числа Фибоначчи не превышающие 1000:

В приведённом примере условие iFib_Next

Источник

Exit statement

Exits a block of Do…Loop, For…Next, Function, Sub, or Property code.

Syntax

Exit Do
Exit For
Exit Function
Exit Property
Exit Sub

The Exit statement syntax has these forms:

Statement Description
Exit Do Provides a way to exit a Do. Loop statement. It can be used only inside a Do. Loop statement. Exit Do transfers control to the statement following the Loop statement. When used within nested Do. Loop statements, Exit Do transfers control to the loop that is one nested level above the loop where Exit Do occurs.
Exit For Provides a way to exit a For loop. It can be used only in a For. Next or For Each. Next loop. Exit For transfers control to the statement following the Next statement. When used within nested For loops, Exit For transfers control to the loop that is one nested level above the loop where Exit For occurs.
Exit Function Immediately exits the Function procedure in which it appears. Execution continues with the statement following the statement that called the Function.
Exit Property Immediately exits the Property procedure in which it appears. Execution continues with the statement following the statement that called the Property procedure.
Exit Sub Immediately exits the Sub procedure in which it appears. Execution continues with the statement following the statement that called the Sub procedure.

Do not confuse Exit statements with End statements. Exit does not define the end of a structure.

Example

This example uses the Exit statement to exit a For. Next loop, a Do. Loop, and a Sub procedure.

See also

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

How to Exit, End, or Break out of loops in Excel.

This tutorial includes breaking out of While, Do, and For loops.

Sections:

Break out of a Do Loop

Break out of a For Loop

Break out of a While Loop

Break out of a Loop when a Condition is Met

Notes

Break out of a Do Loop

This will exit or break out of a Do loop, including Do While and Do Until loops. When this occurs, script execution will continue after the current loop. If there are Do loops nested within Do loops, only the one directly containing the Exit statement will be broken out of and execution of the script will continue with the next containing Do loop.

Exit Do

Simply put this in the place where you want to exit the loop.

Break out of a For Loop

This will exit or break out of a For loop, which includes a For…Next loop and a For Each…Next loop. When this occurs, script execution will continue after the current loop. If there are nested For loops, only the one directly containing the Exit statement will be broken out of and execution of the script will continue with the next containing For loop.

Exit For

Simply put this in the place where you want to exit the loop.

Break out of a While Loop

This will exit or break out of a While loop. When this occurs, script execution will continue after the current loop. If there are While loops nested within While loops, only the one directly containing the Exit statement will be broken out of and execution of the script will continue with the next containing While loop.

Exit While

Simply put this in the place where you want to exit the loop.

Break out of a Loop when a Condition is Met

Now you know the simple syntax for exiting a loop, but it’s not useful without a condition.

Include the Exit statement within an IF condition. Use the IF condition to check if it is time to exit from the loop or not.

Here is a very basic loop example along with a condition that checks from when the loop needs to be canceled or exited.

Sub Loop_Death()

For i = 1 To 10

    'show some output
    MsgBox i

    If i = 5 Then

        'exit the loop
        Exit For

    End If

Next i

End Sub

Here it is in Excel for better reference:

3400f030ce7363c7e00549c99c10b8af.jpg

Here, I made a simple For loop that should run 10 times. However, I placed an IF statement that checks when the variable i has reached 5 and, when this happens, the Exit For line of code will run and the For loop will be broken out of or exited and, since there is no other loop containing this loop or any code after the loop, there is nothing else for the macro to do and so its execution will end.

I included a msgbox output that will display the value contained within the variable i, which will just be the number of times the loop has run since that variable is incremented each time the loop runs. This feature is there just to help you visualize the exit from the For loop.

You can also use a one-line IF statement like this to streamline the code:

Sub Loop_Death()

For i = 1 To 10

    'show some output
    MsgBox i

    If i = 5 Then Exit For

Next i

End Sub

938fd637564a37da7fba562401a712e7.jpg

Notes

This is a basic feature of VBA and Macros but it is very important and it will help you add a lot of control to your macros. Make sure to memorize these three simple Exit statements for the loops.

There is no Exit statement for a While Wend loop. If you need to exit one of these loops, simply change it to a Do While or Do Until loop.

Don’t forget to download the Excel file that accompanies this tutorial and test this macro out.

Similar Content on TeachExcel

Loop through a Range of Cells in a UDF in Excel

Tutorial:
How to loop through a range of cells in a UDF, User Defined Function, in Excel. This is …

Loop through a Range of Cells in Excel VBA/Macros

Tutorial: How to use VBA/Macros to iterate through each cell in a range, either a row, a column, or …

Highlight, Sort, and Group the Top and Bottom Performers in a List in Excel

Tutorial:
How to highlight the rows of the top and bottom performers in a list of data.
This allows…

5 Simple Tips for Making BETTER Macros in Excel!

Tutorial:
5 ways to make better Macros in Excel — fewer errors, smoother coding, less fuss!
These 5…

Sort Data With Headers in Ascending Order in Excel

Macro: Macro that sorts data that has headers in ascending order in Excel. This macro assumes tha…

Create a Column Chart with a Macro in Excel

Macro: This macro adds a column chart to Excel. This is an easy to use macro that allows you to q…

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

Понравилась статья? Поделить с друзьями:
  • Vba excel преобразовать строку в дату
  • Vba excel преобразовать массив в строку
  • Vba excel преобразовать значение в число
  • Vba excel преобразовать дату в текст в excel
  • Vba excel преобразование числа в текст