Это не ошибка, это подсказка. Excel запрашивает, перезаписать ли существующий файл. Вы можете отключить это, выключив Application.DisplayAlerts
(и снова включив, когда закончите!) - при выключенном DisplayAlerts
существующий файл будет просто незаметно перезаписан - у пользователя не будет возможности отменить операцию.
Приглашение появляется во время выполнения метода SaveAs
, и если вы отмените это приглашение, тогда Workbook.SaveAs
потребуется способ сказать вызывающему: «Эй, подождите, нет, это не go, как планировалось. "- и возникает ошибка ... которую следует обрабатывать независимо от того, отменяет ли пользователь подсказку:
If VarType(sFileSaveName) <> vbBoolean Then
On Error GoTo CleanFail 'handle cancellation / other unexpected issues
ActiveWorkbook.SaveAs sFileSaveName
On Error GoTo 0
Else
MsgBox "File is not being saved, export failed!"
ActiveWorkbook.Close SaveChanges:=False
End If
CleanExit:
Exit Sub
CleanFail:
MsgBox "File was not saved."
Resume CleanExit
End Sub
Любой код, связанный с доступом к файловой системе, всегда должен обрабатывать ошибки.
Тем не менее, Workbook.Close
выглядит так, будто здесь отсутствует объект Workbook
:
.Close SaveChanges:=False
Учитывая, что другая ветвь не работает ActiveWorkbook
, по-видимому, это было намерением здесь, поскольку хорошо:
ActiveWorkbook.Close SaveChanges:=False
Рассмотрите возможность квалифицировать его более конкретным c объектом книги для более надежного кода.