和風スパゲティのレシピ

日本語でコーディングするExcelVBA

名前を付けて保存ダイアログを開く-GetSaveAsFilename

名前を付けて保存ダイアログを開く方法を解説します。

GetSaveAsFilenameメソッドを使用します。

サンプルコード

' ユーザーに保存先ファイルパスを指定してもらう
Dim ユーザー指定ファイルパス As Variant
ユーザー指定ファイルパス = Application.GetSaveAsFilename( _
    InitialFileName:=ThisWorkbook.Path & "\テストファイル.xlsx", _
    FileFilter:="Excelファイル,*.xlsx", _
    Title:="保存ファイル名を指定してください。")
    
' ファイルを保存する
If ユーザー指定ファイルパス <> False Then
    ActiveWorkbook.SaveAs ユーザー指定ファイルパス
End If

設定できる引数

引数 内容
InitialFilename ダイアログの初期値に表示するファイル名を指定します。
パスを入れると初期フォルダも指定することができます。
この拡張子とFileFilterの拡張子は一致している必要があります。
FileFilter ファイルの種類を指定する文字列("Excelファイル,*.xls*"など)
FilterIndex 複数のファイル種類を指定した場合に何番目を規定とするか
Title ダイアログボックスのタイトルを指定します。
この引数を省略すると「ファイルを開く」になります。
ButtonText MacPC限定の設定です。

解説

名前を付けて保存ダイアログを開くには、
GetSaveAsFilenameメソッドを使用します。


結果値はファイルパスの文字列(String)が返りますが、
キャンセル時には""ではなくFalseが返ります。

これをIf文で判定するために、
受ける変数はVariant型で宣言した方が都合が良い場合が多いです。


このメソッドは実際の保存をしてくれるわけではなく、
選択されたファイルのパスを返してくれるだけです。

実際の保存処理はこの後に実行してください。


各引数の注意点として、
InitialFilenameにはFilefilterと同じ拡張子のファイルを入れる必要があります。

拡張子が完全に一致していないとファイル名は入りませんので、
「xls*」と「xlsx」でも不一致判定となる点にご注意ください。


このメソッドは「保存はせずにダイアログを開いてパスを受け取る」だけのため、
兄弟メソッドであるGetOpenFilenameメソッドとほとんど同じ動きをします。

GetOpenFilenameもOpenをしてくれるわけではなく、
あくまでファイルパスを受け取るだけのメソッドですからね。


もちろんこの二つにはちゃんと違いがあり、
一番大きな違いとして、本メソッドは「存在しないファイルパス」を受け取ります。

これは新規保存を行う本メソッドには当然の仕様ですね。


また、既に存在するファイルを選択した場合は、
GetSaveAsFilenameメソッドでは「上書き保存」の確認が表示されます。

こちらも名前を付けて保存には必要な機能ですね。


なお、当然ながらExcelファイルを「名前を付けて保存」する際は、
WorkbookオブジェクトのSaveAsメソッドが使用可能です。

本メソッドはCSVの書き出しやhtmlテキストの出力など、
Workbookではないファイルを保存する際に使用してください。