和風スパゲティのレシピ

日本語でコーディングするExcelVBA

20本目:ブックのバックアップ

Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
VBA100本ノック」に対する私の回答と解説のページです。

100本ノックの出題リストはこちらから
excel-ubara.com

出題:ブックのバックアップ

#VBA100本ノック 20本目
マクロブック(ThisWorkbook)と同じフォルダに"BACKUP"フォルダを作成し、
"BACKUP"に自身(ThisWorkbook)のバックアップを以下の名称で保存してください。
ブック名_yyyymmddhhmm.xlsm
マクロ終了時には元のブックが開いている状態にしてください。
※繰り返し実行を考慮

バックアップしたブックのサンプル

◇ 出題ページはこちら

ソースコード

メインモジュール

Option Explicit

' 100本ノック020:ブックのバックアップ
Sub ブックをバックアップする()

    Dim 保存フォルダパス As String
    保存フォルダパス = ThisWorkbook.Path & "\BACKUP"
    
    On Error Resume Next
    MkDir 保存フォルダパス
    On Error GoTo 0
  
    Dim 保存ファイル名 As String
    保存ファイル名 = FSO.GetBaseName(ThisWorkbook.Name) _
        & Format(Now(), "_yyyymmddhhmm") _
        & "." & FSO.GetExtensionName(ThisWorkbook.Name)
    
    On Error GoTo エラー時
    ThisWorkbook.SaveCopyAs 保存フォルダパス & "\" & 保存ファイル名
    
    Exit Sub
    
エラー時:
    MsgBox "ブック保存時にエラーが発生しました。"

End Sub

汎用関数モジュール

Option Explicit

' FileSystemObjectの短縮取得
' 参考:https://www.limecode.jp/entry/utility/shortcall-filesystemobject
Public FSO As New FileSystemObject

解説

ブックをバックアップする問題でした。

今のブックを開いたまま行うということなので、
名前を付けて保存(SaveAs)は使用できません。


この場合はSaveCopyAsメソッドを使用することで実現できます。

今のファイルをのそのまま開いたまま複製を作りたい場合は、
こちらのメソッドを使用してください。