VBAで指定したファイルを「名前を付けて保存する」方法をご説明します。
上書き保存の時は「Save」メソッドを使用しましたが、名前を付けて保存は「SaveAs」メソッドを使用します。
その他のファイルの保存方法については、次の記事をご覧ください。
1.SaveAsの使い方
SaveAsの使い方
名前を付けて保存するには「SaveAs」メソッドを使用します。
「SaveAs」メソッドには多くの引数があります。
構文は次のように記述します。
SaveAs(FileName、 FileFormat、 Password、 WriteResPassword、 ReadOnlyRecommended、 createbackup、 accessmode、 ConflictResolution、 addtomru、 textcodepage、 TextVisualLayout、 Local)
正直全てを覚えるのは大変なので、便利な引数のみ簡単にご紹介します。
引数一覧
名前 | 必須/オプション | データ型 | 説明 |
FileName | オプション | Variant | 保存するファイル名を指定します。 フルパスを含めることが可能です。 フルパスを含めない場合は、カレントフォルダに保存されます。 |
FileFormat | オプション | Variant | 保存する時のファイル形式を指定します。 省略した場合、既存のファイルは最後に保存した際のファイル形式が既定形式です。 新規ファイルの場合は現在使用しているExcelのバージョンのファイル形式が既定形式となります。 |
Password | 省略可能 | Variant | ファイルを保護するためのパスワードを表す15文字以内の文字列を指定します。大文字、小文字は区別されます。 |
WriteResPassword | オプション | Variant | ファイルの書き込みパスワードを表す文字列を指定します。 パスワードを設定して保存したファイルを、パスワードを指定しないで開くと、ファイルは読み取り専用で開かれます。 |
ReadOnlyRecommended | オプション | Variant | ファイルを開くときに、読み取り専用で開くことを推奨するメッセージを表示するにはTrueを指定します。 |
CreateBackup | オプション | Variant | バックアップファイルを作成するには、Trueを指定します。 |
ファイル形式
「FileFormat」のファイル形式の一覧(多いため一部)です。
ファイル形式 | 定数 |
xlsx | xlWorkbookDefault |
xlsx | xlOpenXMLWorkbook |
xlsm | xlOpenXMLWorkbookMacroEnabled |
xls | xlWorkbookNormal |
txt | xlCurrentPlatformText |
もっともシンプルなSaveAsの保存方法
これだけでもかなりの情報量になるので、もっと簡単に使いたいという方は、まずは次のコードだけ覚えてください。
VBAの書かれたThisworkbookを「C:\Sample」というフォルダに「SampleFile.xlsm」というファイル名で指定して保存するコードです。
Sub Sample1()
ThisWorkbook.SaveAs "C:\Sample\SampleFile.xlsm"
End Sub
2.確認メッセージを回避して保存
上書き保存同様にSaveAsで名前を付けて保存する場合に、すでに同じ名前のファイルが存在した場合に「確認メッセージ」でVBAが止まってしまいます。
そこで確認メッセージを回避する方法をいくつかご紹介します。
Application.DisplayAlerts = Falseで確認メッセージを非表示にする
上書き保存同様に、こちらも「Application.DisplayAlerts = False」で確認メッセージ事態を非表示にしてしまう方法です。
もっとも簡単な方法ですが、確認なしに上書き保存してしまうのが欠点です。
Sub Sample2()
Application.DisplayAlerts = False
ThisWorkbook.SaveAs "C:\Sample\SampleFile.xlsm"
Application.DisplayAlerts = True
End Sub
名前の存在を確認して保存
保存する前に同じフォルダに同じ名前のファイルがあるか確認してから保存します。
さらに、同じファイル名が存在してしまったときの処理も別に組み込む必要があります。
ファイルの存在を調べるには「Dir」関数を使用します。
「Dir」関数はファイルが存在しないときに、空白を返します。
Sub Sample3()
If Dir("C:\Sample\SampleFile.xlsm") <> "" Then
MsgBox "同じファイル名があります。"
Exit Sub
Else
ThisWorkbook.SaveAs "C:\Sample\SampleFile.xlsm"
End If
End Sub
今回はメッセージボックスでアラートを出して終了しましたが、別の名前を割り当てるなどの工夫をすることで、保存する事もできます。
重複しないであろうファイル名で保存する
こちらは自動出力などの処理に有効です。
頻度によりますがファイル名に日時を付ける事で、ファイル名の重複を避ける方法です。
個人的にはよく使います。
Sub Sample4()
Dim Filename As String
Filename = "C:\Sample\SampleFile" & Format(Now, "yyyymmdd_hhmmss") & ".xlsm"
ThisWorkbook.SaveAs Filename
End Sub
3.パラメーターを使用した保存
FileFormat
FileFormatを指定した方法です。
Sub Sample5()
Dim Filename As String
Dim WB As Workbook
Set WB = Workbooks.Add
Filename = "C:\Sample\SampleFile" & Format(Now, "yyyymmdd_hhmmss")
WB.SaveAs Filename, FileFormat:=xlWorkbookDefault
End Sub
Psaaword
Passwordを指定した方法です。
保存したファイルを再度開くとき、Passwprdを求められます。
Sub Sample6()
Dim Filename As String
Dim WB As Workbook
Set WB = Workbooks.Add
Filename = "C:\Sample\SampleFile" & Format(Now, "yyyymmdd_hhmmss")
WB.SaveAs Filename, Password:="0000"
End Sub
ReadOnlyRecommended
ReadOnlyRecommendedを指定した方法です。
保存したファイルを再度開くとき、読み取り専用で開くか求められます。
Sub Sample7()
Dim Filename As String
Dim WB As Workbook
Set WB = Workbooks.Add
Filename = "C:\Sample\SampleFile" & Format(Now, "yyyymmdd_hhmmss")
WB.SaveAs Filename, ReadOnlyRecommended:=True
End Sub