版本保存我的Excel文件

时间:2016-04-19 15:40:01

标签: excel excel-vba vba

我试图写一个小脚本来保存我正在处理的文件,这样做会增加它上面的版本号。当我从普通groupby调用它时,我有一个正常运行的脚本,但只要我将它放入Sub事件中,整个应用程序就会崩溃。

我已将此放在我想要版本的工作簿的BeforeSave对象中。

ThisWorkbook

2 个答案:

答案 0 :(得分:0)

您将使用当前设置进入无限循环(在用户启动保存之前,宏会导致SaveAs更新版本,但这会再次调用BeforeSave事件,重新调用宏,等等。)

要解决此问题,您需要一个阻塞变量。在ThisWorkbook对象中创建一个变量,为方便起见,我将其称为Block,作为布尔值。将Open事件设置为Block to False。在您的声明和声明之间添加以下内容:你Set

If Not Block Then
    Block = True

缩进除End Sub之外的整个代码。在End With& End Sub插入:

    Block = False
End If 'No Else case needed as nothing special should happen if block is true

应该是它。

答案 1 :(得分:0)

我考虑了这个问题,并提出了以下完美的工作原理

使用Cancel = True我取消了用户启动的保存,然后通过禁用我可以保存的事件而不重新触发此事件。然后我为我的Excel开发工作进行版本控制

Option Explicit
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim fso
    Dim nme As String, rootDir As String
    Dim ver As Integer

    Cancel = True

    Set fso = CreateObject("Scripting.FileSystemObject")

    With ThisWorkbook
        nme = fso.GetBaseName(.Name)
        rootDir = fso.getfolder(.Path)
        On Error Resume Next
        ver = CInt(Trim(Right(nme, Len(nme) - InStr(1, nme, " v", vbTextCompare) - 1))) + 1
        On Error GoTo 0
        nme = Trim(Left(nme, InStr(1, nme, " v", vbTextCompare)))
        Application.EnableEvents = False
        .SaveAs Filename:=rootDir & "\" & nme & " v" & Format(ver, "000"), FileFormat:=xlOpenXMLWorkbookMacroEnabled
        Application.EnableEvents = True
    End With
End Sub