Accessフォームで特定行をスキップしてカーソルを移動させる方法

データベース

Microsoft Accessで帳票フォームを作成する際、特定の行をスキップしてカーソルを移動させたいというケースがあります。特に、ある条件を満たすレコードに対して、ユーザーが操作できないようにしたい場合に有効な方法です。この記事では、フォーム上で指定したレコード(この場合、コード1120および1150の行)をスキップして、他のレコードへカーソルを移動させる方法について解説します。

1. 特定のレコードをスキップする基本的なアプローチ

フォームの動作を制御するために、Visual Basic for Applications(VBA)を使用することが一般的です。VBAを使って、特定の行にフォーカスを当てないようにすることが可能です。これにより、指定されたレコード(コード1120および1150)をスルーして、他のレコードにカーソルを移動させることができます。

2. VBAを使ったフォーカスの制御

VBAコードを利用して、フォーム上の各レコードに対するフォーカスを制御する方法を紹介します。下記のコードは、フォームの「Dirty」イベントを使って、特定のレコード(この場合、コード1120と1150)の入力を防ぎ、スキップするための例です。

Private Sub Form_Dirty(Cancel As Integer) 
'勘定科目の変更禁止 
If Me!勘定科目NO = "1120" Or Me!勘定科目NO = "1150" Then 
Cancel = True 
End If 
End Sub

このコードでは、勘定科目NOが1120または1150であれば、フォームが変更された際にその変更をキャンセルします。これにより、ユーザーがこれらのレコードを選択しても操作できなくなります。

3. フォームでの次のレコードへの移動

次に、フォームの中で特定のレコードをスキップして、ユーザーが他のレコードにフォーカスを移動できるようにする方法を紹介します。VBAを使って、入力後に自動的にカーソルを別のレコードに移動させることが可能です。

Private Sub 勘定科目NO_AfterUpdate()
If Me!勘定科目NO = "1120" Or Me!勘定科目NO = "1150" Then
   DoCmd.GoToRecord , , acNext
End If
End Sub

このコードは、「勘定科目NO」フィールドの値が1120または1150に更新されたときに、次のレコードにカーソルを移動させるものです。

4. 複数の条件に対応する方法

さらに、複数の条件を組み合わせて、特定のレコードをスキップする方法も可能です。例えば、レコードの種類や貸借の値に基づいて、スキップするかどうかを判断することができます。

その場合、IF文に複数の条件を追加し、条件を満たす場合にのみカーソルをスキップするように設定できます。これにより、複雑なフォームにも柔軟に対応することができます。

5. まとめ:フォームのカーソル移動をカスタマイズする方法

Accessフォームで特定の行をスキップするには、VBAを使ったカスタマイズが有効です。フォームの入力規則やカーソルの移動を細かく制御することで、ユーザーにとって使いやすいインターフェースを提供できます。

また、特定のレコードに対して操作を制限することで、誤入力や不要なデータ変更を防ぐことができます。これらの手法を活用して、より効率的なデータ入力を実現しましょう。

コメント

タイトルとURLをコピーしました