Цикл Do Loop (While/Until) - (Серия VBA 10)
Вставка
- Опубліковано 20 жов 2018
- Всем привет! Сегодняшний видео-урок посвящен теме цикла Do Loop в VBA. В этом видео мы с Вами:
• Познакомимся с двумя методами объявления условий в цикле Do Loop- While и Until
• Узнаем, где и как объявлять условия в цикле Do Loop
• Поговорим о методе Exit Do
• Узнаем, что делать если случайно создали бесконечный цикл, который не заканчивается (как While, так и For)
• получим новое домашнее задание, решение которого будет представлено в следующем видео-уроке
Всем приятного просмотра и успехов в VBA! Если это видео было для Вас полезным - ставьте лайк, а если Вы еще не подписаны на канал, то подписывайтесь :)
Мега-мега-мегаграмотное изложение материала и продуктивные уроки! Редкость на просторах интернета! Низкий Вам поклон за столь эффективное изложение материала по VBA! Вы педагог от Бога, продолжайте в том же духе! Низкий поклон за труды! Не поленюсь и напишу это коммент по каждым видео курса!!!
Здравствуйте, Андрей!
Со своей стороны точно также не поленюсь и поблагодарю Вас за этот приятный комментарий под каждым видео точно так же :)
С уважением и хорошего Вам дня,
ХБ
Вы с Большой буквы Учитель !!! Продолжайте плииииз. Я ребенка на Ваших уроках приобщаю к развитию
Билял, спасибо за ваши видеоуроки! Смотреть одно удовольствие: без воды, четкая речь, красивые видео с замедлениями, где это нужно, с увеличением... Просто 🔥🔥🔥! Знаю, что повторяю слова других подписчиков, но невозможно удержаться! Спасибо огромное!!! Удачи вам во всех ваших делах!!!
Отлично рассказываете, все понятно! И очень круто, что даёте домашку) чтобы не просто посмотрели и забыли, но и научились применять полученные данные! Продолжайте в том же духе!)
Спасибо огромнейшее в очередной раз!
Самое главное усвоить для себя:
Do While - делать, пока равно/не равно/ больше/ меньше для какого-то значения.
Do Until - делать, пока не станет равно /не равно/больше/меньше какого-то значения.
Вот домашняя работа двумя способами:
Sub hw4()
Dim i As Long
Dim warning As String
warning = "да"
i = 1
Do While warning = "да"
warning = InputBox("Продолжаем выполнение цикла?" & vbCrLf & "№ цикла равен " & i)
If warning "да" Then
MsgBox ("Действие остановлено на цикле под номером " & i)
End If
i = i + 1
Loop
End Sub
--------------------------------------------------------------------------------------------------------------------------------
Sub hw5()
Dim i As Long
Dim warning As String
i = 1
Do
warning = InputBox("Не продолжаем выполнение цикла?" & vbCrLf & "№ цикла равен " & i)
If warning "нет" Then
MsgBox ("Действие остановлено на цикле под номером " & i)
End If
i = i + 1
Loop Until warning = "да"
End Sub
Здравствуйте, Владимир!
Большое спасибо Вам тоже! Очень здорово, что Вы тренируетесь и для решения поставленных задач используете интересные подходы -так держать :)
Кроме того, в своём комментарии Вы очень здорово, в короткой форме суммировали принцип работы Do Loop! :)
Хорошего Вам дня, Владимир!
С уважением,
ХБ
поставьте в один из примеров vbNewLine вместо vbCrLf будет еще круче)
Ставлю лайки на твои видео ещё перед началом просмотра, чтобы не забыть это сделать после, спасибо за труд)
Спасибо за уроки! Очень интересно смотреть и делать домашние задания. Больше примеров (если это возможно). Жду продолжения!
Здравствуйте, Дмитрий!
Большое спасибо за Ваш комментарий! Рад, что видео было для вас полезным. Следующий урок уже на стадии разработки и скоро появится на канале, так что stay tuned :)
Хорошего Вам вечера :)
P.S. Постараюсь включить в следующие видеоуроки больше примеров и домашних заданий :)
Реально годный материал. Особенно для анализа по временным периодам.
Здравствуйте, Герман!
Спасибо за Ваш комментарий :)
С уважением и хорошего Вам вечера,
ХБ
отличные уроки, смотрю с удовольствием! огромное спасибо!
Привет! Спасибо за урок! Жду продолжения!
Здравствуйте, Сергей! На этих выходных постараюсь снять и загрузить следующее видео. Пока думаю над его темой (вероятно, сниму либо о Array, либо о Collection). Возможно у Вас есть предложения/пожелания, касательно того, что Вы хотели бы увидеть в следующем видео? Если да, можете смело поделиться ими в комментариях :)
Здорово когда получается, спасибо Вам большое !
Не знал, что так можно обозначить диапазон с переменной, всегда пользовался cell. Билял молодец! Теперь смогу писать более короткие коды.
знаний из этих 10 уроков мне хватило, чтобы написать программу, которая вычисляет выборочный коэффициент корреляции, а потом проверяет его на значимость при заданном уровне значимости, спасибо!
Супер! Спасибо
Билял, благодарю! Ура! Я справился с ДЗ самостоятельно )
В очередной раз спасибо. ДЗ ниже
Sub DZ_DO()
Dim z As String
Dim i As Long
i = 1
Do Until z = "OK"
z = InputBox("Не вводите 'OK' для повторения цикла" & Chr(10) & "Номер цикла: " & i)
i = i + 1
Loop
End Sub
Добрый день, а что означает Chr(10) ?
@@user-qg2nv7vv4x это символ абзаца
Желаю развития вашему каналу
Отличные видео, для тех, кто только начинает, с нужными и наглядными примерами! Молодец
Можно где-нибудь с вами общаться?
Молодец! Видно, что стараешься! Это первый урок, когда в редакторе я увидел одновременно несколько процедур - это порадовало. Стесняюсь спросить. Почему бы, для пошаговой проверки кода, не использовать F8 вместо MsgBox...? Было бы нагляднее
А заодно и использовать переключатель "Procedure View" - "Full Module View".
Но, всё равно молодец!!!
Здравствуйте!
Спасибо за Ваш комментарий!
Одной из причин, почему я использовал в начальных видео Msgbox для пошаговой проверки кода - это большая простота и наглядность для людей, только знакомящихся с VBA. Кроме того, в начальных видео подобный метод, как мне кажется, лучше показывает новичку, что VBA по-настоящему делает что-то в рабочем файле, давая пользователю возможность интерактивно работать с процедурой (пусть и на столь банальном примере с диалоговым окном). Хотя, безусловно, Вы правы в том, что F8 в комбинации с Watch Window является намного более продуктивным методом - и именно исключительно данный метод я буду использовать в дальнейших видеоуроках.
Хороших Вам выходных и еще раз спасибо за комментарий! :)
С уважением,
ХБ
@@BilyalKhassenov Вы, совершенно правы, Msgbox дает большую наглядность! Спасибо большое за ценные видео уроки!
Привет! Уроки потрясающие, спасибо! Есть ли случайно видео о двойных циклах, когда есть внутренний и внешний в одной задачке?
Большое спасибо за уроки, недавно их нашел и очень доволен. Моя версия Д/З:
Sub Homework()
Dim checker As String
Dim Number As Long
Number = 0
Do Until checker = "OK"
checker = InputBox("Не пишите 'OK' для повторения цикла! Количество пройденных циклов " & Number)
If checker "OK" Then
Number = Number + 1
End If
Loop
End Sub
PS: Почему -то слетает русская кодировка при копировании кода в комментарий
Добрый день! Спасибо за уроки! Скажите пожалуйста, что за вкладка ACROBAT у Вас в EXCEL?
спс
Niletto красавчик
разъясните пожалуйста vbCrLf и NewLine, ответ на домашку смотрел в коментах и очень благодарен что выложили ответ
Здравствуйте! В первую очередь хотел бы поблагодарить Вас за Ваши труды и за то, как легко и доступно Вы преподносите информацию. По Вашему курсу очень легко заниматься и информация усваивается отлично. Хотел задать Вам вопрос по поводу этого урока. на 12:09 Вы показали пример преждевременного выхода из цикла Do Until. В его структуре сначала идёт условие прекращения цикла, затем в ячейку вписывается значение, соответствующее переменной, а уже после проводится проверка на выполнение условия досрочного выхода. Разве не правильнее было бы расположить условие проверки на досрочный выход до того, как в ячейку впишется значение переменной? Иначе по логике получается, что, допустим, фраза "Stop" была бы в ячейке А1, но программа, не проверив условие досрочного выхода, заменила бы эту фразу на номер строки и благополучно продолжила свою работу.
Билял у меня не получается с DoLoop. Выходит такая надпись "Compile error: Syntax error".
2021
Ну вообще until и while вполне взаимозаменяемы, только надо знак сравнения изменить
я нажимаю ок и все ни чего не происходит, обратно закрывается, почему? Как у вас не получается?
do Until наоборот, ок и на анг, и на русс нажимала , не уходит этот окно ?? боже , что делать? ......
Друзья, помогите пожалуйста!
Пишу код у меня выдает ошибку - вообще не представляю, что с этим делать.
Sub описание_оценки
Dim i As Range
For Each i In Range ("B2:B6")
If i = 3 Then i.Offset (0,1) = " удовлетворительно"
Elseif i = 4 Then i.Offset (0,1) = "хорошо"
End if
Next i
End sub
Компилятор доходит до Elseif и пишет, что ошибка в том, что нет if. Если исправить Elseif просто на Else все то же самое. Если просто убрать второе условие, то просто if работает. Уже всю голову сломал. Буду очень признателен за помощь
Все нашел решение на одном из форумов - нужно после Then писать с новой строки. В жизни бы до этого не додумался
А почему цикл выполнялся бесконечно? Разве ячеек в excel не конечное значение?
Если честно, until кажется немного бесполезной вещью в цикле do, можно ведь поступить так
do while ... ...
...
...
...
loop
И еще смешная вещь получается:
do until some_p "some_t" 'Это фактически равно фразе do while some_p = "some_t"
...
loop
помогите решить задачу
Богатый дядюшка подарил мне 1 доллар в мой первый день рождения. В
каждый следующий день рождения он удваивал сумму подарка и прибавлял к
ней столько долларов, сколько лет мне исполнилось. Написать программу,
указывающую к какому дню рождению сумма подарка превысит 100
долларов.
Sub lesson10_doloop_homeWork()
Dim checker As String
Dim i As Long
i = 1
Do Until checker = "ОК"
checker = InputBox("Не пишите 'ОК' для повторения цикла!" & " Номер цикла: " & i)
i = i + 1
Loop
End Sub
Билял, ролики шикарные ,очень доступно. Но, блин. Слово "данный" это канцеляризм, нельзя его в таких количествах совать. В 90% его просто можно выбросить не теряя смысл, еще в каких-то случаях заменить.
Здравствуйте, Влад!
Полностью с Вами согласен! Сейчас, пересматривая свои первые ролики, точно так же вижу определенные моменты, которые можно было бы организовать более оптимальным образом. С другой стороны, таков процесс - все мы с чего-то начинаем и со временем совершенствуем свои навыки, в том числе и в области записи видеоуроков.
С уважением и хороших Вам выходных,
Билял
P.S. Когда-нибудь я думаю снять вторую версию курса по VBA с нуля, в которой учёл бы все недо-статки первого курса, еще более насытил бы эти новые уроки полезным материалом, сохраняя при этом так же и короткий хронометраж плейлиста 😊
@@BilyalKhassenov у вас редкая способность понятно объяснять 👍
Автор ничего не сказал о принципиальном отличии конструкции
Do While/Until ...
Loop
от конструкции
Do
Loop While/Until ...
В первом варианте цикл при определённых условиях может НИ РАЗУ не передать управление телу цикла, то есть вообще не выполняться.
Во втором варианте управление будет передано телу цикла по крайней мере ОДИН РАЗ НЕЗАВИСИМО от условий цикла, поскольку НИКАКИЕ условия при входе в цикл НЕ проверяются.
Именно поэтому (и только поэтому!) в язык VBA (и в VB) введены ЭТИ ДВЕ синтаксические конструкции, НИЧЕМ ДРУГИМ друг от друга не отличающиеся.
Жаль - досадное упущение автора урока.