宏保存和版本控制文件

时间:2011-06-23 12:47:13

标签: excel-vba vba excel

有人可以帮我一个宏吗?我是一个完整的新手。

我希望宏保存我的excel文件,但首先检查是否已存在同名文件。如果是,则宏以保存文件后的版本。例如,如果Testworkbook.xls已经存在,那么宏将新文件保存为Testworkbook_v1.xls等等。下面是我尝试的代码,但它给出了错误。

Sub SaveAs()
'
' SaveAs Macro

    ChDir "C:\Documents and Settings\Sae\Desktop"
    ActiveWorkbook.SaveAs Filename:= _
        "C:\Documents and Settings\Sae\Testworkbook" & v + 1 & ".xlsx", _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

End Sub

非常感谢任何帮助。

非常感谢 SAE

2 个答案:

答案 0 :(得分:2)

只要您保存工作簿,此代码就可以使用。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim filePath As String, wbName As String, version As Integer

    filePath = "C:\Documents and Settings\Sae\Desktop" //Change as appropriate
    wbName = "Testworkbook - v"

    If Dir(filePath & Application.PathSeparator & ThisWorkbook.Name) = "" Then // Workbook does not exist
        ThisWorkbook.SaveAs fileName:=filePath & Application.PathSeparator & wbName & 1
    Else
        version = CInt(VBA.Right$(VBA.Left$(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4), VBA.Len(VBA.Left$(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4)) - Len(wbName))) + 1
        ThisWorkbook.SaveAs fileName:=filePath & Application.PathSeparator & wbName & version
    End If
End Sub

请注意,这假定.xls是文件扩展名

答案 1 :(得分:0)

Dir()将帮助您确定文件是否已存在。

Workbook.SaveAs()会帮助您保存文件。

您需要将字符串与&运算符连接在一起(以添加V1)。

修改

感谢您发布所拥有的内容。我想出了

Sub SaveNumberedFile()

    Static count As Integer
    Dim filestr As String
    filestr = "C:\Users\Me\Documents\Code\TestWkbk"
    ThisWorkbook.Activate 'Activate whichever workbook you need
    If count = 0 Then
        ActiveWorkbook.SaveAs (filestr & ".xls")

    ElseIf count > 0 And Dir(filestr & "v" & count - 1 & ".xls") = "" Then
        ActiveWorkbook.SaveAs (filestr & "v" & count & ".xls")
    End If

    count = count + 1

End Sub

我使用静态变量来跟踪数字。这将在调用宏之间保留count的值。关闭工作簿后,它不会跟踪count。在这种情况下,您可以使用Dir()命令检查最后一个文件号是什么,并将静态变量初始化为该值。

我没有将所有的装饰添加到SaveAs命令,但你似乎知道你需要哪些。

尝试一下,可能需要一些调整。