Accessでのキーワード検索(フィルタ)とブックマークの関係を作るのに苦労したのでここに備忘録。
ポイントは、検索ではなくフィルタを使うことと、BookmarkではなくIDをグローバル変数に保存してFindFirstを使うこと。
簡単そうに見えて、作り終えたのは全力で2時間後。
Option Compare Database
Dim bmark As Variant 'ブックマーク用のグローバル変数
Private Sub 修正済みチェック_Click()
If チェック55 = True Then
Me.更新日.Value = Date
Else
Me.更新日.Value = Null
End If
End Sub
Private Sub Form_Open(Cancel As Integer)
Me![検索ボックス].SetFocus
End Sub
Private Sub 検索ボックス_AfterUpdate()
‘ コントロールの値と一致するレコードを検索する
Me.Filter = “[企業名] Like ‘*” & Me![検索ボックス] & “*'”
Me.FilterOn = True
bmark = Me.企業ID ‘フォーム上でのカレントレコードの位置保存
End Sub
Private Sub 移動後_Click()
On Error GoTo Err_移動後_Click
Dim rs As Object
Set rs = Me.Recordset.Clone
DoCmd.GoToRecord , , acNext
bmark = Me.企業ID ‘フォーム上でのカレントレコードの位置保存
Exit_移動後_Click:
Exit Sub
Err_移動後_Click:
MsgBox Err.Description
Resume Exit_移動後_Click
End Sub
Private Sub 移動前_Click()
On Error GoTo Err_移動前_Click
DoCmd.GoToRecord , , acPrevious
bmark = Me.企業ID ‘フォーム上でのカレントレコードの位置保存
Exit_移動前_Click:
Exit Sub
Err_移動前_Click:
MsgBox Err.Description
Resume Exit_移動前_Click
End Sub
Private Sub フィルタ解除_Click()
On Error GoTo Err_フィルタ解除_Click
Me.FilterOn = False
‘ブックマークを保存したレコードに戻る Dim rs As Object
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst “[企業ID] = ” & bmark
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
Exit_フィルタ解除_Click:
Exit Sub
Err_フィルタ解除_Click:
MsgBox Err.Description
Resume Exit_フィルタ解除_Click
End Sub