Excel VBA SaveAsメソッドで名前を付けてファイルを保存する

ファイル/フォルダ操作

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」のファイル形式の一覧(多いため一部)です。

ファイル形式定数
xlsxxlWorkbookDefault
xlsxxlOpenXMLWorkbook
xlsmxlOpenXMLWorkbookMacroEnabled
xlsxlWorkbookNormal
txtxlCurrentPlatformText

もっともシンプルな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

タイトルとURLをコピーしました