• ベストアンサー

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

  • Access2003はチューニングは可能ですか?

    以下のように、レコード1件ずつ処理させるVBAをAccess2003で書いているのですが、処理が遅いです。(1件ずつなので当たり前ですが・・・) AccessやWindows2000をチューニングして、早くすることは可能でしょうか? 基本的にCPUやメモリの増設は金欠のため考えておりません。 あと、開始から終了までミリ単位で計測するVBAの書き方も知りたいです。   '開始 '先頭のレコードに移動する DoCmd.GoToRecord , , acFirst Do '処理 ' ... '次のレコード DoCmd.GoToRecord , , acNext Loop While Me.NewRecord = False   '終了

  • ACCESSのフォームでスクロールバーを一番下に持っていくVBAの記入方法はありますか?

    ACCESSのVBAでスクロールバーを一番下に持っていくコマンドはありますか? 教えてください。ACCESSでフォームを作っています。 元となるフォームを「フォームA」として その中にサブフォーム「フォームB」があります。 フォームBについての質問です。 フォームAにメイン情報があり、フォームBは フォームAの関連情報が幾つかとうろくされています 1:Nの関係です フォームBは帳票フォームです。 レコードの新規作成のコマンド「DoCmd.GotoRecord acNewRec」 や 最終レコードへの移動コマンドでは カーソルが一番下に移動するのですが スクロールバーまで移動しないので 画面上変わらなく困っています。 実際の構成は フォームAで選択した顧客の情報が フォームBに日付ごと表示されています。 一画面に5レコード表示するようにしています(1:5) ここで6レコード目の入力のために レコードの新規作成ボタンや最終レコードへの移動ボタンを 作成したのですが、右側のスクロールバーが 動いてくれないので、カーソルだけ移動して 画面上は5レコードが表示されたままになっています。 分かりづらい質問で申し訳ありません なにとぞお願いいたします。

  • Accessレコードの削除(VBA)

    Accessで入力フォームを使用して入力をしていますが、 全項目の入力がされていない場合そのレコードを削除したいのです。 閉じるときに消そうと思い DoCmd.RunCommand acCmdDeleteRecord を入れてみたのですが、レコードの削除はできません、とメッセージが出てしまい消せません。 次のレコードを選択すれば消せるかと思い DoCmd.GoToRecord , , acNewRec を足してみたりしてみたのですが、やっぱりダメでした。 この場合はどのようにすればいいのでしょうか?

  • サブフォームの新規レコードに移動したい アクセス

    親フォームのコマンドボタンをクリックしたら 親フォームにはまっているサブフォームの新規レコードに移動したいのですが、 うまくできません。 サブフォームのオブジェクト名は、"F_SubForm"です。 サブフォームはデータシートビューです。 VBAコードは Private Sub cmd_test_Click() DoCmd.SelectObject acForm, "F_SubForm" DoCmd.GoToRecord , , acNewRec End Sub です。 上記コードを実行すると DoCmd.SelectObject acForm, "F_SubForm" の部分で、 「実行時エラー 2489  オブジェクトが開いていません。」 となります。 だからと言って、 DoCmd.GoToRecord , , acNewRec だと、何も起こりません。(新規レコードに移動しません) 解決方法をご教授ください。

  • トグルスイッチをVBAでコントロール

    マイクロソフトアクセス2000で作成しています。 メインフォームとサブフォームを使っています。 メインフォームにあるトグルスイッチを押した時に、サブフォームの最新レコードに移動したいと 考えています。 ボタンを押したときに、VBAの命令は動くのですがトグルスイッチが押した状態になりません。 VBAで押した状態にしようとしても命令言語がわかりません。 ご教授をお願い致します。 Me.トグルスイッチ1=true <- ここが動きません。 DoCmd.GoToControl "サブフォーム名" DoCmd.GoToRecord , , acNewRec

  • アクセスのマクロ設定について

    アクセスにてフォームを作成しています。 フォーム(フォーム1)に別のフォーム(フォーム2)を開くボタン(マクロ)を作成しました。 フォーム1の主キーと同じキーのレコードを指定して、フォーム2で 開かせたいのですが、どのようにマクロを設定すれば良いのでしょうか。 前のレコードや先頭のレコードへの移動はメニューから選択できた ので分かったのですが、上記の方法は分かりませんでした・・・。 何卒よろしくお願い致します。

  • Accessサブフォームのレコード移動

    Accessにおいて、サブフォームのレコードの移動方法をどなたか教えてもらえませんか。「Forms![メインフォーム名]![サブフォーム名].Form.SetFocus DoCmd.GoToRecord acDataForm, "サブフォーム名", acNext」とコーディングしたのですがダメでした。よろしくお願い致します。

  • 指定した文字を検索しそのレコードに移動したい

    アクセスのフォーム上のレコードで 会社名 AAA会社 CCC会社 BBB会社 ・ ・ ・ となっていて、 「BBB会社」をvbaで検索しつつ、 そのレコードに移動するにはどうすればいいでしょうか? GoToRecordメソッドを使う事はわかったのですが、 「BBB会社」を検索しつつ、そのレコード番号を取得し・・・ と言う処理がわかりません。 レコード番号さえわかれば、GoToRecordメソッドで 移動できる気がします。 会社名のレコードが入っているフォームは サブフォームとなっています。

  • GoToRecordでサブフォームを指定したい

    Fフォームの中にSF詳細という名前のサブフォームを埋め込んでいます。 このサブフォームに対して、 指定したレコードに移動したいのですが DoCmd.GoToRecord acDataForm, Form_SF詳細, acGoTo, 3 DoCmd.GoToRecord acDataForm, Forms("Fフォーム").Controls("SF詳細").Form, acGoTo, 3 DoCmd.GoToRecord acDataForm, "SF詳細", acGoTo, 3 全部エラーになり、うまくいきません。 正しい記述の仕方を教えてください。

  • Access レコード移動時イベントでサブフォーム

    お世話になります。 親フォーム Aがあります。(データソースが存在します) その中にサブフォームBがあります。(データソースが存在します) 親フォームのレコード移動時のイベントで、いつもサブフォームのレコードの最後を表示したいのです。そこで・・・ 親フォームAの レコード移動時イベントに Private Sub Form_Current() Me.B.SetFocus DoCmd.GoToRecord , , acLast End Sub 上記を記述すると、一番初めはきちんとサブフォームBのレコードは最後を表示するのですが、以後、親フォームのレコードを動かすと、親フォームの最後のレコードをさしっぱなしになってしまいます。 Me.B.SetFocus DoCmd.GoToRecord , , acLast これの後にどんな記述をすれば、親フォームのレコードを動かすと同時にサブフォームBも最後の行に移るようにできますでしょうか? 何卒よろしくお願いいたします。