0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Q13.開いているブックを保存するには?

Last updated at Posted at 2020-01-20

ブックを保存する方法を考えていきます。
今回は、今開いているブックのバックアップを取るというシーンを想定して、マクロを作っていきます。
具体的には、今のファイル名に_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プロパティから
拡張子をのぞいたファイル名を取得することができます。

あとはこれにフォーマット関数と正しい拡張子を&で付与してあげるだけです。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?