- ベストアンサー
ACCESSでオフセットを求める方法
いつもありがとうございます。 ACCESS VBAで gototrecordを使用して特定のレコードに移動するというフォームを作成しています。 DoCmd.GoToRecord , , acGoTo, オフセット 教えて下さい。 別のフォームで移動したいレコードを選択・指定し、その時にオフセットを取得しておいて、別のフォームで上記のGoToRecordでそのレコードに移動するという事を実現させたいのですがオフセット値の取得方法がわかりません。 どなたか詳しい方お助け下さい。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
直接の回答ではないのですが・・・ 例えば、"ID=3" のレコードを検索・移動した折にブックマークを設定しておいたとします。 そうすれば、 Me.Bookmark = varBookmark の1行だけで、そのレコードに移動できます。 ですから、オフセット計算など不要。 質問のケースでは、別のフォームで移動したいレコードを選択・指定した時に SetBookmark() をコール。 SetBookmark 関数では、フォーム名を引数に出来ますので、他のフォームでも使用できます。 そうすれば、広域変数のブックマークが未定義かどうかをチックしフォームのブックマークを設定すればいいです。 もちろん、DAO を使っていますので参照設定はしなくちゃならないです。 Option Compare Database Option Explicit Dim varBookmark As Variant Private Sub コマンド6_Click() SetBookmark Me.Name, "ID=3" If IsEmpty(varBookmark) Then MsgBox "No Bookmark set!" Else Me.Bookmark = varBookmark End If End Sub Public Sub SetBookmark(ByVal frmName As String, ByVal strWhere As String) Dim B(1) As Integer Dim rst As DAO.Recordset Set rst = Forms(frmName).RecordsetClone With rst rst.FindFirst strWhere If .NoMatch Then MsgBox strWhere & " のレコードが見つかりません。" Else varBookmark = rst.Bookmark End If End With End Sub
その他の回答 (3)
- kurodai2
- ベストアンサー率38% (77/202)
オフセットは、そのフォームでのレコードの位置ですので 2つのフォームでの操作と言うのが、具体的にイメージできませんんが・・ 要は、カレントレコード(選択しているレコード)の位置を取得すればよいので、該当フォームで Me.CurrentRecord で、何番目の位置か取得できます。
お礼
オフセットがそのフォームでの位置という事は知りませんでした。 教えて下さりありがとうございました。
With rst .FindFirst strWhere If .NoMatch Then MsgBox strWhere & " のレコードが見つかりません。" Else varBookmark = .Bookmark End If End With さらに、バグ発見!rst も無駄!
Dim B(1) As Integer は無駄!単なるバグ!
お礼
回答ありがとうございました。 bookmarkは使った事のないプロパティですが、 例示していただいたコードを参考にして使ってみます。