2023年11月29日水曜日

VBA の参照設定で「参照不可」があるために、コンパイルエラーになる

 Excel や Access のVBA で参照設定をしたけど、端末によってはその参照先がインストールされていないことがある。

私の場合は、Acrobat。

同じExcel のファイルを複数の端末で利用することになるが、Acrobat がインストールされている端末とReader しかインストールされていない端末がある。

Acrobat があれば、やりたいことはVBA からPDFファイルのページを指定して自動印刷。

Acrobat がなければ、対象ページをリストアップして、手動で印刷。

ところが、Acrobat のない端末でこのExcelファイルを起動して、VBA を実行すると、なんでもないところで、「コンパイルエラー」となって走らない。

単に変数に文字列を代入するだけでも走らない。

Acrobat のある端末で実行すれば、何事もなく実行される。

いろいろ試行錯誤したところ、すべての変数を宣言すれば、Acrobat の無い端末でも実行できた。

まるで、「Option Explicit」を設定しているような感じ。

普段はVBA 標準である「Option Explicit」は設定しないで書いているけど、これを宣言したのと同じように変数の宣言をしたらOK!

これからは、「Option Explicit」を宣言して、参照設定に関係なくても変数は宣言するようにした方がいいかなと思い直した。

因みに、どんな参照設定がされているかは、
「ThisWorkbook.VBProject.References」で参照設定一覧が取得できる。

「参照不可」はもともと異常な状態なので、「不可」の名前などを取得することはできないけど、当たるとエラーが発生するので、エラー処理で逃げることができる。

参照設定自体をON OFF できれば一番いいけど、端末によって元ネタのPathなども違うので、ちょっと無理なので、あれば自動印刷、なければ手動印刷で処理を分けて対応。