• ベストアンサー

ACCESSのBookmarkプロパティの使い方

Stressmanと言います。 環境は、Windows98SEでACCESS2002を使っています。 質問というのは、ACCESSのBookmarkプロパティの意味、使い方 を教えていただきたいのです。 ヘルプを読んだのですが、よく分かりません… ちなみに、ヘルプには 「フォームの基になるテーブル、クエリ、またはSQLステートメント に含まれる測定のレコードを個別に識別するためのブックマークを設定 します。値の取得および設定が可能です。バリアント型の値を使用します。」 と書いてあります。 具体的に、「こういう意味」「こういう使い方をする」というのを 教えて頂きたいのです。 #サブフォームのレコード移動について調べていたら、「Bookmark」が #よくでてきたので、「これを理解しないと先に進めない」と判断して #投稿させていただきました。 #これぐらい知っておけよ、とつっこまないでください…

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

  • ベストアンサー
  • ryuu001
  • ベストアンサー率61% (46/75)
回答No.2

>2 、001    、4/5  、田中 >へ移動することも可能なのでしょうか? その通りです。 この場合は 次のようになります。 Dim Rs As DAO.Recordset ' フォームのレコードを Rs にセット Set Rs = Me.サブフォームB.form.RecordsetClone ' Rs で No が 2を検索 Rs.FindFirst "[No]=2" ' Rs で Noが2の場所を サブフォームB に反映 Me.サブフォームB.form.Bookmark = Rs.Bookmark

stressman
質問者

お礼

ryuuさん、ありがとうございます。 早速試してみます。 「できた」という報告は補足にて記載したいと思います。

stressman
質問者

補足

すいません。 できた、という報告ではなくエラーが出てきました。 --------------------------------- コンパイルエラー ユーザ定義型は、定義されていません --------------------------------- というエラーがでて、 Dim Rs As DAO.Recordset の部分が反転しています。 VBAをあまり理解していないので、 このエラーだけでは、何がどう悪いのか 分かりません。宜しくお願いします。

その他の回答 (2)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 Bookmarkの他の用途は、あるレコードにマークしておいて、レコードをいろいろ移動した後で、そのレコードに簡単に戻ってくるというものです。 ヘルプの説明としてはこちらの使い方になるのでしょう。 具体的な方法は、現時点のカレントレコードにマークしておきます。 Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim bmark As Variant 'ブックマーク、バリアント型 Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open テーブル名, cn, adOpenKeyset, adLockOptimistic 'ブックマークを取得 bmark = rs.Bookmark (Move系メソッドなどで別のレコードへ移動) '元のレコードへ戻る rs.Bookmark = bmark rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing

stressman
質問者

お礼

ありがとうございました。 Private Sub コマンド_Click() Dim Rs As DAO.Recordset Set Rs = Me![サブフォーム].[Form].RecordsetClone Rs.FindFirst "ID =" & Str(Me![コンボ]) Me![サブフォーム].[Form].Bookmark = Rs.Bookmark End Sub をコマンドボタンのクリック時のイベント処理で 実行したら、出来ましたぁぁ~♪ 説明べたでご迷惑をおかけしました。 また、行き詰まりましたら宜しくお願いします。

stressman
質問者

補足

maruru01さん、ありがとうございます。 maruru01さんのコードはまだ試していないのですが、 下記のryuu001さんのコードを、元に Private Sub コマンド_Click() Dim Rs As DAO.Recordset Set Rs = Me![サブフォーム].[Form].RecordsetClone Rs.FindFirst "ID = Me![サブフォーム]![コンボ]" Me![サブフォーム].[Form].Bookmark = Rs.Bookmark End Sub というコードを書きました。すると、 ------------------------------------------------------ Me![サブフォーム]![コンボ]を、有効なフィールド名、または 式として認識できません。 ------------------------------------------------------ とエラーがでてしまいました。 コンボで指定したレコードに移動したいと思ってやったのですが うまくいきませんでした…

  • ryuu001
  • ベストアンサー率61% (46/75)
回答No.1

「Bookmark」は、フォーム上で、あるレコードを検索し、 フォームの画面を そのレコードへ移すときに使います。 その場合、「Recordsetclone」と組み合わせて 使用します。

stressman
質問者

お礼

ryuu001さん、ありがとうございます。 フォーム上でレコードを検索し、 そのレコードに移動するときに使う、ってことは… テーブルA 顧客コード、顧客名、住所 テーブルB No、顧客コード、打合せ日、担当者 というテーブルがあって、それぞれをソースにした フォームがあるとします。 フォームA→テーブルAをソース フォームB→テーブルBをソース で、フォームBをフォームAのサブフォームとして、 「顧客コード」でリンクさせるとします。 そのとき、 テーブルA 顧客コード、顧客名、住所 001    、山本 、東京都 002    、鈴木 、大阪府 003    、太田 、京都府 テーブルB No、顧客コード、打合せ日、担当者 1 、001    、3/2  、田中 2 、001    、4/5  、田中 3 、002    、3/15  、小川 4 、001    、5/10  、近藤 5 、002    、4/11  、小川 6 、003    、6/14  、工藤 とすると、フォームAで顧客コード「001」を選択すると、 サブフォームB(単票形式、移動ボタン有り)は、 1 、001    、3/2  、田中 2 、001    、4/5  、田中 4 、001    、5/10  、近藤 となります。このとき何らかの処理で、いきなり 2 、001    、4/5  、田中 へ移動することも可能なのでしょうか? 説明べたですいません。 宜しくお願いします。

関連するQ&A