見出し画像

VBAでBarCode_読込3

シリーズ最終回までご覧いただき、ありがとうございます。
今回は、バーコードを読込むだけで、処理が動く仕掛けを作ります。

VBAでBarCode_読込2」では、依頼書の内容をExcelさんに伝えるところまでは、なんとか完成しました。
ところが、バーコードリーダで読み込むか、数値を入力して「マクロの実行」をしなければ、Excelさんは動いてくれません。
せっかくバーコードリーダーが超高速で数値を読み込んでくれるにも関わらず、いちいち人間の手で「マクロの実行(起動)」を掛けるのは、もどかしいものです。
そこで、原点に戻り「バーコードリーダーの動き」を思い出してみましょう。「コード化された13桁の数値に改行記号を付けて書き出す」でした。13桁の数値は前回で処理できたので、今回は「改行記号」に着目します。実は、この「改行記号」をマクロ起動に活用する方法があるので、そのことについて説明します。
通常マクロ(VBA)は起動するための「実行ボタン」や「ショートカットキー」を介して処理が開始されます。
ところが「任意のキーでマクロを起動する機能」も備えています。そこで、「改行記号(Enterキー)」を任意のキーとして、前回作ったマクロ「出退処理」を動かすProcedure(VBA)を作ります。
これで、人間の手を介さずに読み込んで直ぐ処理が実行されるようになるので、大変便利になるでしょうが「諸刃の剣」の危険性をはらんでいるので、慎重に進めてください。
概要を説明しますと「今からEnterキーが押されたら、マクロ「○○」を実行しなさい」と宣言し、「これで宣言を終了します」と撤回するまで持続します。なので「撤回」を失念すると「Enterキー」の動きが通常と異なり、PCが暴走しているかのような症状に陥るので注意が必要です。

それでは、具体的に説明しましょう。
Application.OnKey "{Enter}", "出退処理" 
とすると、Enterキーが押されたときはマクロ「出退処理」を実行しなさい。の宣言となります。
ただし、これはパソコンに「10(テン)キー」が有るか否かによって作動しない場合があります。
そのときは
Application.OnKey "~", "出退処理"
も付け加えた方が無難です。
そして、宣言撤回(解除)は
Application.OnKey "{Enter}" 
Application.OnKey "~"
となります。
コーディングする前にザックリ考えてみると、宣言と解除を別々に書くより「宣言状態」か「通常状態」かを判断して、自動的にMode切換できれば便利に使えそうです。
そのModeを識別するために「色」の情報を使うことにします。読み込むセル9行目E列が「黒のとき」を通常状態として「その他の色のとき」を宣言状態とすることにします。
「色」を扱うためにはCells(行,列).Interior.Color(セルの色)やCells(行,列).Font.Color(文字の色)等があります。
そして、「色」にはそれぞれColorCodeが決まっていて(詳細はまた別の回で)黒は0です。
つまりCells(行,列).Interior.Color=0のとき、とすれば「セルの色が黒」のときとなります。
もうひとつは、入力文字の「全角」が厄介です。半角文字だとスムーズに処理されるのですが、全角文字が入ってしまうと、数字であっても「かな漢字変換」のために処理が一旦止まります。そこで、9行目E列には「半角しか入らない」ような仕掛けも入れておきましょう。

ここまでをコーディングすると

Sub Mode_CHG()

    ActiveSheet.Unprotect  'Sheet保護の解除

    With Range("E9:F9").Validation       'With ~ End With:半角Mode
        .Delete
        .Add Type:=xlValidateInputOnly
        .IMEMode = xlIMEModeAlpha
    End With

    If Cells(9, "E").Interior.Color = 0 Then      'セルの色が黒(通常状態)のとき

       Application.OnKey "{Enter}", "出退処理"    '10KeyのEnterでSub 出退処理を起動
       Application.OnKey "~", "出退処理"          '文字KeyのEnterでSub 出退処理を起動
       Cells(9, "E").Interior.Color = 15398652    'セルの色を変更

    Else                                          'セルの色が黒以外(宣言状態)のとき

       Application.OnKey "{Enter}"       'VBA起動解除(10Key_Enter)
       Application.OnKey "~"             'VBA起動解除(文字Key_Enter)
       Cells(9, "E").Interior.Color = 0  'セルの色を変更(黒)

    End If

    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True  'Sheet保護

End Sub

最後に、実行ボタンを作ってProcedure「Mode_CHG」と関連づけておくと「読込みモード」にしてバーコードを読込み、全件終了した時点で通常モードに戻すなどの操作がスムーズに行えます。
なお、実行ボタンを作る際は、手処理により「シートの保護を解除」してください。

9行E列が黒のとき通常モード
9行E列が黒以外のとき読込モード

今回のBarCodeシリーズをとおして、システムづくりの過程(概要)についてご理解いただけたら有難いです。
ゴールに到達するためには、乗り越えなければならない幾つもの壁もあり、私たちユーザーとExcelとの間でコミュニケーションをとることは、決して容易なことはありませんが、20年近く付き合ってきた今では「Excelが頼もしい助っ人になっている」ことを実感しています。

今回も最後までご覧いただき、ありがとうございました。


この記事が気に入ったらサポートをしてみませんか?