Страницы: 1
RSS
Применение циклов
 
Уважаемые знатоки, объясните пожалуйста различия в применении циклов: For Next, For Each и Do Loop (без While), т.е. для чего лучше применять каждый из этих циклов?
 
ИМХО лутьше почитать какую нибудь книжку на эту тему, там все подробно расписано
Оружие не убивает Человека! Человек убивает Человека!!!
 
Например, For Each используется для обработки циклом каких-либо объектов (например, ячеек в диапазоне, объектов на форме (TextBox и т.д.). Например, так:  
 
Sub Test()  
Dim iCell As Range 'объявляем переменную типа Range (т.е. диапазон ячеек (ячейка или диапазон это и есть объект, у которого есть свои свойства)  
 
For Each iCell In Range("A1:A10")  
  MsgBox iCell.Address  
Next iCell  
 
End Sub  
 
Т.е. в цикле мы обработали все объекты и узнали адрес каждого объекта (ячейки)  
 
 
For...Next - используется обычно с переменной, которую нужно увеличивать на 1 (или на указанный шаг (Step) или же уменьшать на 1 (или на указанный шаг)  
 
Sub Test()  
Dim i As Long 'объявляем нашу переменную, которая будет увеличиваться  
 
   For i = 1 To 5  
       Cells(i, 1) = i  
   Next  
End Sub  
 
Т.е. в цикле мы обработали переменную, увеличивая её на 1 (Cells(i,1) - это для примера)  
 
Do...Loop - используются обычно с While или Until, т.е. выполнять цикл "пока ..." (пока выполняется условие) или выполнять цикл "до ..." (до момента пока не наступит какое-то условие)  
 
 
Do... Loop без While и Until - по-моему, это бесконечный цикл ))))  
 
Sub Test()  
Dim i As Long  
 
   Do  
      msgbox "Привет!", vbInformation, ""  
   Loop  
End Sub  
 
P.S. Последний пример не советую запускать! Это бесконечный цикл!
 
{quote}{login=}{date=08.08.2010 01:48}{thema=}{post}  
P.S. Последний пример не советую запускать! Это бесконечный цикл!{/post}{/quote}  
CTRL+Break(Pause)его остановит
Оружие не убивает Человека! Человек убивает Человека!!!
 
Есть несколько особенностей циклов, которые не освещаются в литературе подробно, и ускользают даже от внимательного читателя. Вот, навскидку:  
 
1. Цикл For Each можно использовать не только для перебора элементов коллекции (например, коллекции ячеек в диапазоне), но и для перебора элементов массива. Причем массив может формироваться "тут же" функцией Array или Split. Этот фрагмент перевернет названия перечисленных листов:  
 
Dim s  
For Each s In Array("Лист1", "Лист3")  
   Sheets(s).Name = StrReverse(Sheets(s).Name)  
Next  
 
или  
 
Dim s  
For Each s In Split("Лист1,Лист3", ",")  
   Sheets(s).Name = StrReverse(Sheets(s).Name)  
Next  
 
2. Цикл Do...Loop вполне может использоваться без While или Until, если предусмотрен выход из цикла с помощью Exit Do. Этот фрагмент будет выдавать сообщение, пока пользователь не нажмет "Отмена" или "крестик":  
 
Do  
   If MsgBox(IIf(Rnd() < 0.5, "Орел", "Решка"), vbOKCancel) = vbCancel Then Exit Do  
Loop  
 
3. После "нормального" выхода из цикла For Each, переменная цикла содержит Nothing. Это можно использовать для определения того, как произошел выход из цикла - после перебора последнего элемента или по Exit For. Этот фрагмент определяет, содержится ли в книге лист с заданным именем:  
 
Dim sh As Worksheet  
For Each sh In Worksheets  
   If sh.Name = "Лист2" Then Exit For  
Next  
If sh Is Nothing Then MsgBox "Лист не найден": Exit Sub  
 
ЗЫ 72222 - каре!
 
Вот так потихоньку объясним значение циклов :)
Страницы: 1
Читают тему
Наверх