2021年6月6日日曜日

ファイルシステムへアクセスする制御ライブラリーなので、ワークシートと全く無関係に操作できるプログラミング ー ファイルシステムオブジェクト(その二)(VBA - FileSystem Object)

      
前回の投稿では、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 件のコメント:

コメントを投稿