今回も雑学ネタ。
特に役立つ話ではない。
以前からVBAの正体が気になって仕方がなかったが、昨日ようやくその正体を突き止めたので書き留めておく。
まず、VBエディタのツールから参照設定をすると、そこにVBAがいる。
VBAへの参照設定はどうやっても外すことができない。
そしてDLLのパスもかかれている…かとおもいきや、右端が切れている。
見えている円マークまでたどってあとは自力で探そうと思ったけれど…
そもそもパスが無い。
次にオブジェクトブラウザで確認してみる。
上のボックスでVBAを選択すると、下のペインにライブラリの正体が表示される。
ずっとVBA7.DLLだと思っていたが、正しくはVBE7.DLLのようだ。
…が、しかしさっきと同じパスだ。
一応フルパスにダイレクトアクセスしてみたが、パスが無いというエラーだった。
それからネットで色々検索しているうちに、以下の記事にあたった。
turtle-blue00.cocolog-nifty.com
上記の記事で紹介されているパスは
%programfiles%\Microsoft Office 15\vfs\ProgramFilesCommonX86\Microsoft Shared\VBA\VBA7.1
だったが、Microsoft Office 15直下にvfsが無い。
結局私のPC環境では、以下のパスにVBE7.DLLが見つかった。
C:\Program Files\Microsoft Office 15\root\vfs\ProgramFilesCommonX86\Microsoft Shared\VBA\VBA7.1
ためしにOfficeを落とした状態で、Dead_VBE7.DLLにリネームしてみた。
※真似しないでください。Officeが起動しなくなっても責任は取れません。
すると…
VBEが起動できない。Alt+F11でもビープ音が鳴るのみ。
元のファイル名に戻すとVBAが使用できるようになった。
次に同じフォルダに存在するVBEUI.DLLをリネームしてみると、Excel自体が使用できない。シートを開いた瞬間にインストールの実行中というウインドウが高速で点滅を繰り返してさっぱり進まない。
これもファイル名を戻すと復活。
最後にVBEUIRES.DLLをリネーム。
こちらはVBEを起動しようとするとメモリ不足と表示されるようになった。
しかしマクロの記録と再生、実行はできる。
これも元にもどしてすっかり元通り。
しかし、皆さんの環境でどうかは保障いたしかねるので、真似はお勧めできない。
てっきり私はVBエディタの本体がExe形式でどこかに存在して、そこからVBAライブラリを呼んでいるのだと思っていたが、VBエディタそのものがExcel等のOfficeソフトから呼ばれるDLLに過ぎないということだ。
そしてそのDLLには、多数のモジュールやクラスが定義されている。そのモジュールの中にさらに関数や列挙型定数が定義されている。
そういう構成らしい。