マクロの実行中に、ダイアログボックスを開き、
ユーザーにフォルダを指定・選択してもらうコードを紹介します。
↓これがダイアログボックスです。
変なの映ってないよね…?
ソースコード
メインコードにべた書きすると非常に見づらいコードになるため、
汎用関数として作成します。
Function GetPathダイアログボックスでフォルダを選択する(Optional Path初期表示フォルダ As String = "") As String With Application.FileDialog(msoFileDialogFolderPicker) If Path初期表示フォルダ <> "" Then .InitialFileName = Path初期表示フォルダ If .Show Then: GetPathダイアログボックスでフォルダを選択する = .SelectedItems(1) End With End Function
使い方
ユーザーが選択したフォルダのパスを返す関数なので、Stringの変数に入れたりして使います。
Dim Path保存先フォルダ As String Path保存先フォルダ = GetPathダイアログボックスでフォルダを選択する If Path保存先フォルダ = "" Then MsgBox "保存先のフォルダが指定されなかったため、ファイルを保存できませんでした。" Else wb作成ブック.SaveAs Path保存先フォルダ & "\○○.xlsx" End If
キャンセルボタンが押されるなど、フォルダが取得できなかった場合は""を返します。
省略可能な引数として設定した「初期表示フォルダ」を渡すと、
ダイアログを開いたときに表示するフォルダを指定できます。
Const Path推奨保存先フォルダ = "\\○○\△△\□□" Path保存先フォルダ = GetPathダイアログボックスでフォルダを選択する(Path推奨保存先フォルダ)
コードの解説
覚えて得するものがなさそうなので、特に解説はしません。
私はFileDialogオブジェクトをこの用途以外に活用したことないです。
ネットからコピペしたコードをメインコードにベタ打ちすると、
後で読み返すときに解読が必要になって良くないです。
しかし、こんな一発屋コードの意味をいちいち理解するのは面倒です。
そんなときは、こうやって関数に隠しちゃえばいいのです。
「ダイアログボックスでフォルダを選択する」という日本語の意味と、
「GetPath」という返り値の仕様が分かれば、
関数の中身は二度と(一度も?)見なくて良くなります。
この関数をコピペしたら、
「GetPath + Ctrl + Space で呼び出せる」
ことだけ覚えてください。
他のことは(正確な関数名すら)忘れてOKです。