Есть несколько особенностей циклов, которые не освещаются в литературе подробно, и ускользают даже от внимательного читателя. Вот, навскидку:
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 - каре!