フォルダパスを取得するしくみ
選択したフォルダ(Folder3オブジェクト)のフォルダパスは、「FolderItem」オブジェクトの「Path」プロパティを使用して取得します。FolderItemオブジェクトを参照するには、取得したFolder3オブジェクトの「Self」プロパティを使用して参照できます。したがって、Folder3オブジェクト→FolderItemオブジェクト(Selfプロパティで参照)→Pathプロパティとたどることで、フォルダパスを取得することになります。ItemオブジェクトのPathプロパティでフォルダパスを取得
取得したフォルダパスはセルB2に入力したいので、入力するプログラムは下図のようになります。
取得したフォルダパスをセルB2に入力
なお、ここでは、「フォルダの参照」ダイアログボックスの「キャンセル」ボタンがクリックされると、変数「objFolder」に「Nothing」が格納されます。この場合は、「Exit Sub」でプログラムの実行を強制終了しましょう。プログラムは、Ifステートメントを使用して、下図のように加工します。なお、オブジェクトが格納されている変数を比較するときは、「=」ではなく「Is」キーワードを使用してください。
「キャンセル」ボタンがクリックされた場合の処理
オブジェクトを格納した変数は後処理が必要
これで、プログラムの処理が終了しますが、オブジェクトを格納した変数には、「Nothing」を格納してメモリを開放する後処理が必要です。ここでは、2つの変数「objShell」と「objFolder」について、下図のように後処理を入力します。オブジェクトを格納した変数は後処理
プログラムをボタンに登録して完成
これで、コピー元フォルダパスを取得するプログラムの入力が終了しました。実行しやすいようにボタンを作成して、プログラムを登録しておきましょう。ボタンを作成してマクロを登録
コピー先フォルダパスを取得するプログラムを作成
コピー先フォルダパスを取得するプログラムは、コピー元フォルダパスのプログラムをコピーして、マクロ名や「フォルダの参照」ダイアログボックスに表示する文字列を修正し、フォルダパスを入力するセルをセルB3に修正するだけで作成できます。コピー先フォルダパスを取得するプログラム
こちらも、ボタンを作成して、プログラムを登録しておきます。
ボタンを作成してマクロを登録
リネームマクロの拡張ポイント
これにて、リネームマクロの完成とします。最後に、拡張できるポイントを紹介しておきましょう。■Excelファイル以外のファイル名も一覧に抽出
今回作成した仕様では、旧ファイル名一覧にExcelファイルだけが抽出されます。これを、Excelファイル以外のファイル名も一覧に抽出できるようにするには、「ファイル一覧作成」プログラムのDir関数の引数の記述で、拡張子の部分もワイルドカード「*」を使用した「Range("B2").Value & "?*.*"」に修正してください。
■新ファイル名一覧の拡張子の入力を省略
新ファイル名一覧にリネーム後のファイル名を入力するとき、現状では、拡張子も入力する必要があって面倒です。これを、新ファイル名一覧はファイル名のみの入力とし、拡張子は、旧ファイル名一覧のファイル名から取り出して結合する、といった処理にするとよいでしょう。
■クリアボタンを作成
フォルダパスやファイル一覧をクリアするマクロを作成しておくと便利です。セルの内容は「ClearContents」メソッドでクリアできます。ファイル一覧のセル範囲を特定するところが大きなポイントになります。