客先の環境でテストをしている同僚より、自社では動いたExcel VBAの命令がコンパイルエラーで動かないとの連絡が。問題の関数はTrim(文字列の空白削除)。VBAはVisual Basic 6.0に似た言語であることから、VB6.0のランタイムなど、何か必要なモノが入っていないという路線を考えましたが、考えられる原因には思い当たらず(特に入れていない環境でも動いている)。
調べ始め
ということでWeb検索してみたら、こんな記録が。なんと、「String.Trim」と書けば動くとのこと。実際、動く。Trim命令などの文字列操作系命令は、VBAではStringsクラスに格納されていて、それをフルネームで書けばよいと。理屈がわからないのですが(なぜフルネームじゃなくても動く環境があるのか)、とりあえずは問題は押さえ込んで、あとで原因調べます。
- 【Excel/VBA】 TrimやLeft,Right関数でコンパイルエラー / 奥様はシュミグラマー
- http://shumigrammer.blog117.fc2.com/blog-entry-28.html
- 「コンパイルエラー:メソッドまたはデータメンバーが見つかりません」のエラー / MSDN VBAフォーラム
- http://social.msdn.microsoft.com/Forums/ja-JP/vbajp/thread/5419c600-28f5-4bf2-8988-c9dfef22f575/
Excel 2003 VBAのランゲージリファレンスを見てみようと思ったのですが……なんだこのサイトは…。
- Excel 2003 VBA Language Reference
- http://msdn.microsoft.com/en-us/library/office/aa220733(v=office.11).aspx
どうやらここからヘルプファイルをダウンロードしなければいけないみたい。
- Office 2003 Editions
- Excel VBA Language Reference:http://www.microsoft.com/en-us/download/details.aspx?id=7273
見づらい上に欲しい情報は見つけられなかった。
自分のPCで発生した
調査は仮想PCで行っていたのだけど、とある作業から自分のホストPCのExcel 2010で問題のVBAを動かしたところ…現象が出た。TrimやらFormatやらStrConvには「Strings.」を、また、Dateなどには「DateTime.」をつけないと動かない。
はて、なんだろう。ライブラリがないなら動かないけれど、完全修飾すれば動くということは、やはりメソッド名が競合していると思われる。問題の環境(自分のホストPC)は、Windows7にWindows Updateと、Visual Studio 2005/2010、Office 2010、Project 2010などを入れただけの環境。
詳細はもう少し時間がとれたら調べてみるつもり。なんだかわからないけど関数名をきちんと書いたら動きました、では格好が付かない。
わかったかもしれない
「Visual Basicエディターの参照設定欄に1つでも参照不可印があると、フルネームで修飾しないと関数を呼べない」ということかもしれません。
今回の場合、Oracleのドライバー参照が×になっていました。これを参照しない、にすると、問題なく動く……。どういう仕様なんでしょうねぇ。

Excel VBAの教科書 (Informatics & IDEA)
- 作者: 古川順平
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2018/07/21
- メディア: 単行本
- この商品を含むブログを見る