【问题标题】:Backup on File Close Excel VBA备份文件关闭 Excel VBA
【发布时间】:2014-05-10 05:27:06
【问题描述】:

我希望 Excel 在文件关闭时自动备份工作簿,而不提示用户。我在网上找到了下面的优秀代码(忘记了源代码),但是备份的 FileType 正在更改为我无法打开的 BAK 文件。 我该如何解决这个问题。这两个文件将位于同一个文件夹中,备份应具有相同的文件名和“-bak”或“.bak”。

Sub SaveWorkbookBackup()

Dim awb As Workbook, BackupFileName As String, i As Integer, OK As Boolean
    If TypeName(ActiveWorkbook) = "Nothing" Then Exit Sub
    Set awb = ActiveWorkbook
    If awb.Path = "" Then
        Application.Dialogs(xlDialogSaveAs).Show
    Else
        BackupFileName = awb.FullName
        i = 0
        While InStr(i + 1, BackupFileName, ".") > 0
            i = InStr(i + 1, BackupFileName, ".")
        Wend
        If i > 0 Then BackupFileName = Left(BackupFileName, i - 1)
        BackupFileName = BackupFileName & ".bak"
        OK = False
        On Error GoTo NotAbleToSave
        With awb
            Application.StatusBar = "Saving this workbook..."
            .Save
            Application.StatusBar = "Saving this workbook backup..."
            .SaveCopyAs BackupFileName
            OK = True
        End With
    End If
NotAbleToSave:
    Set awb = Nothing
    Application.StatusBar = False
    If Not OK Then
        MsgBox "Backup Copy Not Saved!", vbExclamation, ThisWorkbook.Name
    End If
End Sub

【问题讨论】:

    标签: excel backup vba


    【解决方案1】:

    以下修改后的功能应保存包含保存日期时间的备份,而不是“.BAK”。修改部分已注释。此外,正确缩进发布也有帮助;)

    Sub SaveWorkbookBackup()
    
    Dim awb As Workbook, BackupFileName As String, i As Integer, OK As Boolean
    If TypeName(ActiveWorkbook) = "Nothing" Then
    Exit Sub
    
    Set awb = ActiveWorkbook
    
    If awb.Path = "" Then
        Application.Dialogs(xlDialogSaveAs).Show
    Else: BackupFileName = awb.FullName
    i = 0
    While InStr(i + 1, BackupFileName, ".") > 0
        i = InStr(i + 1, BackupFileName, ".")
    Wend
    If i > 0 Then
    BackupFileName = Left(BackupFileName, i - 1)
    
    'Modified this part
    If Application.Version >= 12 Then 
        BackupFileName = BackupFileName & "_backup_" & Format(Date, "yyyymmdd") & "-" & Format(Time, "Hhmm") & ".xlsx"
    Else
        BackupFileName = BackupFileName & "_backup_" & Format(Date, "yyyymmdd") & "-" & Format(Time, "Hhmm") & ".xls"
    End If
    OK = False
    On Error GoTo NotAbleToSave
    With awb
        Application.StatusBar = "Saving this workbook..."
        .Save
        Application.StatusBar = "Saving this workbook backup..."
        .SaveCopyAs BackupFileName
        OK = True
    End With
    End If
    
    NotAbleToSave:     Set awb = Nothing
        Application.StatusBar = False
        If Not OK Then
            MsgBox "Backup Copy Not Saved!", vbExclamation, ThisWorkbook.Name
        End If
    End Sub
    

    【讨论】:

    • 缩进 - 知道了。谢谢。现在我关闭时看不到任何备份文件。我检查了最近的文件,没有任何东西。有没有办法解决这个问题。
    • 请忽略。我已经斜眼了。现在一切正常。非常感谢!!!!!!
    • 我的代码开始给我 Block If without End If 错误。所以我添加了几个 End If,如下所示。现在代码在我测试时运行完美,但在我保存并关闭工作簿时不会创建备份。有谁知道如何解决这个问题。我对这个宏中使用的一些代码不熟悉。
    • 我在上面修改后的代码中添加了 End Ifs 到以下几行:Exit Sub, i=0, BackupFileName = Left(BackupFileName, i-1)。另外,我在 OK = True End With 行下方删除了 End If。这些 end ifs 是否会导致代码在保存和关闭文件时不创建备份?
    猜你喜欢
    • 2021-12-20
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 2013-06-12
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多