前回の投稿では、VBAでフォルダーを移動させる作業のあらましを書きました。
この作業では、プログラミングのため、外部ライブラリを使うと説明しました。
名称は、FileSystemObjectと言って、VBエディターで設定する必要があります。
画面上の[ツール] から [参照設定] をクリックして、該当のライブラリーを選択。
これで、このライブラリーに登録された関数が使えるようになって、便利です。
もし、これを使わないのであれば、VBA内にもファイルを扱う関数はあります。
ただ、プログラミングは以前の投稿で述べたように、複雑で手間が掛かります。
なので、フィル管理専用に作られたライブラリー(コマンド群)が高機能なんだ。
次に、設定したら、プログラミングでは変数の扱いで設定する必要があります。
自分の経験ですと、ライブラリーそのものを変数扱いで記述した方が便利だな。
<事前バインディング>
Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化
~~~(実行コード記述)
Set fso = Nothing
<遅延バインディング>
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
~~~(実行コード記述)
Set fso = Nothing
しかも、この事前バインディングの方が、処理が速くなるという触れ込みです。
遅延では、わざわざ、オブジェクト変数設定からライブラリーを立ち上げます。
変数にライブラリーを直接に宣言したほうが、記述の読みやすい利点があるな。
なので、この宣言を使うとして、このライブラリーはクラスの呼び出しが優秀。
それは、フォルダー配下の階層化サブフォルダーまで、同時移動するコマンド。
このコマンド記述の先頭では、”Call fso.MoveFolder()”のように呼び出します。
<サンプルコード>
Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化
Call fso.MoveFolder("D:\TEMP2", "D:\AnotherFolder\")
' 同じフォルダ名で移動 (D:\AnotherFolder\TEMP2)
Set fso = Nothing '後始末
つまり、操作がカプセル化されたコマンドを使ってフォルダー全体を移動する。
そして、コマンドの呼び出しに、プロシ-ジャを呼び出すようにコールします。
これって、Functionプロシージャをライブラリーの中に設定したようなものだ。
このプロシージャの中に、従来のVBAのファイル関連コマンドが仕組んである。
"Dir"で、ファイルやフォルダの存在をチェックし、"MkDir"でフォルダを作成。
"FileCopy"で、ファイルをコピーしたら、”RmDir”で既存フォルダを削除する。
そんな記述でしょうが、試しにサンプルコードを実行すると、あーら不思議だ。
サブフォルダー配下のファイルまで完全に移動してくれて、びっくらこいたわ。
というわけで、サンプルとして書いてみたコードは、次回の投稿で紹介します。
このコードでは、デスクトップ上に置いたフォルダーを、Cドライブの、ドキュメント、ピクチャのフォルダーに移動するもので、ユーザーフォームを使って操作しやすいようにしていますので、画面上、デスクトップがごちゃごちゃになった人は、整理で使ってもらえればと思うのでした。
0 件のコメント:
コメントを投稿