2011-06-23 8 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'を使ってファイル形式を指定します。 Excel 2007のxlOpenXMLWorkbookMacroEnabled'の定義済みの定数は52です。 –

+0

優秀です!むしろ、自分自身からすべてのコードを自動的に削除するマクロを書き留めて@ – BiGXERO

関連する問題