возвращение в цикл после использования GoTo - PullRequest
0 голосов
/ 04 марта 2012

Я пробовал несколько методов, но не смог добиться успеха.Моя проблема - запуск цикла loop1, если выполняется какое-либо условие, запуск цикла loop2 до тех пор, пока не будет выполнено какое-либо условие, вернитесь обратно в loop1.

sub program()
Dim i As Integer
Dim q As Integer

For i=1 to 350
If Range("A"&i).value=1 And Range("D"&i).Value<15 Then Goto 1
Next i

1:q=0
  Do While List1.Range("A"&i+q).Value<>""
  Range("E"&i+q)="K"
  q=q+1
  Loop

End Sub

Я не нашел способ возврата после выполнения "1 цикла"вернуться к" Для следующего цикла "и продолжить для следующего я.Может быть, это невозможно, и я должен как-то включить код внутри первого цикла ?!спасибо

Ответы [ 3 ]

3 голосов
/ 04 марта 2012

Превратите код в 1 в функцию и вызовите ее вместо использования goto.После выхода из функции ваш первый цикл продолжит выполняться с того места, где он остановился.

1 голос
/ 04 марта 2012

Я на самом деле не знаю VBA (последний раз я использовал VB примерно в 1996 году), но это должно быть более или менее правильно:

sub program()
Dim i As Integer
Dim q As Integer

i = 1
Do while i <= 350
  If Range("A"&i).value=1 And Range("D"&i).Value<15 Then
    Do While i <= 350 And List1.Range("A"&i).Value<>""
      Range("E"&i)="K"
      i=i+1
    Loop
  Else
      i=i+1
  End If
Loop
end do
End Sub
0 голосов
/ 06 марта 2017

Использование GoTo не рекомендуется даже MSDN (, вы должны использовать его только для обработки ошибок в сочетании с Resume ), но, поскольку вы спросили, это подход:

Sub program()
    Dim i As Integer
    Dim q As Integer

    For i=1 to 350
        If ((Range("A"&i).value=1) And (Range("D"&i).Value<15)) Then Goto OtherLoop
FirstLoop:
    Next i

Exit Sub

OtherLoop:
   q=0
   Do While List1.Range("A"&i+q).Value<>""
       Range("E"&i+q)="K"
       q=q+1
   Loop
   Goto FirstLoop

End Sub

Вам нужен оператор Exit, чтобы ваш код не входил в «OtherLoop», когда он заканчивает «FirstLoop», а также нужно сказать ему, чтобы он вернулся туда, где вы были раньше.Опять же, избегайте использования этого материала.Циклы внутри циклов ( отступ для организации, пожалуйста, ) и вызовы вторичных процедур (вызов другого подпрограммы или функции) гораздо более рекомендуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...