【问题标题】:cancel or esc button in the dialog box saves a file named "False"对话框中的取消或 esc 按钮保存一个名为 \"False\" 的文件
【发布时间】:2019-06-27 20:21:13
【问题描述】:

我写了一个代码来只用 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

我希望我单击取消或 esc 不会保存新文件。

    标签: excel vba


    【解决方案1】:

    问题是您信任从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
    

    【讨论】:

      猜你喜欢
      • 2019-11-09
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多