【问题标题】:cancel or esc button in the dialog box saves a file named "False"对话框中的取消或 esc 按钮保存一个名为“False”的文件
【发布时间】:2019-11-09 10:52:18
【问题描述】:

我写了一个代码来只用 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-06-27
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多