アクセス小僧:検索フィルタ解除 [コンピューター]
アクセス小僧:検索
https://cheese999.blog.so-net.ne.jp/2019-02-19
で、レコード検索する前に、ソートを解除(Me.OrderByOn = False)するコードを追加する旨、紹介させてもらいました。
レコード検索マクロと対になっているマクロで、検索フィルタを解除するマクロがあるのですが。。。
レコード検索マクロでソートを解除してしまうと、レコードの並びが、人間にとって意味の無い、主キーの順番になってしまうので、医療費のデータベースでは、日付,領収書番号で並べ替えるように検索フィルタ解除マクロにコードを追加しました。
Private Sub Btn_検索フィルタ解除_Click()
On Error GoTo ERR1
'【変数】
Dim myID As Long
Dim MyStr1 As String ' 文字列
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Ans As Integer ' 答え
'【実行コード】
' 直前に参照していたレコードのID
myID = DLookup("F_医療費CR_ID", "T_CR医療費ID", "T_CR医療費ID_ID=1") ' IDを退避
' myID = [ID] ' IDを退避
MyStr1 = "ID = " & myID
Me.AllowAdditions = True '追加の許可
Me.FilterOn = False ' フィルタ解除
' 直前に参照していたレコードのレコード番号を調べる
Set db = CurrentDb()
' テーブルを開く
Set rs = db.OpenRecordset("T_医療費", dbOpenDynaset)
rs.MoveFirst ' 先頭レコードへ
rs.MoveLast ' 最終レコードへ
rs.MoveFirst ' 先頭レコードへ
' IDを検索
rs.FindFirst MyStr1
' 並べ替え
Me.OrderBy = "日付,領収書番号" ' 並べ替え条件
Me.OrderByOn = True ' 並べ替え実行
If rs.NoMatch Then
' IDが見つからなかった場合
Ans = MsgBox(MyStr1 & "は存在しません。", vbExclamation, "注目!")
Else
' IDが見つかった場合
' 直前に参照していたレコードにフォーム上で移動
Debug.Print "rs.AbsolutePosition=" & rs.AbsolutePosition
DoCmd.GoToRecord acDataForm, "F_医療費", acGoTo, rs.AbsolutePosition + 1
End If
rs.Close
Set rs = Nothing ' 解放
db.Close
Set db = Nothing ' 解放
' With Me.Recordset
' .FindFirst MyStr1
' End With
Exit Sub
ERR1:
MsgBox ("エラー(検索フィルタ解除_Click)" & vbCrLf & Err.Description)
End Sub
フォームの画面イメージです。
大尽が遅刻したらしいけど。遅刻が許されないのは確かだけど、3分の遅刻で、5時間国会が止まるのは、どうなんでしょうね。野党の皆さんも、5時間分の給料を返せ、と言われたら、どうしますか?
北海道で地震があったとか。地球が怒っているよ。。
https://cheese999.blog.so-net.ne.jp/2019-02-19
で、レコード検索する前に、ソートを解除(Me.OrderByOn = False)するコードを追加する旨、紹介させてもらいました。
レコード検索マクロと対になっているマクロで、検索フィルタを解除するマクロがあるのですが。。。
レコード検索マクロでソートを解除してしまうと、レコードの並びが、人間にとって意味の無い、主キーの順番になってしまうので、医療費のデータベースでは、日付,領収書番号で並べ替えるように検索フィルタ解除マクロにコードを追加しました。
Private Sub Btn_検索フィルタ解除_Click()
On Error GoTo ERR1
'【変数】
Dim myID As Long
Dim MyStr1 As String ' 文字列
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Ans As Integer ' 答え
'【実行コード】
' 直前に参照していたレコードのID
myID = DLookup("F_医療費CR_ID", "T_CR医療費ID", "T_CR医療費ID_ID=1") ' IDを退避
' myID = [ID] ' IDを退避
MyStr1 = "ID = " & myID
Me.AllowAdditions = True '追加の許可
Me.FilterOn = False ' フィルタ解除
' 直前に参照していたレコードのレコード番号を調べる
Set db = CurrentDb()
' テーブルを開く
Set rs = db.OpenRecordset("T_医療費", dbOpenDynaset)
rs.MoveFirst ' 先頭レコードへ
rs.MoveLast ' 最終レコードへ
rs.MoveFirst ' 先頭レコードへ
' IDを検索
rs.FindFirst MyStr1
' 並べ替え
Me.OrderBy = "日付,領収書番号" ' 並べ替え条件
Me.OrderByOn = True ' 並べ替え実行
If rs.NoMatch Then
' IDが見つからなかった場合
Ans = MsgBox(MyStr1 & "は存在しません。", vbExclamation, "注目!")
Else
' IDが見つかった場合
' 直前に参照していたレコードにフォーム上で移動
Debug.Print "rs.AbsolutePosition=" & rs.AbsolutePosition
DoCmd.GoToRecord acDataForm, "F_医療費", acGoTo, rs.AbsolutePosition + 1
End If
rs.Close
Set rs = Nothing ' 解放
db.Close
Set db = Nothing ' 解放
' With Me.Recordset
' .FindFirst MyStr1
' End With
Exit Sub
ERR1:
MsgBox ("エラー(検索フィルタ解除_Click)" & vbCrLf & Err.Description)
End Sub
フォームの画面イメージです。
大尽が遅刻したらしいけど。遅刻が許されないのは確かだけど、3分の遅刻で、5時間国会が止まるのは、どうなんでしょうね。野党の皆さんも、5時間分の給料を返せ、と言われたら、どうしますか?
北海道で地震があったとか。地球が怒っているよ。。
ヤバイぜ! ありがとうございます(^_0)ノ
by cheese999 (2019-02-22 04:51)
(^o^)/
by トレンダー櫻井 (2019-02-22 05:03)
トレンダー櫻井さん、
(^_0)ノ
by cheese999 (2019-02-23 06:59)