ブックを保存する方法を考えていきます。
今回は、今開いているブックのバックアップを取るというシーンを想定して、マクロを作っていきます。
具体的には、今のファイル名に_yyyymmddというかたちで日付を付与して、カレントディレクトリに保存するマクロを作っていきましょう。
■ポイント
まずは、ワークブックの保存です。これは簡単にできます。
ActiveWorkbook.SaveAs filename:="C:¥excelsample¥test.xls"
こうすると上記パスにtest.xlsという名前で保存することができます。
ただし、拡張子には注意してください。
マクロ有効ブックなのに、.xlsで保存しようとするとエラーになります。
また、同じ名前で保存しようとすると上書き確認されますが、Noを答えると、
エラー処理を書いていない場合は、エラーとなります。
次に、今のファイル名の取得。これは単純にActiveWorkbook.Nameで
取得することができます。
日付の取得は、過去記事参照してみてください。
[➡Q12.今日の日付をyyyymmdd形式で取得するには?][1]
[1]:https://qiita.com/guren111/items/562ffa45c4f7dce60df5
■回答
Sub Q13_Answer()
Dim book1 As Workbook
Dim Fileobj As Object
Dim FileName As String
'ファイルシステムを扱うオブジェクトを作成
Set Fileobj = CreateObject("Scripting.FileSystemObject")
Set book1 = ActiveWorkbook
'拡張子無しのファイル名を取得
FileName = Fileobj.GetBaseName(book1.Name)
book1.SaveAs FileName:=FileName & "_" & Format(Date, "yyyymmdd") & ".xlsm"
Set objFileSys = Nothing
Set book1 = Nothing
End Sub
■解説
ファイル名_yyyymmdd.xlsmという形式を付けるには少し手間を加える必要があります。
というのも、普通にActicveWookbook.name & フォーマット関数だと、
.xlsm__yyyymmddとなり、ファイル形式がおかしくなってしまいます。
ファイル名から拡張子をのぞいてやる方法はいくつかあるんですが、
今回はファイルシステムオブジェクトを扱う方法でのぞいています。
ファイルシステムオブジェクトの.GetBaseNameプロパティから
拡張子をのぞいたファイル名を取得することができます。
あとはこれにフォーマット関数と正しい拡張子を&で付与してあげるだけです。