パソコン一台だけでもクライアント/サーバー環境は構築できる。
それを実現するのが、Virtual PC や VMWare などの仮想PCソフトである。

非力なパソコンでは辛いが、そこそこのスペックがあれば試す価値はある。

まず、今のパソコンのOSを「ホストOS」、仮想ソフト上で動くOSを「ゲストOS」と言うが、自分ではVMWareでゲストOSにLinux系のCentOSを入れたことしかないが、利用者としてはゲストOSにWindows2000、Linux系のRedhatの経験はある。ちなみに、Vistaは利用規約上ゲストOSにしてはいけないらしい。

さて、インストールをするとどうなるか?
それぞれのゲストOSが別のPCのようにIPアドレスを持つ。そう、まるでサーバーのように。

特にLinux系のOSで遊ぶには最適だろう。

VBAにもフォルダの変更関数やファイルの存在を確認するコマンドはある。Dirなどだ。しかし、DOSよりもバリエーションは少ない。

VBAからDOSをコールすることも可能だ。しかし、処理は非同期であり、同期させるには一工夫必要であるうえ、DOS窓が現れたり、DOS窓を隠すと処理が極端に遅くなるケースがあるなど、気になる場合もある。

そこで、VBScriptをVBAの中に取り込んで使ってみるのはだろう?DOSと同等のファイル/フォルダのコントロールができるうえ、VBAの内部で使えるので、VBAの処理と同期でき、余計な窓も開かないからだ。



上記のように、Microsoft Scripting Runtime にチェックを入れれば利用できるようになる。
使い方は Create Object するのではなく、以下のように定義する。

Dim Fs As Scripting.FileSystemObject

これで利用できる。
なお、文法はVBScriptと同じなので、そちらを調べてみるといいだろう。

作成者が意識しないところで、ExcelやAccessが拾ってくれるイベントがある。
Excelだと、各WorkBookと、ThisWorkbookにイベントがある。メニューバーとコードペイン(実際にVBAコードを記述するところ)の間に、コンボボックス(ドロップダウンリストともいうらしいが・・)が2つある。そのうちの左をGeneral)から変更すると、右側が既定のイベントになる。




WorkSheet/ThisWorkbookによって、表示されるイベントは異なるが、ありったけのイベントを出してみよう。そして、そのイベントに

Debug.Print [シート名] [イベント名]

というのを書いてみよう。

これを記述のうえ、シート上のイベントを実行すれば、いつ、どのイベントが、どういう順番で実行されるかが分かる。

解説するのもいいのだが、知りたい人はそれで調べてみるといいだろう。ただし、イミディエイトウィンドウを表示していることと、特にClose系はブレークポイントを埋めるなどしておく必要があるだろう。

サンプルはこちらの、ダウンロードを選択していただければ入手できる。