2023年1月19日木曜日

アプリに付属しているプログラム言語とは言っても、独立して働かせて実行できるところにメリットがある ー FileSystemObject(VBA)

        
仕事でオフィスに付属する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 件のコメント:

コメントを投稿