せっかくExcelVBAでツールなどを作って提供しても、セキュリティレベルが高や最高だと実行できず、納品して現場で顔面蒼白になった、という経験をお持ちの方もいらっしゃるかもしれません。


実はコレ、抜け道があるのです。

そのためには電子署名すら不要です。



一つは公開されていると思いますが、Excelが定めた安全なフォルダにあるブックであればセキュリティレベルに関係なく実行できてしまうそうです。Excel起動時に実行されるVBAがあるので、カンのいい人は「どれがそのフォルダ」なのかピンと来るかもしれません。複数あるようですが、私は1フォルダしか覚えていません・・。この方法は使っていないので他は忘れてしまいました。



もう一つは、アプリケーションから呼び出す方法です。

あるとき、ExcelVBAからVBAを含む別のブックを起動しました。特に気にしていなかったのですが、あるとき「セキュリティレベルは中なのでダイアログが出てきてマクロを有効にするかどうか問われるはずじゃないのか?」と疑問が湧きました。

仮説として

・1つ実行してもよい、と認識されたVBAからなら、VBAを有効にしてブックを開ける

・他のアプリケーションからも指定さえすれば、VBAを有効にしてブックを開ける

の2つを考えました。


前者は仮説通り。しかし、最初のブックのVBAをどのように有効にするのかが問題です。先述の安全なフォルダに入れる、という手もありますが、管理が面倒な気がします。


後者はExcel2000でセキュリティレベルを高にした状態で実験をしました。

HSP3 で起動用exeファイルを作り実験したところ、起動してくれません。

しかしVBScript(ちょっと名称が正しくないかもしれません。ブラウザ上で動かすのではなく、Windows上で動かす奴で、WSHっていうのが正しいのかも。あまり使い分けをしていないのでご指摘があれば訂正します)から起動させると思惑通り起動しました。Excel2000の「低」「中」「高」、Excel2003の「低」「中」「高」「最高」を試しましたが、どれも問題なく起動しました。

仮説は正しくなかったようですが、どうやらMS製品からであれば起動できる、というところのようです。


実務上、これは使っていますが、VBScriptをナマで記載するのはリスキーなので、HSP3のexeで「Excelを実行するVBScript」と、「そのVBScriptを起動するDOSバッチファイル」を生成し、DOSのバッチをキックさせています。終了後その2ファイルを削除してます。ここまでやらなくてもいいのですが、他の開発環境がないためこうしました。


なお、この方法は「脆弱性」かなと思って問い合わせたところ、マイクロソフトからは「脆弱性ではない」と回答を貰っています。



ご利用にあたりましては細心の注意を払っていただけますと有り難いです。