Вопрос про циклы

Программирование на Visual Basic for Applications
Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Вопрос про циклы

Сообщение Calvin » 18.11.2003 (Вт) 17:02

Люди добрые, глупый, но все же вопрос.
Не могу найти цикл, который был бы как For to Next, только счетчик имел не сплошой диапазон от стартовой точки до конечной, а допустим прерывался и некотоые значения обходил, ну типа так:
Код: Выделить всё
for i={101 to 124} & {202 to 224}

ну типа так :lol: ....только не смейтесь
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 18.11.2003 (Вт) 17:18

На сколько мне известно, такого сервиса в VB нет.
Делай два цикла или в одном проверяй диапазон
Код: Выделить всё
For i = 101 To 224
    Select Case i
    Case 101 To 124, 202 To 224
   
        'тело цикла
   
    End Select
Next

или
Код: Выделить всё
For i = 101 To 224
   
    Select Case i
    Case 101 To 124, 202 To 224
    Case Else: GoTo doNext
    End Select
   
    'тело цикла
   
doNext:
Next

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 19.11.2003 (Ср) 11:10

спасибо, понял...а вот еще вопрос: как выйти из вложенного в другой цикл цикла? (только не пользуясь метками)
Код: Выделить всё
Do
if ... then Exit Do
Loop Untill......

это не вложенный цикл, а вот здесь......Я идиот! Убейте меня, кто-нибудь!?
Код: Выделить всё
Do
Do
if ... then Exit (Exit) Do..... Я идиот! Убейте меня, кто-нибудь!?
Loop Untill......
Loop Untill......

ну вообщем из вложенного цикла нужно выйти из внешнего
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.11.2003 (Ср) 11:17

Exit Do (For) - это выход из текущего цикла
Можно сделать например так:
Код: Выделить всё
Dim ExitLevel As Integer
...
Do 'level 1
  ...
  Do 'level 2
    ...
    Do 'level 3
      ...
      Do 'level 4
        ...
        If ... Then ExitLevel = 2
        ...
        If ExitLevel >= 4 Then Exit Do
      Loop
      If ExitLevel >= 3 Then Exit Do
    Loop
    If ExitLevel >= 2 Then Exit Do
  Loop
  If ExitLevel >= 1 Then Exit Do
Loop
Lasciate ogni speranza, voi ch'entrate.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 19.11.2003 (Ср) 11:35

честно говоря понял, но не совсем.... :roll:
а можно на моем примере из одного вложения....
(я просто не пойму как переменная Exitlevel привязана к уровню вложений)
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.11.2003 (Ср) 12:25

Да никак она не привязана, это просто переменная. Если тебе нужно сделать выход из внутреннего цикла во внешний, то просто используешь Exit Do.
А вот если тебе надо организовать выход из всех циклов, тогда придется возится с переменными, либо флаговыми (чтобы выйти из всех уровней), либо наподобии того, что я предложил, чтобы выйти до какого-то определенного уровня (при ErrorLevel=1 произойдет выход из самого внешнего цикла, т.е. это выход из всех циклов). А проверку этой переменной надо делать сразу после Loop (или Next) внутреннего цикла.
Чтобы выйти на N уровней "вверх", можно подменить строку вида If ErrorLevel >= ... на строку вида If ErrorLevel>0 Then ErrorLevel=ErrorLevel-1:Exit Do.
Lasciate ogni speranza, voi ch'entrate.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 19.11.2003 (Ср) 16:30

Calvin писал(а):спасибо, понял...а вот еще вопрос: как выйти из вложенного в другой цикл цикла? (только не пользуясь метками)

Чиклы Do имеют выход Exit Do
Чиклы For имеют выход Exit For

a вот цикл While .. wend не имеет выхода, поэтому его можно вложить в цикл do или for, и по exit во внутренем цикле можно выходить из внешнего.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30

    TopList