Добрый день! Уважаемые участники форума, в макросе Эксель использую цикл Do While с проверяемым условием: Do While i > 1, на определенном этапе цикла нужно знать предыдущее значение i (шаг назад в цикле), есть ли какой то оператор для этого?
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. А в том, чтобы писать программы, работающие при любом количестве ошибок.
С этим как раз проблемы, т.к. переменная изменяется в цикле и после ее изменения появляется необходимость использования предыдущего значения. Ладно попробую переписать чуть код что бы можно было запоминать.
Irregular Expression написал: DopplerEffect , в чём проблема-то?Код ? 1234567Dim tmp As Integer, I As Integer Do While I < 10 tmp = I I = I + 1LoopMsgBox tmp
Ок. А если нужно будет два шага назад знать значение переменной?
Sub StepI()
Dim tmp(), I&, iStep&
I = 1
Do While I < 10
ReDim Preserve tmp(I)
tmp(I) = I
I = I + 1
Loop
iStep = Application.InputBox("Введите индекс шага, значение которого Вас интересует:", , 1, Type:=1)
If iStep >= LBound(tmp) And iStep <= UBound(tmp) Then
MsgBox "Значение переменной 'I' на " & iStep & " шаге равно: " & tmp(iStep)
Else
Exit Sub
End If
End Sub
Вы лучше опишите ЗАДАЧУ, которую пытаетесь решить таким СПОСОБОМ
Согласие есть продукт при полном непротивлении сторон
DopplerEffect написал: А если нужно будет два шага назад знать значение переменной?
Можно хранить в переменных, можно в коллекции. В последнем случае можно хранить сколько угодно шагов.
Код
Sub TimeMachine1()
Dim i, p, pp
i = 100
Do While i > 1
Debug.Print "тек"; i;
If p > 0 Then Debug.Print "пред"; p;
If pp > 0 Then Debug.Print "предПред"; pp;
Debug.Print
pp = p
p = i
i = i - Int(Rnd * 20)
Loop
End Sub
Sub TimeMachine2()
Dim i, cl As New Collection
i = 100
Do While i > 1
Debug.Print "тек"; i;
If cl.Count > 0 Then Debug.Print "пред"; cl(1);
If cl.Count > 1 Then Debug.Print "предПред"; cl(2);
Debug.Print
If cl.Count > 0 Then cl.Add i, Before:=1 Else cl.Add i
If cl.Count > 2 Then cl.Remove 3 'необязательно
i = i - Int(Rnd * 20)
Loop
End Sub