2023/08/16

ノーツで QR コード:#11)エラーの対応と次の課題

前回発生したエラーの調査を再開します。

エラーとして表示しているメッセージボックスは、ライブラリに2か所存在しますが、関数の呼び出し関係から、次の行で表示していることがわかります。

このメッセージが表示されるには前段の If 文を確認する必要があります。

そこで、メッセージボックスを次のように修正して、If 文が False となった原因を確認しやすく調整します。

MsgBox "Integer()" & Chr(13) & TypeName(pa), 16, "Unknown type"

実行すると、以下のように表示されました。原因がよくわかりますね。


LotusScript の TypeName は、

  • 型名は大文字で返す
  • カッコの中にスペースが入る

となるようです。Excel VBA とこんな違いがあるんですね。驚きました...

判定式を変更してこれに対応します。

ElseIf InStr(UCase("Integer( ),Byte( ),Long( ),Variant( )"), UCase(TypeName(pa))) > 0 Then


ライブラリ内を "TypeName" で検索すると、qr_mask 関数の中にも同様のコードが見つかりますので、こちらも修正します。こういった移植作業では、問題を発見した時点で、すぐに検索をかけ、すべての箇所を修正するようにしましょう。時間がたつと、修正したつもりになってしまい、発見しづらくなります。


検証の再開

改めてテストします。デバッガを使ってメインルーチンを抜けたところで実行を停止させて、戻り値 sBC を確認します。

デバッガの変数のタブには、各変数の値が一覧表示されます。確認したい変数をクリックすると、新規の値欄にその変数の値が表示され、ここから値が取得できます。

ところで、この欄の右側にスクロールバーのようなアイコンが表示されています。複数行の値の場合、このような表示になるようです。こんな機能は知りませんでしたが、ここまで対応するならフィールドの高さを可変にしてほしくなりますね(笑)

Ctrl + A で全体を選択し、メモ帳にコピーします。すると次のような値が取得できました。ダブルクォーテーションが最初と最後にあるので、この関数の戻り値は、改行で区切られた文字列を返すようですね。

"hddfoaphehddf
fpffoapnafpff
fdbfoancefdbf
dddbjbnfbdddb
ddbdlafcgckoa
klojpapmjpdna
fgnbganiadgdf
fhjlpfpbjhine
bdcbgahlhdngb
hddflenpfbnhe
fpffnahahhbje
fdbfpijoemhef
dddbbdcabbcdb
"


戻り値の謎

メインルーチンの EncodeBarcode から戻りが取得できるようになりました。ただ、この戻り値が、QR コードか、それに近しいものと想定していたのですが、少し違うようです。

関数名の通り文字列をエンコードしているだけで、QR コード化する処理は別に存在するということになります。次回は、この値と QR コードの関係を謎解きます。

前回 ノーツで QR コード 次回

0 件のコメント:

コメントを投稿