我编写了一个代码来仅使用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)
我希望我单击“取消”或“退出”时不会保存新文件。
问题是,您信任从中获得的用户输入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)