【会員アンケートご協力のお願い】抽選で計5名様に役立つ書籍をプレゼント!
定番のVBA関数でコンパイルエラーが出たときの対処法|Excel VBA |
「いつも使っているVBA関数が、エラーになって動かない!」という現象が起こったときの対処方法についてご紹介します。
たとえば、Excel 2010で作成したマクロをExcel 2002で実行すると、Date関数やMid関数などのいわゆる定番の関数でコンパイルエラーが発生することがあります。
Date関数はVBA(Visual Basic For Applications)ライブラリの中のメンバです。
「ライブラリが見つかりません。」というエラーが出ていますが、Excel 2010にもExcel 2002にも、VBAライブラリは存在します。
では、Excel 2010とExcel2002ではこれらの関数に互換性がないのでしょうか?
いえ、そんなハズはありません。
このような現象が起きたときは、[参照設定]ダイアログに「参照不可のライブラリ」がないか、確認してみてください。
参照不可のライブラリとは、参照設定のチェックがオフになっているライブラリのことではありません。ダイアログ内に「参照不可: ライブラリ名」となっているライブラリのことです。
もしあったら、チェックを外してください。
エラーが出ていたDate関数とは関係のないライブラリですが、多くの場合、これでコンパイルエラーはなくなります。
ライブラリが参照不可になる理由は、マクロを開発した環境で参照設定されたライブラリが、実行する環境には存在しない、あるいはパスが異なる、といったことが主な原因です。
OSやExcelのバージョンが異なると、VBAが参照するライブラリのパスも変わります。
そのほとんどは、自動的にその環境に合わせて読み変えられますが、一部のライブラリは元のパスのままになっているため、参照不可になります。
ここで例に挙げたRefEdit(Ref Edit Control)ライブラリは、RefEditコントロールをユーザーフォームに貼り付けると自動的に参照設定されます。
フォームデザイン時に、コントロールをうっかりクリックして貼りつけただけで設定されてしまい、その後コントロールやフォームモジュールごと削除したとしても参照設定が残ってしまうので、注意が必要です。
ライブラリに関するトラブルは、開発環境と実行環境が異なる場合に起こりがちです。
参照設定をよく確認しておきましょう。
Excel 2003以降、機能拡張によりRefEditライブラリが新しくなりました。
拡張した機能に下位互換性がないので、予期せぬエラーを起こさないために、Excel 2002以前の下位バージョンのライブラリしかない環境では「参照不可」となる仕様になっています。
また、マルチインストールの場合、最後にインストールしたライブラリが参照設定として保存されるので、注意が必要です。
(※正確にはExcel 2003 のSP2以前のバージョンと、Excel2003 SP3以降とで異なります)