以下の内容はhttps://www.limecode.jp/entry/syntax/workbook-savecopyasより取得しました。


ブックのコピーを作成・保存する - SaveCopyAs

作業中のブックのコピーを作成して保存する方法を解説します。

WorkbookオブジェクトのSaveCopyAsメソッドを使用します。

基本構文

対象ブック.SaveCopyAs 保存ファイルパス

サンプルコード

' マクロ実行ブックのコピーを作成
ThisWorkbook.SaveCopyAs "C:\Users\wfsp\Desktop\テストフォルダ\Book1.xlsm"

' アクティブブックのコピーを作成
ThisWorkbook.SaveCopyAs "C:\Users\wfsp\Desktop\テストフォルダ\Book1.xlsx"
' マクロブックのバックアップを「ブック名_バックアップ日.xlsm」で作成
Sub 本ブックのバックアップを作成する()
    
    ' バックアップ作成フォルダを取得(なければ作る)
    Dim 保存フォルダパス As String
    保存フォルダパス = ThisWorkbook.Path & "\BackUp"
    
    On Error Resume Next
    MkDir 保存フォルダパス
    On Error GoTo 0
    
    ' ブック名を作成
    Dim 保存ブック名 As String
    保存ブック名 = Replace(ThisWorkbook.Name _
        , ".xlsm", Format(Date, "_yyyymmdd") & ".xlsm")
    
    ' ブックのコピーを作成
    ThisWorkbook.SaveCopyAs 保存フォルダパス & "\" & 保存ブック名
    
End Sub

解説

WorkbookオブジェクトのSaveCopyAsメソッドを実行することで、
現在開いているブックのコピーを作成することが出来ます。

名前を付けて保存(SaveAs)と同じような動きのメソッドですが、
実行しても処理中のブックがコピーブックに変わるではありません。

' SaveCopyAs
Debug.Print ThisworkBook.Path ' ①
ThisWorkbook.SaveCopyAs "~~"
Debug.Print ThisworkBook.Path ' ②
' ↑①と②で同じパスが返る
' SaveAs
Debug.Print ThisworkBook.Path ' ①
ThisWorkbook.SaveAs "~~"
Debug.Print ThisworkBook.Path ' ②
' ↑①と②で異なるパスが返る(新しく名前を付けて保存した方に変わる)

 
このメソッドの引数はファイルパスひとつだけで、
処理の挙動にバリエーションはありません。


特に「このメソッドは常に上書き保存」である点にはご注意ください。

ファイルがあったとしても無警告で上書き保存が実行され、
この設定を変える引数も存在しません。


上書きしたくない場合はDir関数でファイルの存在確認を行うか、
上書き設定の引数を持つFileSystemObjectのCopyFileを使用してください。

' ファイルの存在確認をしてから実行
If Dir(保存ファイルパス) = "" Then
    ThisWorkbook.SaveCopyAs 保存ファイルパス
End If
' FileSystemObjectのCopyFileメソッドを使用
FSO.CopyFile ThisWorkbook.FullName _
                  , ThisWorkbook.Path & "バックアップ\" ,OverWriteFiles:=False

 
FileSystemObject.CopyFileメソッドの詳しい解説は、
こちらの記事をご覧ください。


続いて細かい挙動になりますが、
「変更 → SaveCopyAs → 保存せず閉じる」
という手順でファイルを実行した場合、
ブックへの変更はコピーファイルにだけ反映されることになります。


例えば以下のコードを実行した場合、

ThisWorkbook.Worksheets(1).Range("A1") = 1
ThisWorkbook.SaveCopyAs "~~"

ThisWorkbook.Close False ' 保存せず閉じる

A1セルに「1」が入るのはコピーファイルだけで、
本体ファイルにこの変更は反映されません。


本体に反映させたい場合は、

ThisWorkbook.Save

を別にしっかり実行する必要があります。


狙ってこの仕様を使うことは滅多にないと思いますが、
ThisWorkbook.Save の書き忘れでこうなってしまうことがたまにあります。

十分注意して運用してください。


またこちらも細かい仕様ですが、引数ファイルパスで別の拡張子を渡した場合、
「ファイルが破損して~~」となってしまい正しく保存できません。

SaveCopyAsメソッドにファイルの種類を変える機能はありませんので、
種類(拡張子)を変えたい場合は素直にSaveAsを実行してください。




以上の内容はhttps://www.limecode.jp/entry/syntax/workbook-savecopyasより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14