つい集めてしまうものはなんですか?

いつもありがとうございます。

ACCESS VBAで gototrecordを使用して特定のレコードに移動するというフォームを作成しています。

DoCmd.GoToRecord , , acGoTo, オフセット
教えて下さい。
別のフォームで移動したいレコードを選択・指定し、その時にオフセットを取得しておいて、別のフォームで上記のGoToRecordでそのレコードに移動するという事を実現させたいのですがオフセット値の取得方法がわかりません。

どなたか詳しい方お助け下さい。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/10 19:17

オフセットは、そのフォームでのレコードの位置ですので


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

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

お礼日時:2007/08/10 19:18

  With rst


    .FindFirst strWhere
    If .NoMatch Then
      MsgBox strWhere & " のレコードが見つかりません。"
    Else
      varBookmark = .Bookmark
    End If
  End With

さらに、バグ発見!rst も無駄!
    • good
    • 0

  Dim B(1) As Integer



は無駄!単なるバグ!
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報

このQ&Aを見た人がよく見るQ&A