名前を付けて保存ダイアログボックスの表示
現在開いているファイルに別の名前を付けて保存したい場合は、FileDialogプロパティに引数でmsoFileDialogSaveAsを指定して表示すると、「名前を付けて保存」ダイアログボックスが表示されます。
FileDialogプロパティの詳細については「VBAでファイルダイアログを表示する」をご参照ください。このページでは「名前を付けて保存」ダイアログボックスに特化して説明します。
ダイアログボックスの操作はコード上では3段階に分けて処理を行うことになります。
- FileDialogプロパティで、FileDialogオブジェクトを取得する。
- FileDialogオブジェクトのShowメソッドでダイアログボックスを表示する。(その後、ダイアログボックスでの操作を行う。)
- アクションボタンが押された場合はFileDialogオブジェクトのExecuteメソッドでボタンの処理を実行する。
構文
Application.FileDialog(msoFileDialogSaveAs) As FileDialog
引数にはMsoFileDialogType列挙型の「名前を付けて保存」を表示するためのmsoFileDialogSaveAs定数を指定します。
使い方
Application.FileDialogプロパティに「名前を付けて保存」ダイアログを表示するためのmsoFileDialogSaveAs定数を指定します。
対象のブックがマクロを含んでいる場合はFilterIndexに2を設定し、ファイルの種類を「Excelマクロ有効ブック」にします。そうでない場合は「Excelブック」にします。FilterIndexに設定する値はダイアログボックスのファイルの種類プルダウンに表示される上から順の番号で、一番上が1になります。
プロパティの設定が終わったらShowメソッドを使って「名前を付けて保存」ダイアログを表示します。ダイアログのアクションボタンを押した場合は-1、キャンセルボタンか×ボタンを押した場合は0が返ります。そのため0が返された場合はそこで処理を終了しています。
最後に「保存」ボタンの処理を行います。このとき、既存ファイルに対して同じ名前を設定すると上書きになるため、上書き確認ダイアログが表示されますが、「上書きしますか?」に対して「いいえ」ボタンを押すと、Executeメソッドが実行されずエラーになります。そのエラーを回避するために処理の先頭で「On Error Resume Next」でエラーを回避するようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Sub FileDialogSaveAs() On Error Resume Next Dim fd As FileDialog Dim ret '// 名前を付けて保存ダイアログを設定 Set fd = Application.FileDialog(msoFileDialogSaveAs) '// マクロを含んでいる場合 If ActiveWorkbook.HasVBProject = True Then '// ファイルの種類を「Excelマクロ有効ブック」に設定 fd.FilterIndex = 2 Else '// ファイルの種類を「Excelブック」に設定 fd.FilterIndex = 1 End If '// ダイアログを開く ret = fd.Show '// キャンセルボタンまたは×ボタンの場合 If ret = 0 Then '// キャンセル時は処理を抜ける Exit Sub End If '// 名前を付けて保存を実行 fd.Execute End Sub |