Я не уверен, как обработать вывод из MsgBox, чтобы позволить моему макросу продолжить обработку в различных ситуациях.
Этот макрос создает файл ежедневного отчета с выходным именем abcdMMDD.xls.
В начале сценария я проверяю файл в выходном каталоге с тем же именем, что и выходной файл дня, и показываю пользователю окно сообщения с вопросом, хотят ли они перезаписать файл. На основании их ответа сценарий продолжается одним из двух способов.
Важный код:
If ChkFileThere("G:\Management Reporting\Asset Comparison Report\DAILY\" & FileName) Then
If MsgBox("File " & FileName & " already exists. Continue and overwrite?", vbYesNo, "Output File Exists") = vbNo Then GoTo ProcessFailed2
Else: GoTo ProcessStep2
End If
Проблема заключается в следующем:
Когда выходной файл уже существует, приглашение отображается правильно, но при нажатии YES (как в Yes, пожалуйста, перезаписать) макрос прекращает обработку, если я нажимаю No, отображается ожидаемое сообщение и макрос завершается в соответствии с назначением.
Если выходной файл еще не существует, сценарий продолжит работу без каких-либо запросов, как было задумано, и обработает файл.
Замена ProcessFailed2 и ProcessStep2 и изменение значения vbNo на vbYes в конце строки MsgBox вызывает другой набор проблем.
В этом случае, если выходной файл уже существует, Msgbox отображается правильно, и выбор «Да» позволяет макросу обрабатывать, как ожидается, перезаписывая выходной файл вновь созданным.
Но если выходной файл не существует, скрипт переходит прямо в ProcessFailed2.
Я полагаю, что проблема заключается в том, что если заявление остальное включено в. Как мне указать, что, если получает остальное?
Я предположил, что, учитывая, что первый If - это блок If, а второй - однострочный If, иначе будет включено в блок If. Но я думаю, что это неправильно.
ОБНОВЛЕНИЕ: Спасибо за Нила.
Следующий код решает проблему в настоящее время:
ProcessStatus = "Checking if report output file already exists."
Application.StatusBar = ProcessStatus
If ChkFileThere("G:\Management Reporting\Asset Comparison Report\DAILY\" & FileName) Then
If MsgBox("File " & FileName & " already exists. Continue and overwrite?", vbYesNo, "Output File Exists") = vbNo Then
GoTo ProcessFailed2
End If
Else: GoTo ProcessStep2
End If
Однако, основываясь на рекомендациях Нила, последний нерешенный вопрос: при использовании оператора IF/AND обрабатывается ли часть AND только в том случае, если первая часть найдена верной?