对话框中的“取消”或“ Esc”按钮将保存一个名为“ False”的文件

时间:2019-06-27 12:09:22

标签: excel vba

我编写了一个代码,仅使用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

我希望我单击“取消”,否则将不会保存任何新文件。

1 个答案:

答案 0 :(得分:4)

问题是,您必须对从GetSaveAsFilename获得的用户输入进行输入,然后将其直接输入SaveAs而不进行验证。这是一种不好的做法,因为在使用之前,应先验证用户输入(以日文形式)。

您假设Application.GetSaveAsFilename method始终返回带有文件名的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