• ベストアンサー

ACCESSでオフセットを求める方法

いつもありがとうございます。 ACCESS VBAで gototrecordを使用して特定のレコードに移動するというフォームを作成しています。 DoCmd.GoToRecord , , acGoTo, オフセット 教えて下さい。 別のフォームで移動したいレコードを選択・指定し、その時にオフセットを取得しておいて、別のフォームで上記のGoToRecordでそのレコードに移動するという事を実現させたいのですがオフセット値の取得方法がわかりません。 どなたか詳しい方お助け下さい。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.1

直接の回答ではないのですが・・・ 例えば、"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

kunisada
質問者

お礼

回答ありがとうございました。 bookmarkは使った事のないプロパティですが、 例示していただいたコードを参考にして使ってみます。

その他の回答 (3)

  • kurodai2
  • ベストアンサー率38% (77/202)
回答No.4

オフセットは、そのフォームでのレコードの位置ですので 2つのフォームでの操作と言うのが、具体的にイメージできませんんが・・ 要は、カレントレコード(選択しているレコード)の位置を取得すればよいので、該当フォームで Me.CurrentRecord で、何番目の位置か取得できます。

kunisada
質問者

お礼

オフセットがそのフォームでの位置という事は知りませんでした。 教えて下さりありがとうございました。

noname#140971
noname#140971
回答No.3

  With rst     .FindFirst strWhere     If .NoMatch Then       MsgBox strWhere & " のレコードが見つかりません。"     Else       varBookmark = .Bookmark     End If   End With さらに、バグ発見!rst も無駄!

noname#140971
noname#140971
回答No.2

  Dim B(1) As Integer は無駄!単なるバグ!

関連するQ&A