2011-06-23 79 views
1

有人可以帮我一个宏吗?我是一个完整的新手。宏保存和版本控制文件

我想让宏保存我的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 

任何和每一个帮助将不胜感激。

非常感谢 世

+0

您是否尝试过什么到目前为止? – jonsca

+0

我试图记录一个宏,但它似乎不适合于此目的 – Sae

+0

请参阅我的编辑 – jonsca

回答

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命令中,但你似乎知道你需要哪些。

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

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是文件扩展名

+0

如何将其更改为保存为.xlsm? – BiGXERO

+1

在'SaveAs'方法中使用'fileformat:= 52'指定文件格式。请注意,52是Excel 2007+中“xlOpenXMLWorkbookMacroEnabled”的定义常量。 –

+0

非常好!更令人沮丧的是编写一个宏,它会自动删除自己的所有代码@。@ – BiGXERO