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なども違うので、ちょっと無理なので、あれば自動印刷、なければ手動印刷で処理を分けて対応。


2023年4月18日火曜日

Panasonic カーナビ ストラーダ CN-F1X10BHD はパーキングブレーキセンサーを設定するだけで走行中でもテレビが映ることを確認

 パナソニックのカーナビ ストラーダ CN-F1X10BHD をヴェルファイアに取り付けました。

元は新車購入時にディーラーで取り付けてもらったアルパインの VIE-X009 からの載せ替えです。

作業内容などは、別に書くとして、大失敗というか、勘違いを書いておきます。

事前にネットで色々情報集めをしていたら、なぜか、パナソニック製のナビは、自主規制で走行中にテレビが映らないし、目標物検索などもできないと思い込んでました。

対策として、当然パーキングブレーキをアースに落とすことはわかっていたけど、それだけではダメで、車速センサーもカットしないと映らないと思い込んでしまった。

実際にヴェルファイアにナビを大まかに接続した状態で走行テストをしたら、テレビも映らないし、目標物検索などもできなかったんです。
当然、停止するとすべての操作ができます。

なので、車速センサーをカットするスイッチを自作することにしました。
ただ単にスイッチでカットするだけだと、復帰(車速センサーを接続する)させるのを忘れそうで、そうなると、自車位置は狂い続けるので、遅延スイッチを作って、カットして一定時間が経過したら、自動的に再接続する仕掛けを考えました。

遅延スイッチの動作確認をするために、再度、走行テストをしようとナビの結線を確認したら、なんと、パーキングブレーキケーブルがアースされていないことが判明。
車種別ハーネスに依存しきったために、アース接続をすっかり忘れてたんですね。
(この辺りのハーネスの説明は別途書くつもりです。)

結果的に、パーキングブレーキをアース処理するだけで、車速センサーは何も細工せずに普通に接続したままで、走行中でも全く問題無くテレビも映るし、その他全ての機能を利用できることが確認できました。

これで、助手席の人は走行中でもテレビを見ることができます。

車速センサーの処理が必要なのは、メーカーオプションの場合だけなのかな?
このメーカーオプションがどうなっているのかは確認していません。