misc.log

日常茶飯事とお仕事と

Excel VBAの文字列操作関数がコンパイルエラー?

客先の環境でテストをしている同僚より、自社では動いたExcel VBAの命令がコンパイルエラーで動かないとの連絡が。問題の関数はTrim(文字列の空白削除)。VBAVisual 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)は、Windows7Windows Updateと、Visual Studio 2005/2010、Office 2010、Project 2010などを入れただけの環境。

詳細はもう少し時間がとれたら調べてみるつもり。なんだかわからないけど関数名をきちんと書いたら動きました、では格好が付かない。

わかったかもしれない

Visual Basicエディターの参照設定欄に1つでも参照不可印があると、フルネームで修飾しないと関数を呼べない」ということかもしれません。

今回の場合、Oracleのドライバー参照が×になっていました。これを参照しない、にすると、問題なく動く……。どういう仕様なんでしょうねぇ。