前回発生したエラーの調査を再開します。
エラーとして表示しているメッセージボックスは、ライブラリに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 件のコメント:
コメントを投稿