QA@IT

VBAをDLL化する方法を探しています

6817 PV

VBAのコードを、最終的にライブラリ(DLL)に変換する方法を探しています。

ネットで色々と検索をかけて調査をしてみたものの、該当する記事等がなく困っています。

VBA→DLLを自動化できるような方法はないでしょうか。

例えば、VBAを直接DLLにする方法以外に、
C/C++などに一回コード変換してからDLLにする、なども考えているのですが、
その場合はコード変換を自動で行うような技術、ツールなどが無いかを探しています。
(手で変換するにしても、VBAコードの中でセル参照とかしてたらどう対応するのか?など問題あるので、難しいのかなという気もしてはいるのですが。。。)

初心者まるだしの質問で大変申し訳ありませんが、
そのあたり、可能か不可能かの判断を含めて、皆様のお知恵をお借りしたいと思います。

どうぞよろしくお願いします。

回答

目的がよくわからない(というよりは、マクロ付きブックのままではだめな理由がわからない)です。
特にDLLにしても、そのDLLを読み込むVBAが必要になりそうですがそこは問題ないんでしょうか?

改造されたくないだけであれば、マクロだけにパスワードを付ければいいと思います。
(マクロのパスワードはあまり強固ではないですが)

いくつか挙げてみます。

DLLにこだわるのであれば、

  • .NETでC#やVB.NETと Visual Studio Tools for office を使って DLLにを作成する
  • C / C++ の DLLを作成して VBAから Declare文経由で呼び出す
  • Active X Dllを作成して VBAからCreateObjectで呼び出す(VB6があったころならVBAから簡単に移行できたと思いますが、それ以外の方法で ActiveX作成が得意な方がいなければ、後述のxlaのほうがお手軽かもしれません)

などの方法があるとは思いますが、コスト面を考えるとどれもお勧めはしないですかね。
VSTO以外は結局VBAは必要になるので、目的によっては達成できていない可能性もあります。
VSTOは昔試したとき、作るのはいいけどランタイムの配布やモジュールのインストールが必要だったりするので作る前に導入方法が運用上適用できるかを確認した方がいいかもしれません。

それ以外だとアドイン化する(xlaファイルにしてしまう)という手もあると思います。
これもアドインの読み込みをしてもらう必要はありますが。

Tak1waさんもおっしゃってますが、理由に応じてアプローチが変わってくると思いますがご参考までに。

編集 履歴 (0)

こんにちは。
DLL化したい処理の内容とDLL化したい理由によってアプローチを変えるのが良いと思います。

VBAに限らず汎用的に使いたいクラスライブラリであればDLL化するのも良いと思いますが、
言及されているシート操作などを共有したいのであれば、
VBAモジュールとして外だしにしておく程度で良いと思いますよ。

以下の方法などで読み込めるようにしておくのはどうでしょうか。
http://d.hatena.ne.jp/language_and_engineering/20090731/p1

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。