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

図 フォームの行を上下の矢印キーで移動する
フォームに表示されている商品テーブルの行を上下の矢印キーで移動します。フォームが表示されたら、マウスで特定のセルをクリックします。キーボードから上下の矢印キーを押すと行を移動することができます。左右のセルに移動するときは、左右の矢印キーを使用します。このサンプルは、Excelのワークシートを編集する感覚でフォームのセルを編集することができます。
1. 新規データベース作成
Accessを起動したら、ツールバーから新規作成のアイコン
をクリックして、作業フォルダworkにW105.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を指定して下の行にカーソルを移動します。[↑]キーを押したときは、DoCmdのGoToRecordメソッドに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