バーコードリーダーについて

初心者のよくある質問。全般的な質問。

質問

VBAなどでアプリケーションソフトを設計する場合のソースコード(サンプル)はありますか

回答

ソースコードは提供しておりません。理由は特別なソースコードやAPIが不要なためです。以下、アプリケーションの動作とバーコードリーダーからのデータ入力とアプリケーションの動作についての参考を示します。

バーコードリーダーが出力するデータ

USBキーボードインターフェースとPS/2キーボードインターフェースのバーコードリーダーは接続したコンピュータのBIOSおよびOSからはキーボードデバイスとして認識されます。バーコードリーダーが出力するデータはキーボードのキーボード入力データをエミュレーションしたものです。

プリフィックスとサフィックスについて

バーコードリーダーは、バーコードデータ以外に、バーコードデータの前後にASCIIの文字キャラクタやキーボードのファンクションキー(EnterTab)を自動的に付加して先頭から順番に出力することができます。 バーコードデータの前に付加する文字キャラクタやファンクションキーをプリフィックス(Prefix)、後に付加する文字キャラクタやファンクションキーをサフィックス(Suffix)と呼びます。

プリフィックスやサフィックスの設定方法

説明書のバーコードメニューを使用してプリフィックスとサフィックスの文字キャラクタやファンクションキーを設定します。

入力したデータからプログラムを実行するには

入力したデータからプログラム(イベント、アクション、マクロ)を実行するにはバーコードリーダーが出力するプリフィックスやサフィックスに設定されたバーコードデータ以外のキャラクタであるファンクションキー(EnterTabなど)の押下を利用します。

出力フォーマット

バーコードデータおよびプリフィックス、サフィックスの出力フォーマット、設定可能なキャラクタ、データ数(桁数)はバーコードリーダーの機種によって異なります。次にCCDタッチバーコードリーダーAC-700Uの例を示します。

AC-700Uの例

見方:左が出力(入力)の先頭データ

プリフィックス バーコードデータ サフィックス 後置文字(ポスタンブル)
説明 バーコードリーダーの機能設定によって付加するキャラクタ

初期設定では無し
読み取ったバーコードのキャラクタ バーコードリーダーの機能設定によって付加するキャラクタ

初期設定では無し
バーコードリーダーの機能設定によって付加するキャラクタ

初期設定ではENTERが設定
設定内容 キーボードで入力可能なキー
文字キャラクタ
ファンクションキー
  キーボードで入力可能なキー
文字キャラクタ
ファンクションキー
ENTER
TAB
など
実例 AB(文字など) 4912345678904 "Ctrl+" "S" ENTER

備考:AC-700はプリフィックスとサフィックス以外にプリアンブル(前置文字)とポスタンブル(後置文字)という設定があります。

Accessでバーコード入力設計の例

操作する内容

フォームのテキストボックスにバーコードのデータを入力し、マクロ(アクション)を実行する。本文は参考として紹介するものです。 詳しくは市販のの解説書などをご覧下さい。

方法

"AutoKeysマクロ"で特定のキーを押下したときにアクションを実行するように設計します。"AutoKeysマクロ"はAccessがサポートする特別なマクロです。マクログループ名を"AutoKeys"として作成し、"マクロ名"にショートカットキーを指定します。(参考:Accessではキーボードの"Ctrl"を"^"(アクサンシルコンフレックス)で表します"Ctrl+S"を指定する場合は"^S"と指定します)。アクションと引数を指定するとショートカットを押下したときにマクロが実行されます。

Accessのフォームでの例。テキストボックスにバーコードのデータ(文字キャラクタ)を入力した後、"Ctrl+S"を押下するとアクションが実行されるようにマクロを設計した場合。

ユーザーの操作手順 手入力(キーボードとマウス) バーコードリーダを使用した入力
1 テキストボックスにカーソルを合わせる テキストボックスにカーソルを合わせる
2 バーコードのの数値・文字キーを
キーボードのキーを押下して手入力
バーコードリーダーでバーコードを読み取り

データが先頭から入力されます。
3 キー操作でショートカットキーを押下。
またはマウスでツールバーのメニュー選択、クリック。
バーコードリーダーが"Ctrl+S"を自動的に入力

[条件]
バーコードリーダーの「サフィックス」に"Crtrl+S"を設定していた場合
4 マクロが実行される マクロが実行される

注意

VBAでのイベント発生のためのキーイベントの記述は推奨されません。

KeyDown/KeyPress/KeyUp

理由

バーコードリーダーが出力するデータは、1キャラクタごとにキーを押下しているためです。例えば、10桁のバーコードを入力したとき、1桁ごとにキーイベントが発生してしまいます。

VisualBasicでの例

方法

フォーム上でフォーカスを取得したテキスト入力可能なコントロールに仮想キー(ENTERやTABなど)の押下によるイベント発生のコードを記述します。多くの場合ではキーを押下した後にキーを離すコードも記述します。

本文は参考として紹介するものです。 詳しくは市販のの解説書などをご覧下さい。

//"ENTER"を押下する
keybd_event(VK_RETURN, 0, 0, 0);

//"ENTER"を離す
keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);

注意

OSやアプリケーションを実装するマシン(コンピュータ)によってイベントが無効になったりタイミングの遅れが発生することがあります。コンピュータの処理遅延によってイベント実行が失敗した場合、Sleep関数でプログラムを一時停止(ミリ秒単位)させると正常に実行されることがあります。

Sleep(50);