Кнопка «Отмена» или «Esc» в диалоговом окне сохраняет файл с именем «False» - PullRequest
2 голосов
/ 27 июня 2019

Я написал код для сохранения нового файла только с sheet1. Проблема заключается в том, что при сохранении файла я нажимаю на esc или отмену в диалоговом окне, новые файлы сохраняются в каталоге как FALSE, вместо этого я не хотел бы сохранять файл, если нажимал esc или отмену

Я пытался поставить if, например: If thisfile = "FALSE", затем выйти из sub; но это не работает.

Sub test()
Dim thisfile As Variant

    thisfile = Range("Y5").Value & Range("C16").Value & "_" & Range("K41").Value

    Worksheets("Sale Dispo Approval").Copy

    With ActiveWorkbook

        .SaveAs Application.GetSaveAsFilename(InitialFileName:=thisfile, fileFilter:="Excel Files (*.xlsx), *.xlsx")

        .Close savechanges:=False
    End With

End Sub

Я ожидаю, что одним нажатием кнопки "Отмена" или "Esc" новые файлы не сохранятся.

1 Ответ

4 голосов
/ 27 июня 2019

Дело в том, что вы вводите пользовательский ввод, полученный из GetSaveAsFilename, и вставляете его непосредственно в SaveAs без проверки.Это плохая практика, потому что пользовательский ввод должен (в общем) проверяться перед его использованием.

Вы предполагали, что метод Application.GetSaveAsFilename всегда возвращает String с именем файлано согласно документации он возвращает Variant, который может быть либо String (имя файла), либо Boolean в случае отмены.

Измените строку .SaveAs на

Dim FileName As Variant 'cancel returns Boolean
FileName = Application.GetSaveAsFilename(InitialFileName:=thisfile, fileFilter:="Excel Files (*.xlsx), *.xlsx")

If FileName = False Then
    Exit Sub 'exit if user pressed cancel
End If

.SaveAs FileName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...