CreateObject(“Scripting.FileSystemObject”) を使ってサブフォルダを取得

先日お話ししました

指定したフォルダ内とサブフォルダ内全てのファイル名を取得(Excel VBA)

の続きのお話です。

Dim FSO As Object


Set FSO = CreateObject("Scripting.FileSystemObject")
For Each fd In FSO.GetFolder(pt).SubFolders
    Call ファイル名一覧取得(fd.Path, ws, t_row)
Next fd
Set FSO = Nothing

変数「FSO」にセットしているのは「FileSystemObject」というオブジェクトです。■FileSystemObject(ファイルシステムオブジェクト)

FileSystemObject」とはVBAでファイルやフォルダを操作(作成、削除、移動、コピー等)するときに必要になるオブジェクトです。

FileSystemObject」という箱の中に、Excel上には存在しないファイルやフォルダを入れて、Excel上で操作できるようにする・・・という感じでしょうか・・・。

FileSystemObjectの前についている「Scripting」とは何でしょうか。

FileSystemObjectオブジェクトは Microsoft Scripting Runtime が提供する、ActiveXオブジェクトの1つです。この辺は難しい話なので深く考えず「”Scripting.FileSystemObject”」と、まとめて覚えておきましょう。

使い終わったら「Set FSO = Nothing」として変数の中身を空っぽにしておきます。

箱の中にファイルやフォルダを入れるだけでは動かなくて、それをExcelの中で動くようにしてくれるのが次にご紹介するCreateObjectです。

■CreateObject(オブジェクト)

(  )内にオブジェクトを入れて実行すると、そのオブジェクトのインスタンスを作成する関数です。

インスタンスを作成するとは?

Excelの中に存在していない、オブジェクト(ファイルやフォルダ)をExcelの中に「実体」として存在させる関数・・・とでも言いましょうか。

■GetFolder(フォルダーパス)

指定したパス内のフォルダーに対応するフォルダーオブジェクトを返します。

■SubFolders

GetFolderで指定したフォルダーに含まれる、全フォルダーから構成される Folders コレクションを返します。

これらを使って・・・

For Each fd In FSO.GetFolder(pt).SubFolders
・
・
Next fd

指定したパス(今回は変数ptに入れたフォルダパス)のサブフォルダー群の中から一つずつをオブジェクト変数「fd」に入れて、サブフォルダーが無くなるまで処理を繰り返します。

なんだか上手に説明できず申し訳ありません。。。

【参考】
指定したフォルダ内のファイル名全てを取得(Excel VBA)
変数でよく使われる「buf」「tmp」の意味
Dir関数が取得するファイルの順番
フォルダ内のフォルダ名全てをGetAttrを使って「エラー53 ファイルが見つかりません。」を出さずに取得(Excel VBA)
GetAttrとは?「= vbDirectory」ではなく「And vbDirectory」となるビット演算の疑問
フォルダ名だけを取得したい時に出てくる 「.」 と 「..」 とは?
指定したフォルダ内とサブフォルダ内全てのファイル名を取得(Excel VBA)
再帰処理とは?フォルダ内とサブフォルダ内全てのファイル名を取得(Excel VBA)
参照渡し「ByRef」と値渡し「ByVal」の違い(Excel VBA)

■スポンサーリンク

■ランキングに参加しています。
↓このブログを気に入っていただけましたら、ポチッとお願いします。
にほんブログ村 IT技術ブログへ
にほんブログ村