Перезапустить подпрограмму из обработчика ошибок - PullRequest
0 голосов
/ 20 июня 2020

У меня есть код, который уведомляет пользователя об ошибке с помощью окна сообщения и предлагает пользователю повторить попытку или отменить. Я бы хотел, чтобы код выполнял следующие действия: если пользователь нажимает «повторить попытку», vba повторно выполнит код:

Sub CheckDate ()

Dim R as VbMsgBoxResult

On Error GoTo i

  Vba.Date = Range("A1").Value

Exit Sub

i:
Msgbox "An error has occurred, would you like to retry?", VbRetryCancel
If R = VbRetry Then ' **re-execute the code**

End Sub

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Несколько рекомендаций: избегайте использования операторов goto, поскольку они могут привести к неорганизованному и трудному для понимания коду. Использование IsDate позволит VBA проверить дату, не допуская возникновения ошибки. Использование скобок может быть более кратким способом определения диапазонов ссылок. Вам не нужно объявлять ответ как переменную, просто проверьте результат работы подсказки. И, наконец, вы можете просто вызвать макрос, если пользователь хочет повторить попытку.

Sub CheckDate ()
  if IsDate([A1].Value) then 
     Vba.Date = [A1].Value
  else
     if Msgbox("An error has occurred, would you like to retry?", VbRetryCancel) = VbRetry Then CheckDate
  end if 
End Sub
0 голосов
/ 20 июня 2020

Попробуйте

Sub CheckDate ()

Dim R as VbMsgBoxResult
m:
On Error GoTo i

  Vba.Date = Range("A1").Value

Exit Sub

i:
R = Msgbox( "An error has occurred, would you like to retry?", VbRetryCancel)
If R = VbRetry Then ' **re-execute the code**
    Err.Clear
    goto m:
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...