Accessテクニックのホームへ戻る

■ フォームの行を上下の矢印キーで移動する (2000,2002,2003,2007)

 

フォームの行を上下の矢印キーで移動する

 

フォームに表示されている商品テーブルの行を上下の矢印キーで移動します。フォームが表示されたら、マウスで特定のセルをクリックします。キーボードから上下の矢印キーを押すと行を移動することができます。左右のセルに移動するときは、左右の矢印キーを使用します。このサンプルは、Excelのワークシートを編集する感覚でフォームのセルを編集することができます。

 

1. 新規データベース作成

Accessを起動したら、ツールバーから新規作成のアイコンをクリックして、作業フォルダworkW105.mdbを作成します。

 

2. テーブルとクエリをインポート

Windowsのエクスプローラから、105.mdb(このページの最後からダウンロードできます)をダブルクリックして開きます。データベースウィンドウのオブジェクトから[テーブル]をクリックしたら、商品テーブル(tblProducts)をドラッグしてW105.mdbのデータベースウィンドウにドロップします。同様の手順で、オブジェクトから[クエリ]をクリックしたら、商品クエリ(qryProducts)をドラッグ&ドロップします。テーブルとクエリをインポートしたら、105.mdbを閉じます。

 

3. 新規フォーム作成

データベースウィンドウのオブジェクトから[フォーム]を選択したら、[新規作成]ボタンをクリックします。「新しいフォーム」のダイアログが表示されたらリストボックスから[オートフォーム:表形式]を選択します。基になるテーブルまたはクエリの選択から[qryProducts]を選択します。[OK]ボタンをクリックしてダイアログを閉じます。

 

フォームが自動生成されたら、ツールバーからデザインビューのアイコンをクリックします。デザインビューに切り替わったら、フォームの未使用領域をダブルクリックしてフォームのプロパティウィンドウを表示します。プロパティウィンドウからキーボードイベント取得に「はい」を設定します。

 

自動生成されたフォームをデザインビューに切り替える

 

5. フォームのOnKeyDownイベント登録

ツールバーからコードのアイコンをクリックしてVBE(Visual Basic Editor)を表示します。コードビューが表示されたら、オブジェクトのドロップダウンリストから[Form]を選択します。プロシージャのドロップダウンリストからは、[KeyDown]を選択します。フォームのOnKeyDownイベントが生成されたら、次のコードを追加します。

 

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

  On Error GoTo HandleError

  Select Case KeyCode

    Case vbKeyDown

      DoCmd.GoToRecord Record:=acNext

    Case vbKeyUp

      DoCmd.GoToRecord Record:=acPrevious

    Case Else

  End Select

 

ExitHere:

  Exit Sub

 

HandleError:

  If Err.Number = 2105 Then

    Err.Clear

    KeyCode = 0

  Else

    Debug.Assert False

  End If

  Resume ExitHere

End Sub

 

6. フォームを開く

VBEのツールバーから表示(Access)のアイコンをクリックして、Accessのウィンドウに切り替えます。Accessのツールバーからフォームビューのアイコンをクリックしてフォームを開きます。フォームが表示されたら、マウスで任意のセルをクリックしてキーボードから上下の矢印キーを押して行を移動してみてください。

 

フォームの行を矢印キーで移動する

 

 

●解説

 

キーボードから上下の矢印キーを押して帳票フォームの行を移動するには、フォームのキークリック時/OnKeyDownイベントを使用します。なお、OnKeyDownイベントで矢印キーのコードを取得するには、フォームのキーボードイベント取得に「はい」を設定します。

 

キーボードから[]キーを押したときは、DoCmdオブジェクトのGoToRecordメソッドにacNextを指定して下の行にカーソルを移動します。[]キーを押したときは、DoCmdGoToRecordメソッドacPreviousを指定して上の行にカーソルを移動します。

 

カレントレコードが商品テーブルの先頭/最終レコードのとき、[][]キーを押すと2105のエラーになりますので、On Error GoToステートメントでエラーを拾います。エラー番号が2105のときは、エラーをクリヤーして処理を続行します。エラー番号が2105以外のときは、Debug.Assertステートメントでデバッグモードに切り替えます。

 

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

  On Error GoTo HandleError ‘ エラー処理を指定してエラーを拾う

  Select Case KeyCode

    Case vbKeyDown

      DoCmd.GoToRecord Record:=acNext ‘ ↓キーのとき次の行に移動する

    Case vbKeyUp

      DoCmd.GoToRecord Record:=acPrevious ‘ ↑キーのとき前の行に移動する

    Case Else

  End Select

 

ExitHere:

  Exit Sub

 

HandleError:

  If Err.Number = 2105 Then ‘ カレントが先頭/最終レコードのときのエラー

    Err.Clear ‘ エラーをクリヤーする

    KeyCode = 0 ‘ 矢印キーを無効とする

  Else

    Debug.Assert False ‘ 2105以外のときデバッグモードに切り替える

  End If

  Resume ExitHere

End Sub

 

ダウンロード (105.lzh)