Весь процесс повторяется до тех пор, пока в некоторый момент условие не станет равным False. Другими словами, нет ограничений на число повторений выполнения блока программного кода в цикле. В предположении, что подача энергии не прекратится и компьютер не отключается, цикл будет продолжаться вечно, если условие никогда не примет значение False.
Следующий пример, основанный на использовании двух операторов Do While . . . Loop, переставляет в обратном порядке цифры в числе, предложенном пользователем. Наверное, этот пример не имеет никакой практической ценности, но он эффектный, работает в любом VBA-приложении и достаточно компактный, чтобы иллюстрировать работу циклов Do;
>Sub ReverseTheDigits()
Dim intOriginalNumber As Integer
Dim intOneDigit As Integer, strBackwardsNumber As String
Do While intOriginal Number < 10
intOriginal Number = _
InputBox("Напечатайте число, большее 9.")
Loop
Do While intOriginalNumber
intOneDigit = intOriginalNumber Mod 10
strBackwardsNumber = strBackwardsNumber & intOneDigit
intOriginalNumber = Int(intOriginalNumber / 10)
Loop
MsgBox strBackwardsNumber
End Sub
В первом цикле Do проверяется, что значение, введенное пользователем, неотрицательно и что во введенном числе не меньше двух знаков (а иначе, что же в нем переставлять?). Когда программа выполняет этот цикл впервые, значением переменной intOriginalNumber будет 0, поскольку до этого переменной не присваивалось никакого значения. Нуль меньше 10, поэтому условие принимает значение True, и VBA начинает выполнение цикла.
Цикл содержит один оператор, отображающий окно ввода, в котором пользователя просят ввести подходящее число. После того как число введено, оператор Loop отсылает процесс выполнения к началу цикла, где введенное число проверяется. Цикл завершит свою работу только тогда, когда проверка покажет, что было введено подходящее число. (Обратите внимание на то, что в данном примере опущены некоторые важные пункты проверки правильности вводимых данных, наподобие проверки того, является ли число целым и не является ли больше максимально допустимого для переменных типа Integer.)
После подтверждения правильности введенного значения VBA переходит к следующему циклу. Условием выполнения этого цикла является положительное значение, содержащееся в переменной. Поскольку ненулевые числа порождают True, можно вместо Do While intOricinalNumbe r > 0 писать просто Do While intOriginalNumber - оба варианта работают одинаково.
В самом цикле простая процедура в три строки разбирает цифры исходного числа, начиная справа налево, и использует их в обратном порядке для построения новой строки. Чтобы понять, как работает цикл, не обязательно разбираться в программном коде внутри цикла, но, я думаю, следующие пояснения вам не помешают.