获取“是否要覆盖文件”对话框,以便在使用VBA保存时显示

时间:2015-06-29 11:40:33

标签: excel vba excel-vba

以下代码保存了我的Excel工作表的选定区域。但是,如果我尝试保存与已存在文件名相同的文件,则只保存文件而不显示“是否要覆盖文件”对话框。

有没有办法更改此代码,以便它会询问我是否要覆盖预先存在的文件?

Option Explicit
Sub CreatePDF()
Dim wSheet As Worksheet
Dim vFile As Variant
Dim sFile As String

Set wSheet = ActiveSheet
sFile = Replace(Replace(wSheet.Name, " ", ""), ".", "_") _
        & "_" _
        & Format(Now(), "yyyymmdd\_hhmm") _
        & ".pdf"
sFile = ThisWorkbook.Path & "\" & sFile

vFile = Application.GetSaveAsFilename _
(InitialFileName:=sFile, _
    FileFilter:="PDF Files (*.pdf), *.pdf", _
    Title:="Select Folder and FileName to save")

If vFile <> "False" Then
wSheet.Range("B2:J44").ExportAsFixedFormat _
    Type:=xlTypePDF, _
    FileName:=vFile, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False

MsgBox "PDF file has been created."
End If
End Sub

2 个答案:

答案 0 :(得分:3)

另一种选择:

<强>替换

vFile = Application.GetSaveAsFilename _
(InitialFileName:=sFile, _
    FileFilter:="PDF Files (*.pdf), *.pdf", _
    Title:="Select Folder and FileName to save")

If vFile <> "False" Then

With Excel.Application.FileDialog(msoFileDialogSaveAs)

    Dim i As Integer
    For i = 1 To .Filters.Count
        If InStr(.Filters(i).Extensions, "pdf") <> 0 Then Exit For
    Next i

    .FilterIndex = i
    .InitialFileName = sFile
    .Title = "Select Folder and FileName to save"

    '------------------- Bloc A -------------------------
    If CBool(.Show) Then
        vFile = .SelectedItems.Item(.SelectedItems.Count)
    End If

    If vFile <> "" Then
    '------------------- Bloc A -------------------------

    '----------- Or replace "Bloc A" by------------------
    'If Not CBool(.Show) Then Exit Sub
    'vFile = .SelectedItems.Item(.SelectedItems.Count)

    'And remove the "If vFile <> "False" Then" check
    '----------------------------------------------------

End With

如果您选择了现有文件,则会显示覆盖消息

答案 1 :(得分:2)

如建议的那样,模拟行为的一种方法是检查所选的SaveAsFilename:

Option Explicit

Sub CreatePDF()
    Dim wSheet As Worksheet
    Dim vFile As Variant
    Dim sFile As String

    Set wSheet = ActiveSheet
    sFile = Replace(Replace(wSheet.Name, " ", ""), ".", "_") _
            & "_" _
            & Format(Now(), "yyyymmdd\_hhmm") _
            & ".pdf"
    sFile = ThisWorkbook.Path & "\" & sFile

    vFile = Application.GetSaveAsFilename _
    (InitialFileName:=sFile, _
        FileFilter:="PDF Files (*.pdf), *.pdf", _
        Title:="Select Folder and FileName to save")

    If Dir(vFile) > vbNullString Then _
        If MsgBox("Overwrite File?", _
                   vbExclamation + vbYesNo, "Overwrite?") = vbNo Then Exit Sub

    If vFile <> "False" Then
        wSheet.Range("B2:J44").ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=vFile, _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=False

        MsgBox "PDF file has been created."
    End If
End Sub