ダイアログでフォルダを指定
■ボタンを作成
ちなみに、Excelシートにボタンを配置するのは、[開発] – [挿入] からフォームコントロールにあるボタンで作成してください!
※ActiveXコントロールでもいいんですけど・・ねぇ!?w
このフォームコントロールのボタンは、シートに置くなり、マクロ登録画面が出てきて、マクロ名が『ボタン1_Click』となっています
「キャンセル」ボタンで閉じてくださいw (※もちろん、既に呼び出すマクロを作成済みであれば問題ないですが!)
ちなみに、配置したボタンを選択すると、左上の名前ボックスに『ボタン 1』と表示されているのがわかります(※これが先ほどのマクロ名に使用されています)
ここを選択して、書き換えるとボタンの名前が書き変わります!(※ボタンに表示する文字列が変わるわけではありません)
それらしく『SelectFolderButton』と変えてみました
そうすると何が起こるかというと、お気づきとは思いますが、この「参照」ボタンを右クリックして、「マクロ登録」を選択すると、マクロ登録画面のマクロ名が、「SelectFolderButton_Click」となってくれます
■マクロを作成
「新規作成」ボタンを押下すれば、VBE(Visual Basic Editor)にマクロ名で関数定義部が作成されます
このマクロ名の関数から先ほど作成した「フォルダ参照ダイアログボックスを呼び出す関数」を呼び出して(ややこしいなw)、関数の戻り値を表紙シートの「カレントフォルダ」のところに出力すれば良いのです!
Sub SelectFolderButton_Click() ActiveSheet.Range("F3").Value = UseFileDialogFolderPicker End Sub
簡単に書くとこうなりますw
しかし、『”F3″』ってのをハードコーディングしたくない人が多いと思います!
よくやるのは、Constを定義して、定義名で『”F3″』を置き換える人は多いですよねー?
でもその場合、カレントフォルダの入力欄を別の場所に移動させたり、上に行を挿入したりすると、その都度、VBEを開いてソースを書き換えないといけません
人によっては、この『”F3″』を更に、設定用のシートに定義したりする人もいますが・・
今回はシンプルに関数の引数で受け取りましょう!
■マクロ関数に引数を設定する
・・・マクロの呼び出し関数に引数を付ける!?
マクロ関数に引数を付けるのが気持ち悪いと人もいるかもしれませんが、シート側だけで修正できるので、意外とメンテナンス性は高いのですよー
まずは、再度「マクロ登録」を以下のようにやり直します!
- マクロ名の後ろに半角スペースを空ける
- 引数はダブルクォーテーション 「” 」で囲む
- マクロ名と引数全体をシングルクォーテーション「’」で囲む
引数で渡すのは、セルのアドレス『”$F$3″』とします
あとは、マクロ名の関数に引数を追加して終了です
Sub SelectFolderButton_Click(rng As String) ActiveSheet.Range(rng).Value = UseFileDialogFolderPicker End Sub
注意すべき点は、以下の順で行ってください
- マクロ登録で引数を設定
- マクロ名関数に引数を追加
逆にすると、マクロ登録時に、マクロ名の関数が表示されません (※本来、マクロ名で指定できるのは、引数を持たない関数ですので・・)