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 からの載せ替えです。

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

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

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

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

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

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

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

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

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


2022年10月29日土曜日

Raspberrypi での MagicMirror

 CTRL + q で一時停止し、

Xwindow が開くので、

LXTerminal を起動して、

pm2 stop 0 を打つ

sudo apt update

sudo apt full-upgrade -y

sudo  apt autoremove -y

pm2 start 0

sudo reboot now

2021年11月15日月曜日

Xperia XZ1 に Y!mobile の SIM を入れるとテザリングが出来ない。

 Xperia XZ1 に Y!mobile の SIM を入れるとテザリングが出来ない。

au で買った XZ1 SOV36 です。
まあ基本的にSOFTBANK 系ではBAND が違うのでダメなんでしょうけど。

XZ1側では「テザリング中のエラーが発生しました。」と表示され、
受け側の端末では、「接続先にインターネット接続がありません。」と表示される。

XZ1 側の APN 設定で、
「APNタイプ」を「default,supl,dun」とすれば解消しました。

「設定」→「ネットワークとインターネット」→「モバイルネットワーク」→「詳細設定」→「アクセスポイント名」→「Y!mobile APN」をタップ。

下の方へ送ると、

「APNタイプ」があるので、タップすると入力できるようになる。

私の場合は、デフォルトで「default, mms, supl, hipri」となっていましたが、これではダメで、

「default,supl,dun」が正解。


もちろんSIMロックは解除済みが前提です。

2021年6月12日土曜日

Raspberry PI3 の X window が「パスワード待ち」になって、パスワードを受け付けない。

 Raspberry PI3 をデジタルサイネージ風に使っていて、
MP4ビデオを数本入れて、自動再生していました。

その方法は、
omxplayer という動画プレイヤーを使って、
/home/pi/.config/lxsession/LXDE-pi/autostart
にスクリプトを入れて、複数の動画を連続再生しています。

参考にさせていただいたのは、
http://www.cenolan.com/2013/03/looping-video-playlist-omxplayer-raspberry-pi/

毎日順調に再生されていたのですが、
同じコンテンツだと飽きてくるので、今回違う動画ファイルを入れようと思って、
電源を切ったときに、ミスったようです。

実は、上記の設定だと、必ず自動再生されてしまうので、
メンテや動画ファイルの交換には必ず、ほかの端末からSSHなどでコンソールに入るしか方法が無くなりますが、そうなると、ネットワーク環境が必要になります。

今回は、全くネットワークを使わない設定にしたかったので、
USBポートに特定のデバイスをつないだ時だけ、自動再生されない設定にしていました。

USBポートに「DELL のキーボードを検出したとき」という設定です。

普段は、ネットワークもなし、キーボードもマウスもなし。
全くラズパイ本体だけをモニターに繋いでて、
メンテナンスの際にDELL製のキーボードをつなぐと自動再生されない。

で、キーボードを繋いで、コンソールを出して、
「autostart」のファイル名を一時的に変更して、再起動させると、X-Windowが起動する。

ここで、再起動の際に、なぜか X-Window は起動するけど、「pi」のユーザーで、ログインパスワード待ちのウインドウが開いて、正規のパスワードを入れても、ログインできない状態になってしましった。

普通は自動ログイン設定なので、パスワード待ちなんてありえないのに。

試しにわざと間違ったパスワードを入れてみると、「パスワードが間違ってる。」というメッセージがでるので、入れたパスワード自体は正しい。

でも、X は触れない。デスクトップ背景の画像も表示されているのに。

これにはかなりはまった。

とりあえず、CTRL+ALT+F1 でコンソールを出して、raspi-config でCUI ログインに変更したら、CUI ログインはできたけど、日本語が通らない。

この状態で、startx でX-Window を起動したら、TimeOut とか言いやがって、起動しない。

と思っていたら、一旦タイムアウトしてるのでのに、何かのキーを触ったらX が起動した!

ログインもできている。

でも、根本的な原因は解消されていなくて、自動起動させたら、ログインパスワード待ちのまま。

色々ネットを彷徨ったら、
https://www.raspberrypi.org/forums/viewtopic.php?t=180859
このページに助けていただいた。

「`~/.Xauthority` の権限をlsコマンドなどで確認してもし`pi`以外のものだったら`pi`にしてログインし直しして直らないか.」

ちょうど偶然 X が起動している状態になったので、ファイルマネージャーで権限を確認したら、「root」になっている。なんでじゃ?

これを、
「sudo chown pi.pi ~pi/.Xauthority」
で「pi」に変更したら、正常に戻った。

助かりました。

2021年3月12日金曜日

Windows7 の XP Mode で USB接続ができないことへの対応

今どき XP Modeの話題とは...。

今まで使っていた、 Windows7機がとうとうお亡くなりなったので、新しい(と言っても古いけど)パソコンを用意しました。

どうしても Windows XP時代のアプリケーションを動かす必要があったので、今回もWindows7を母艦にして、XP Modeを入れました。

動かしたいアプリケーションとは、テプラ PRO SR610X のPC接続です。
このテプラも相当な年代物ですが、USBケーブルでパソコンと接続できて、フォントなどもWindows上のものを自由に使えたり、連番を振ったりと、結構なパフォーマンスを発揮してくれますので、手放せないんです。

壊れた方のパソコンは Windows7に XP Modeを入れて、順調にテプラが使えていました。

なので、今回新しく用意したパソコンも問題なく動くと思って、XP Mode上にテプラのドライバーとアプリケーションを入れたところ、USBが認識しない。

仮想マシンの上部には、「USB」の項目があり、そこには、「SR610X」という選択項目が表示されているのに、選択すると、
USBデバイスを接続できませんでした。USBデバイスを別のポートに接続するか、仮想マシンを再起動してやり直してください。」というメッセージがでます。

新旧のマシンで何が違う?

旧マシンには、USB3.0が装備されていないが、
新マシンには、USB3.0が装備されている。

ケーブルはUSB2.1のポートに接続しているのでそんなこと関係ない。

と思ったけど、念のために、BIOSで、USB3.0を無効にしてみた。
BIOSの説明によると、これを無効にすると、3.0の青色ポートも2.1として動作することになるそうです。

これで、接続したら、なんと、接続成功!

テプラが順調に動き出しました。

XP ModeではUSB3.0モードは使えないことが判明しました。

この経験をもとに、もうちょっとググってみたら、当然既にこの答えにたどり着いている方がおられて、その方の情報によると、BIOSで3.0を無効ししてしまうと、当然母艦でも3.0が使えなくなってもったいないので、PCIソケットにUSB2.1増設ボードを挿して、その増設ポートからなら、仮想マシン側が認識するとのことでした。
ちょっと投資したら、母艦側では2.1も3.0も使えるようです。


2019年8月29日木曜日

VBscript で DOSコマンドの CertUtil を使って Base64 のデコードでバグ

VBscript を使って、Base64 のデコードをする必要があり、

objWSH.Run "cmd /c CertUtil -Decode A.txt B.jpg"

みたいなスクリプト書いたところ、
何度やっても失敗する。
デコードできないどころか、
このVBSファイル自体が消えてしまう。(自分自身が削除されるってあり得る?)

最初は、前後のファイル名の渡し方が間違ってて、
特にロングファイルネームなので、ダブルコーテーションの数とかが間違ってるのかと思って、さんざん試行錯誤を繰り返したけど、絶対失敗する。

Help を引いても、
-------------------------------------------------------------------------------
使用法:
  CertUtil [オプション] -decode 入力ファイル 出力ファイル
  Base 64 エンコード ファイルをデコードします

オプション:
  -f                -- 強制的に上書きします
  -Unicode          -- リダイレクトされた出力を Unicode として書き込む
  -gmt              -- 時刻を GMT で表示します
  -seconds          -- 時間を秒とミリ秒で表示します
  -v                -- メッセージを詳細に表示します
  -privatekey       -- パスワードと秘密キーのデータを表示します
  -pin PIN                  -- スマート カードの PIN
  -sid WELL_KNOWN_SID_TYPE  -- 数値 SID
            22 -- ローカル システム
            23 -- ローカル サービス
            24 -- ネットワーク サービス

CertUtil -?              -- 動詞の一覧 (コマンドの一覧) を表示します
CertUtil -decode -?      -- "decode" 動詞のヘルプ テキストを表示します
CertUtil -v -?           -- すべての動詞のヘルプ テキストをすべて表示します
-------------------------------------------------------------------------------
間違っていない。

試しに、以下のようなバッチファイルを実行したら、ちゃんとデコードされた。
CertUtil -Decode A.txt B.jpg

VBscript で実行したときだけ失敗し、ファイルが消失する。

余計にわからなくなって、半日が経過。

なんとなく、
objWSH.Run "cmd /c CertUtil -Decode A.txt B.jpg"
このスイッチの
「-」を
「/」に置き換えて、
objWSH.Run "cmd /c CertUtil /Decode A.txt B.jpg"
としたら、あっさり成功。
もちろん自分自身も消失せず。

俺の半日を返せ~。