仕事でオフィスに付属するVBAのコードを作成しますが、一つ気が付きました。
特にエクセルを使う場合で、ワークシートを全く使わないコードが書けること。
その一つとして、ファイルシステムオブジェクト(FSO)と言うのがあります。
これは、コンピュータのファイルシステムへのアクセスができるスグレモノね。
ファイルやフォルダを探したり、移動したり、削除したりと、管理上便利です。
それで、コードを作成したブックを開いて、目的を完了したらブックを閉じる。
これはプログラムみたいなもので、エクセルを使ってVBAを実行しているだけ。
ファイルシステムを操作するのが目的ですから、当然ワークシートは不要だな。
まあ、会社の仕事でファイル移動や整理を定期的に行う必要から、作りました。
この略称のFSOは、操作コマンドを参照する設定が必要なので記述が増えます。
しかも、オブジェクト変数を使うことで、この設定を使いますよと宣言します。
説明するだけでは分からないでしょうから、簡単なコードを紹介してみますか。
Sub Sample()
Dim fso As Object, fldr As Object, fle As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set fldr = fso.GetFolder(Environ("HOMEDRIVE") & _
Environ("HOMEPATH") & "\Documents\")
Call FleLst(fso, fldr) '変数渡しでプロシージャをコール
Set fso = Nothing 'オブジェクト変数のクリア
End Sub
Sub FleLst(ByVal fso As Object, fldr As Object)
Dim fle As Object
For Each fle In fldr.Files
Debug.Print fle.Name 'ユーザーのホームディレクトリ下のファイル
Next fle
End Sub
VBエディターを開き、コードをエクセルのThisWorkbookにコピペして下さい。
実行すると、イミディエィトウインドウ内にファイルの一覧が、出力されます。
これは、ドキュメントフォルダーのファイル一覧ですが、要点は変数渡しです。
参照設定したオブジェクト変数を、別のプロシージャへ渡すことができますね。
つまり、一つのプロシージャに苦労して収めなくても、記述が分散化できます。
参照設定のオジェクト変数であっても、変数渡しをするのに制約がないのです。
それで、このFileSystemObjectの関数には、多くのプロパティを持っています。
関数を動かすための属性ですが、このサンプルではフォルダーを返す目的です。
というわけで、最近はコードの記述を分散化(オブジェクト化)して書く日々。
工夫次第なのですが、参照設定をしつつ、このような関数の属性が多いことから、属性をとっかえひっかえ操作する場合には、こういった変数渡しで別のプロシージャをコールしながら実行するのが、分かりやすい記述になるのではと、思ったのでした。
0 件のコメント:
コメントを投稿