VBAのエラー・メッセージに困った話
わたしはつい最近仕事のため、ExcelとWordを動かすVisual Basic for Applicationプログラミングを習いはじめました。Javaプログラミングの経験はウン十年、素人ではないつもり。しかしVBAには初心者なのでけっこうまごついています。とくにVBAが表示するエラー・メッセージが理解できなくて困っています。
ある時、こんなエラーダイアログに遭遇しました。
どんなVBAコードがこのエラーを発生させてたかというと、下記のようなクラスモジュールでした。いわゆる「インターフェイス」というやつです。
まる一日頭を掻きむしったあげくこのコードにミスがあることがわかりました。どこがどう間違っているのかはたいしたことではない、他人さまに向かって述べるほどのことではない。しかしわたしはこれだけ言いたい。VBAが出力する日本語のエラー・メッセージは意味不明すぎる、と。
誤訳だった
VBAはこう表示しました。
コンパイル エラー:
オブジェクトモジュールにはインターフェイス 'Transform' 用の 'IDocTransformer' が必要です
意味わかりますか?ABCでなく漢字かな文字だから一見日本語のようにみえるが、まったく意味不明です。
このメッセージを見てわたしは「IDocTransformer
というモジュールが見つからないよ」とVBAが指摘しているのかと疑った。半角アルファベットでなく全角文字をタイプしちゃったかと疑って何度も打ち直したがそうではなかった。このメッセージを手掛かりにネットを検索した。
VBA コンパイル エラー オブジェクトモジュールには インターフェイス 用の が必要です
とキーを指定してググったが、役立つページは見当たらなかった。
ふと思い立って
VBA error object module interface
とキーを指定したら、1つだけStack OverflowのURL がヒットした。それによると同じメッセージが英語では下記のように表示されるらしい。
Compile error:
Object module needs to implement 'Transform' for interface 'IDocTransformer'
おや?これなら意味がわかる。VBAは IDocTransformer
モジュールが存在していることは承知していて、そのなかに Transform
メソッドの定義があるべきだと承知しているが、 Transform
が見つからない、とこの英文メッセージは言っている。
だから IDocTransformer
モジュールのなかの Transform
メソッドの書き方が間違っているかもしれないとアタリをつけて、コードを見直したら見つけました。 IDocTransformer
モジュールを書き間違えていた。
Public Function Transform( _
じゃなくて
Public Function IDocTransform_Transform( _
と書くのが正解だった。
おすすめ
VBAの日本語のエラーメッセージが意味不明だったら誤訳を疑え。英語原文のメッセージならきっとあっさり意味が通じる。
ちなみにわたしのWindow10のPCでVBAのメッセージを英語で表示させるには次のような設定が必要でした。
(1) Windos10に英語(米国)のLanguage Packをインストールした
(2) Excelのオプションで優先的に英語で表示するよう設定した
OSの再起動、Excelの再起動を何回か繰り返しました。