名前を付けて保存ダイアログを開く方法を解説します。
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ではないファイルを保存する際に使用してください。