アクセス小僧:フォームを開いたとき、最後に見ていたレコードに飛ぶ [コンピューター]
アクセスのフォームを開いたとき、
最後に見ていたレコードに飛ぶマクロを作りました。
【1】レコード移動時、主キーを記憶
最後に見ていたレコードを特定するため、フォームでレコード移動時に主キーを別テーブルに保存します。
まず、主キーを保存する別テーブルを作ります。
テーブル名(例):T_PWMngID
フィールド1(例):T_PM_ID
フィールド2(例):PW_Mng_ID1
・T_PM_IDフィールドは、このテーブルの主キーです。T_PM_ID=1のレコードを作成しておきます。
・PW_Mng_ID1に、フォームで最後に表示していたレコードの主キーを保存します。
フォームのレコード移動(Form_Current)時のマクロに、次のコードを記述します。
フォームの閉じる(Form_Close)イベントでは、うまくいきませんでした。
Private Sub Form_Current()
' 【イベント】レコード移動時
'【変数】
Dim db As DAO.Database
Dim rs As DAO.Recordset
'【実行コード】
' PW_Mng_IDを退避
' MsgBox "PW_Mng_ID=" & [PW_Mng_ID]
Set db = CurrentDb()
' テーブルを開く
Set rs = db.OpenRecordset("T_PWMngID", dbOpenDynaset)
rs.MoveFirst
rs.FindFirst "T_PM_ID=1"
If rs.EOF Then
MsgBox "T_PM_ID=1が見つかりません。[Form_Close]"
Else
rs.Edit
rs![PW_Mng_ID1] = [PW_Mng_ID]
rs.Update
End If
rs.Close
Set rs = Nothing ' 解放
db.Close
Set db = Nothing ' 解放
End Sub
・[PW_Mng_ID]が、フォームで開いているテーブルのレコードの主キーです。
これを先ほど作成したT_PWMngIDテーブルの、T_PM_ID=1のレコードの[PW_Mng_ID1]フィールドに保存します。
【2】フォームを開いたとき、最後に見ていたレコードに移動
フォームの読み込み(Form_Load)時のマクロに次のコードを記述します。
Private Sub Form_Load()
'【イベント】フォーム読み込み時
'【変数】
Dim MyStr1 As String
'【実行コード】
' 直前に参照していたレコードに移動
MyStr1 = "PW_Mng_ID = " & DLookup("PW_Mng_ID1", "T_PWMngID", "T_PM_ID=1")
With Me.Recordset
.FindFirst MyStr1
End With
End Sub
・DLookupで別テーブルに保存していた主キーを参照し、その主キーを持つレコードを検索します。
最後に見ていたレコードに飛ぶマクロを作りました。
【1】レコード移動時、主キーを記憶
最後に見ていたレコードを特定するため、フォームでレコード移動時に主キーを別テーブルに保存します。
まず、主キーを保存する別テーブルを作ります。
テーブル名(例):T_PWMngID
フィールド1(例):T_PM_ID
フィールド2(例):PW_Mng_ID1
・T_PM_IDフィールドは、このテーブルの主キーです。T_PM_ID=1のレコードを作成しておきます。
・PW_Mng_ID1に、フォームで最後に表示していたレコードの主キーを保存します。
フォームのレコード移動(Form_Current)時のマクロに、次のコードを記述します。
フォームの閉じる(Form_Close)イベントでは、うまくいきませんでした。
Private Sub Form_Current()
' 【イベント】レコード移動時
'【変数】
Dim db As DAO.Database
Dim rs As DAO.Recordset
'【実行コード】
' PW_Mng_IDを退避
' MsgBox "PW_Mng_ID=" & [PW_Mng_ID]
Set db = CurrentDb()
' テーブルを開く
Set rs = db.OpenRecordset("T_PWMngID", dbOpenDynaset)
rs.MoveFirst
rs.FindFirst "T_PM_ID=1"
If rs.EOF Then
MsgBox "T_PM_ID=1が見つかりません。[Form_Close]"
Else
rs.Edit
rs![PW_Mng_ID1] = [PW_Mng_ID]
rs.Update
End If
rs.Close
Set rs = Nothing ' 解放
db.Close
Set db = Nothing ' 解放
End Sub
・[PW_Mng_ID]が、フォームで開いているテーブルのレコードの主キーです。
これを先ほど作成したT_PWMngIDテーブルの、T_PM_ID=1のレコードの[PW_Mng_ID1]フィールドに保存します。
【2】フォームを開いたとき、最後に見ていたレコードに移動
フォームの読み込み(Form_Load)時のマクロに次のコードを記述します。
Private Sub Form_Load()
'【イベント】フォーム読み込み時
'【変数】
Dim MyStr1 As String
'【実行コード】
' 直前に参照していたレコードに移動
MyStr1 = "PW_Mng_ID = " & DLookup("PW_Mng_ID1", "T_PWMngID", "T_PM_ID=1")
With Me.Recordset
.FindFirst MyStr1
End With
End Sub
・DLookupで別テーブルに保存していた主キーを参照し、その主キーを持つレコードを検索します。
ヤバイぜ! ありがとうございます[__猫]
by cheese999 (2017-10-20 20:09)