Во-первых, с точки зрения передового опыта, Goto
действительно следует избегать вне условного выхода из глубоко вложенного цикла.Вы можете сделать это, переключив
If x < 1 Then Goto someLine
'Do Stuff
someLine:
на
If x > 0 Then
'Do Stuff
End If
Чтобы ответить на ваш вопрос, поскольку ваш пользователь просто вводит данные и отправляет, вы могли бы использовать InputBox
вместо отображениявся пользовательская форма каждой итерации?Таким образом, весь ваш код (начиная с вашего For-Next
Loop) будет выглядеть следующим образом:
For i = 0 To 49
today = Date
OP = Sheets("Monthly Status").Cells(i + 23, 11).Value
Act = Sheets("Monthly Status").Cells(i + 23, 13).Value
UE = Sheets("Monthly Status").Cells(i + 23, 12).Value
Set OPs = Sheets("Monthly Status").Cells(i + 23, 14)
Set UEs = Sheets("Monthly Status").Cells(i + 23, 15)
Set notes = Sheets("Monthly Status").Cells(i + 23, 16)
'Filling Original Plan Status
If OP > 0 Then
If Act <= OP Then
notes.Interior.Color = RGB(255, 255, 255)
OPs = "On Time"
ElseIf Act > OP Then
OPs = "Miss"
Else
If Act < 1 And today > OP Then
OPs = "Incomplete"
ElseIf Act < 1 And today <= OP Then
OPs = "OK"
End If
End If
End If
'Filling Updated Estimate Status
If UE > 0 Then
If Act <= UE Then
UEs = "On Time"
ElseIf Act > UE Then
UEs = "Miss"
Else
If Act < 1 And today > UE Then
UEs = "Incomplete"
ElseIf Act < 1 And today <= UE Then
UEs = "OK"
End If
End If
'Notifying user to fill out notes if a "miss" or "incomplete" is detected
If InStr(UEs, "Miss") > 0 Or InStr(OPs, "Incomplete") > 0 Or InStr(UEs, "Incomplete") > 0 Then
notes.Interior.Color = RGB(255, 200, 0)
If notes = "" Then
notes = InputBox("Type Notes", "Notes")
End If
End If
End If
Next
Edit:
Для более чистого кода вы можете объединить некоторые из своих If-End If
в If-ElseIf-End If
, который я отредактировал, чтобы отразить мой ответ.