VBAと日々のこぼれ話

  1. VBA

【VBA】 フォルダを逐一、選択したい

書くより選択の方が楽じゃないかな

前回、実行日毎にフォルダを作成するコードを紹介しました。

 

このサンプルコードの弱点は、コードにフォルダのパスをオウンコーディング(コードに直書き)していることです。オウンコーディングは楽なのですが、

書き換え作業が発生する
コードを意図・意図せずに書き換えてしまう可能性が高い

というデメリットがあり、作成者自身以外が使うには向きません。

また任意のフォルダパスをオウンコーディングしているため、そのフォルダが存在しているかのチェックを実施していません。本来は、チェックがあってしかるべきなのです。

コードに触れずに都度、ディレクトリやファイルを選択したい!

そんな時は選択ダイアログを表示させてあげれば良いのです。
もちろんユーザーフォームで入力させる方法もありますが、入力するより視覚的に選択形式にするほうが分かりやすく、使いやすいように私は思います。

ここでは、前回の任意の場所に実行日毎にフォルダを作成するの発展形として、
ディレクトリ選択→選択したフォルダ内に実行日のフォルダを作成するようなサンプルコードです。

フォルダ選択ダイアログ

 

これで、フォルダを直接指定するためフォルダの存在チェックは不要。さらに、不用意にソースを触られることもありません。(処理の途中でフォルダを削除される可能性は考慮外)

フォルダの選択範囲を狭めたいときは「.InitialFileName」の設定値を考えてみてください。
ここには、ダイアログの初期表示のパス(場所)を設定するのである程度場所を絞り込んで表示できます。

このサンプルコードは短いから良いのですが、一つのプロシージャに全部の処理を載せると可視性・可読性が低くなります。さらに大きな処理の場合、同じような処理を毎回書くのは手間です。ですので、使いまわしが出来そうなフォルダ選択部分のコード部分等はプロシージャ分割して使うとすっきりします。

【スポンサーリンク】



 

おまけ

とは言っても「分割って簡単に言ってくれるけどどうやって分割するの?」と思っているだろう方のために、一例をおまけとして挙げてみます。

メイン処理

フォルダ選択ダイアログ部分

 

こちらは上のサンプルコードのフォルダ選択部分をファンクション化したものです。
ファンクションの戻り値は、選択したフォルダのフルパス(キャンセルボタン押下の場合、空)です。
引数はダイアログ初期表示のパスにしていますが、工夫次第で引数なしでももっと増やしても色々出来ます。
ファイル選択については、いくつかパターンがあるのでまたの機会に

【スポンサーリンク】



VBAの最近記事

  1. 【VBA】(VBAを始めたばかりの人が陥りがちな落とし穴) Excelシートの最終行を取得…

  2. 【VBA】QRコードを作成したい

  3. 【VBA】CSVを1行ずつ処理したい

  4. Excelシートの最終行を取得したい その1

  5. 【VBA】未だに苦手としていること

関連記事

【スポンサーリンク】




PAGE TOP