Выход из While

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

Помогите выйти пожалуйста из While . Вот код:

Код: Выделить всё

 
Sub test()
Dim a As String
Dim total As Integer
Dim start_summ As Integer
Dim stop_summ As Integer
i = 4
While Sheets("Total").Cells(i, 3).Value <> ""
i = i + 1
Wend
i = i - 1
For j = 4 To i
a = Sheets("Total").Cells(j, 3).Text
If a = "Total" Then
total = j
start_summ = j + 1
j = j + 1
While Sheets("Total").Cells(j, 3).Text <> "Total"
[color=red]If j > i Then[/color]
[color=red]stop_summ = i[/color]
[color=red]exit While[/color]
[color=red]End If[/color]
j = j + 1
Wend
j = j - 1
stop_summ = j
Sheets("Total").Cells(total, 5).Formula = "=SUM(E" & CStr(start_summ) & ":E" & CStr(stop_summ) & ")"
End If
Next j
End Sub

Я выделил красным цветом часть кода, где необходимо подобное условие. Почему то Exit While не работает в данной ситуации, не могли бы объяснить в чем дело ? И как выйти из цикла, при данном условии?
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Лучше использовать такой цикл:

Код: Выделить всё

[color=darkblue]Sub[/color] test()
    [color=darkblue]Dim[/color] sh [color=darkblue]As[/color] Worksheet: [color=darkblue]Set[/color] sh = Sheets("Total")
    [color=darkblue]Dim[/color] cell [color=darkblue]As[/color] Range, ra [color=darkblue]As[/color] Range: Application.ScreenUpdating = [color=darkblue]False[/color]
    [color=darkblue]Set[/color] ra = sh.Range(sh.[c4], sh.Range("c" & Rows.Count).End(xlUp))

    [color=darkblue]For[/color] [color=darkblue]Each[/color] cell [color=darkblue]In[/color] ra.Cells
        [color=darkblue]If[/color] cell = "Total" [color=darkblue]Then[/color]
            [color=green]' код[/color]
        [color=darkblue]End[/color] [color=darkblue]If[/color]
    [color=darkblue]Next[/color] cell
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
Вообще, в Вашем случае можно (и нужно) обойтись без циклов.
Но, поскольку задачу Вы не сформулировали, а из кода мало что понятно, помочь ничем не могу...

Кто Вам сказал, что VBA допускает запись exit While?
Не заметили, что редактор подсвечивает эту строку красным?

Вот такой вариант будет работать:

Код: Выделить всё

            [color=darkblue]Do[/color] [color=darkblue]While[/color] Sheets("Total").Cells(j, 3).Text <> "Total"
                [color=darkblue]If[/color] j > i [color=darkblue]Then[/color]
                    stop_summ = i
                    [B][color=darkblue]Exit[/color] [color=darkblue]Do[/color][/B]
                [color=darkblue]End[/color] [color=darkblue]If[/color]
                j = j + 1
            [color=darkblue]Loop[/color]
            j = j - 1
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
kuznetsovSergey
Сообщения: 163
Зарегистрирован: 05 мар 2009, 11:27

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