对话框中的取消或 esc 按钮保存名为“False”的文件

Sav*_*rio 3 excel vba

我编写了一个代码来仅使用sheet1保存新文件。问题是,我在保存文件时在对话框中单击 esc 或取消,新文件在目录中保存为 FALSE,相反,如果我单击 esc 或取消,我不想保存文件

我尝试添加一个 if ,例如: If thisfile="FALSE" then exit 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
Run Code Online (Sandbox Code Playgroud)

我希望我单击“取消”或“退出”时不会保存新文件。

Pᴇʜ*_*Pᴇʜ 5

问题是,您信任从中获得的用户输入GetSaveAsFilename,并将其直接推入SaveAs而不进行验证。这是一种不好的做法,因为用户输入(一般来说)应该在使用之前进行验证。

您假设Application.GetSaveAsFilename 方法始终返回String带有文件名的 a ,但根据文档,它返回的 aVariant可以是(文件名),也可以是取消的情况下的Stringa 。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
Run Code Online (Sandbox Code Playgroud)