VBA のなにがめんどくさいって、コードとリソースが一体となっているところである。Excel ならワークシート、Access ならテーブルとかもろもろのオブジェクトと VBA コードとが、単一のバイナリ ファイルに格納されるところだ。ある意味でそれは簡便さであるのだけど、その代償は大きい。VBE の貧弱さと相まって、プログラマのイライラと毛嫌いを誘発する元ともなっている。
いちおう VBA コードのインポート/エクスポートもできるけど、1モジュール/オブジェクトずつ、ちまちまとしかできない。そんなら一括インポート/エクスポートできればいいんじゃね、というわけでスクリプトを作った。CodePlex にて公開。
http://tsukeawase.codeplex.com/
こういうものを作られている方は他にもいらっしゃるのだけど、僕のほしいものとはちょっと違っていたので作った。僕のほしかったのは、コマンドから実行でき、Excel でも Access でも使える単一のツールだ。
使い方。まずは [Download] を。ダウンロードした zip を展開すると入っている Tsukeawase.wsf と Tsukeawase.partial.js が本体。Tsukeawase.wsf が main 側で、Tsukeawase.partial.js はライブラリ。そして bin フォルダが Excel/Access ファイルの格納場所となっている。
で、bin の中にあらかじめ入っているサンプルの Excel マクロ有効ブック、Book1.xlsm を使って、まずは VBA コードの全エクスポートを試してみよう。
ちなみに、Excel 2010 の場合、[ファイル オプション] - [セキュリティ センター] - [セキュリティ センターの設定] - [マクロの設定] から [開発者向けマクロの設定] で [VBA プロジェクト オブジェクト モデルへのアクセスを信頼する] のチェック ボックスをチェックしておく必要がある。もちろんこれを有効にするとセキュリティが弱まるので、自己責任で。
以下のようにスクリプトを実行すると、bin フォルダ直下にある Excel/Access ファイルに含まれるモジュール/オブジェクトが全部まるっとエクスポートされる。エクスポートされたファイルは、src フォルダ下に Excel/Access ファイルと同名のフォルダが作られ、そこに作成される。\bin\Book1.xlsm なら \src\Book1.xlsm\ フォルダ下にファイルができる。
cscript //nologo //job:push tsukeawase.wsf
反対に、以下のようにスクリプトを実行すれば、全インポートできる。
cscript //nologo //job:pull tsukeawase.wsf
ここで、これらの操作は同期的に行われる。どういうことかというと、たとえばエクスポートの前に、src フォルダ内のファイルがすべて消されるということで、つまり、\bin\Book1.xlsm が含む VBA コードと、\src\Book1.xlsm\ に格納されるファイルとが同期するようになる。逆(インポート)もまたしかり。ただし、xlsm や accdb を単に削除するようなことはなく、それに含まれる VBA コードが削除の対象となる。ワークシートやテーブルが消されることはない。
しかしそれじゃあなんか不安な気もする、ということで、それぞれの操作の前にバックアップ処理を行うようにしている。それぞれの操作における上書きされ側、つまり、エクスポート(push)であれば src の内容が、インポート(pull)であれば bin の内容が、backup フォルダにバックアップされる。スクリプトの実行ごとに backup の内容が増えていくので、いらなくなったら自分で都度削除する。
というわけで、非常に誰得・俺得なツールであり、また現状 Alpha Release ですが、気が向いたらブラッシュアップしていきますたぶんきっと。