皆さんは、VBAでファイルを保存する方法を知っていますか?
SaveAsメソッドを使えば、簡単にファイルを保存することができるのでおすすめです!
そこで今回は、
- SaveAsメソッドの使い方
- ファイルフルパスの取得方法
- SaveAsを使ったファイル保存サンプルコード
- 名前で競合が起きたときの対処方法
といった基礎的なことから、応用的な方法まで、徹底的に解説します
SaveAsの使い方とは
SaveAsメソッドは、ファイルを保存するためのメソッドです。
以下のようにワークブックを指定して書きます。
ThisWorkbook.SaveAs ファイル名を含めたファイルパス
基本的にはこれだけでもOKなのですが、ファイルパスの指定以外にも便利なオプションがあるのでいくつかご紹介します。
No | オプション名 | 概要 | 値の入れ方 |
---|---|---|---|
1 | Filename | ファイルパスを含めたファイル名 | 文字列でパス指定 |
2 | FileFormat | ファイルを保存するフォーマットを指定 | .csv :xlCSV .txt :xlText .xlsx :xlOpenXMLWorkbook .xlsm:xlOpenXMLWorkbookMacroEnabled |
3 | Password | ファイルを保護するパスワードを指定 (15文字以内) | 文字列でパスワードを指定 |
4 | CreateBackup | バックアップ ファイルを作成有無 | True/Falseを指定 (Trueで作成) |
オプションを付ける場合は、カンマ区切りで「オプション名:=値」のように書きます。
サンプル:
ThisWorkbook.SaveAs Filename:="C:UsersSiroDesktopBook2.xlsm", _ FileFormat:=xlOpenXMLWorkbookMacroEnabled
警告メッセージで処理が止まるのを防ぐ方法
今まで説明した内容でファイル保存自体はできるのですが、ファイル名が重複してしまった場合以下のようなメッセージが出て処理が止まってしまいます。
回避策は2つあるので、それぞれご紹介します。
回避策1:ファイル名を重複しない名前にする
1つ目は、「年月日時分秒ミリ秒」をファイル名に入れる方法です。
「ファイル共通項目_YYYYMMDDHHMMSSmsmsms.xlsx」のような感じですね。
Format(Now, "yyyy/mm/dd hh:mm:ss ms")
のように書くと、「2018/08/08 14:00:30 830」と年月日時分秒ミリ秒を取得することができるので、少し応用して「/」や「:」や半角スペースなどを削除して使います。
コードサンプル:
Sub Test() Dim strFileName as String strFileName = “請求書_” & Format(Now, "yyyymmddhhmmssms") & “.xlsx” 'イミディエイトウィンドウ似て値確認 Debug.Print strFileName End Sub
実行結果:
請求書_20180808140445845.xlsx
新しくファイルを作ることを前提にすれば、この方法を使うだけでもOKです。
回避策2:警告メッセージを非表示にする
2つ目は、警告メッセージ非表示にする方法です。
この方法を使えば、同じファイルの更新でもメッセージで止まることなく保存ができます。
'メッセージ非表示 Application.DisplayAlerts = false 'ファイル保存 ThisWorkbook.SaveAs ファイルパス 'メッセージ非表示解除 Application.DisplayAlerts = true
のように「メッセージ非表示→ファイル保存→メッセージ再表示解除」の流れで書くことで、一時的に警告メッセージだけを非表示にすることができます。
用途に応じて使い分けるのがおすすめです!
サンプルコード
最後に、名前を付けて保存する場合、同じファイル名で更新する場合のサンプルを用意しました。
名前を付けて保存するサンプル:
Sub TestSave1() 'ファイル名作成 Dim strFileName As String strFileName = "請求書_" & Format(Now, "yyyymmddhhmmssms") & ".xlsm" 'ファイルパス指定 Dim strFilePath As String strFilePath = ThisWorkbook.Path & "" & strFileName 'ファイル保存 ThisWorkbook.SaveAs Filename:=strFilePath, _ FileFormat:=xlOpenXMLWorkbookMacroEnabled '完了メッセージ MsgBox "ファイルの保存が完了しました" & vbCrLf & _ "保存先は" & strFilePath & "です。" End Sub
ファイルを上書きするサンプル:
Sub TestSave2() 'ファイル名作成 Dim strFileName As String strFileName = "請求書.xlsm" 'ファイルパス指定 Dim strFilePath As String strFilePath = ThisWorkbook.Path & "" & strFileName 'ファイル保存 Application.DisplayAlerts = False '警告メッセージ非表示 ThisWorkbook.SaveAs Filename:=strFilePath, _ FileFormat:=xlOpenXMLWorkbookMacroEnabled Application.DisplayAlerts = True '警告メッセージ非表示解除 '完了メッセージ MsgBox "ファイルの保存が完了しました" & vbCrLf & _ "保存先は" & strFilePath & "です。" End Sub
まとめ
今回は、ファイルを保存するためのSaveAsメソッドの使い方について解説しました。
Excelを使っているとファイルを保存するケースはよくあります。名前を付けて保存・上書き保存の2つを覚えておけば、こわいものなしです!
どちらも簡単なので、ぜひ使ってみてくださいね。