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メソッドを使用することで実現できます。
今のファイルをのそのまま開いたまま複製を作りたい場合は、
こちらのメソッドを使用してください。