プロが教えるわが家の防犯対策術!

帳票形式のフィールド入力の時、TABオーダーで同一列の下のフィールドに移動したい

使用環境:ACCESS2003

↓のように帳票形式で表示しているテーブル


商品ID    納入日    仕入NO   管理コード
13    20091205      2569
14    20100326      6824
15    20100422      2548
16    20100430      3654

バーコードリーダーで管理コードを
順次入力したいのですが

理想はバーコードリーダー入力が終われば次の管理コードフィールドに
カーソルが移動してくれるのいいのですが、

それが出来ない場合は、バーコードリーダーで値を入力した後、
TABキーやEnterを押すと
次の管理コードフィールドにカーソールが移動するように出来れば
大変嬉しいのですが、


どなたかよきアドバイスをいただけますようお願い申し上げます。

A 回答 (2件)

> ↓のように帳票形式で表示しているテーブル



フォームの帳票形式を使用して、テーブルのデータを表示
されている、ということでよろしいでしょうか。

そうであれば、

> TABキーやEnterを押すと次の管理コードフィールドに
> カーソールが移動する

については、フォームの(コントロールの)設定で対応可能です。
(なお、バーコードリーダーは使用したことがないため、No.1の方と
 同様、バーコードの読み込みを拾う方法はわかりません(汗))

1)フォームをデザインビューで開く
2)適当なところをダブルクリックするなどして、プロパティシートを
 開いておく
3)EnterキーやTabキーで移動したくないコントロール(テキスト
 ボックス)を選択
4)プロパティシートの『その他』タブを選択し、『タブストップ』の
 項目を「いいえ」に設定
5)「3~4」の操作を必要なだけ繰り返したら、フォームを保存
 して閉じる

・・・以上で、最初の入力時に『管理コード』に移動しておけば、
後はEnter/Tabで次のレコードの管理コードにカーソルが移動
するようになります。
(なお、Shift+Tabの同時押しで前のレコードの管理コードに、
また、F6キーでヘッダ・フッタのコントロールに、それぞれ移動
できます(→移動可能なコントロールがある場合)。)

なお、「3~4」を繰り返し、と書きましたが、デザインビューで
何もコントロールがないところをクリック&ドラッグしたときに表示
される四角形で複数のコントロールを囲むと、囲んだコントロール
が一括で選択されます。
また、複数のコントロールを選択する別の方法として、Shiftキー
を押したまま、対象コントロールを順次クリックしていく、という
方法もあります(間違えて選択した場合は、Shiftキーを押した
まま再度クリックすれば解除が可能)。
この状態にしてやれば、「4」の操作は複数コントロールで一括
で指定できますので、参考まで。
(但し、種類の異なるコントロールを同時選択すると、必要な
 項目がプロパティシートに表示されなくなる場合があります
 ので、ご注意下さい:
 今回の例では、ラベルなど、タブ移動の対象外のコントロール
 が同時に選択されてしまうと、『その他』タブに『タブストップ』の
 項目が表示されなくなってしまいます)

※バーコード読み込み時は『管理コード』のみの移動にしたいが、
 通常の入力時は商品IDなども移動可能でないと困る、という
 場合は、マクロ/VBAを使用して設定を切り替えてやることに
 なります。
 (例えばフォーム フッタにオプショングループを設置し、その更新
  後イベントで、商品ID等の「TabStop」プロパティをTrue/False
  に切替、と)
    • good
    • 0

Enterキー、Tabキーで移動する方法になりますが、以下でどうなりますか。


管理コードのキークリック時イベントを使います。

Private Sub 管理コード_KeyDown(KeyCode As Integer, Shift As Integer)
  If ((Shift = 0) And (Not Me.NewRecord)) Then
    Select Case KeyCode
      Case vbKeyReturn, vbKeyTab
        KeyCode = 0
        With Me.Recordset
          If ((.AbsolutePosition + 1) < .RecordCount) Then
            .MoveNext
            Me.管理コード.SetFocus
          End If
        End With
    End Select
  End If
End Sub



    If ((.AbsolutePosition + 1) < .RecordCount) Then
      .MoveNext
      Me.管理コード.SetFocus
    End If

では、最終行にある時には移動しません。
新規登録行があって、その行に移動して良いのなら、

    If ((.AbsolutePosition + 1) < .RecordCount) Then
      .MoveNext
    Else
      .AddNew
    End If
    Me.管理コード.SetFocus

になると思います・・・



バーコードの入力をどのイベントで拾えるのか、チョットわからないので、
変更時イベントで一気にとれるのなら、
Len(Me.管理コード.Text) > 0 とかの判別で、上記 With 部分を実行しても???


レコードが登録されるタイミングは、.MoveNext ( .AddNew )の箇所になるので、
入力チェック等でエラーがある場合には、エラーが発生すると思いますので、
いろいろ対策をとってみてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!