- ベストアンサー
ACCESSでオフセットを求める方法
いつもありがとうございます。 ACCESS VBAで gototrecordを使用して特定のレコードに移動するというフォームを作成しています。 DoCmd.GoToRecord , , acGoTo, オフセット 教えて下さい。 別のフォームで移動したいレコードを選択・指定し、その時にオフセットを取得しておいて、別のフォームで上記のGoToRecordでそのレコードに移動するという事を実現させたいのですがオフセット値の取得方法がわかりません。 どなたか詳しい方お助け下さい。
- kunisada
- お礼率52% (111/210)
- その他(データベース)
- 回答数4
- ありがとう数2
- みんなの回答 (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 は無駄!単なるバグ!
関連する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レコードが表示されたままになっています。 分かりづらい質問で申し訳ありません なにとぞお願いいたします。
- 締切済み
- Visual Basic
- 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
- 締切済み
- Visual Basic
- アクセスのマクロ設定について
アクセスにてフォームを作成しています。 フォーム(フォーム1)に別のフォーム(フォーム2)を開くボタン(マクロ)を作成しました。 フォーム1の主キーと同じキーのレコードを指定して、フォーム2で 開かせたいのですが、どのようにマクロを設定すれば良いのでしょうか。 前のレコードや先頭のレコードへの移動はメニューから選択できた ので分かったのですが、上記の方法は分かりませんでした・・・。 何卒よろしくお願い致します。
- 締切済み
- オフィス系ソフト
- Accessサブフォームのレコード移動
Accessにおいて、サブフォームのレコードの移動方法をどなたか教えてもらえませんか。「Forms![メインフォーム名]![サブフォーム名].Form.SetFocus DoCmd.GoToRecord acDataForm, "サブフォーム名", acNext」とコーディングしたのですがダメでした。よろしくお願い致します。
- ベストアンサー
- Visual Basic
- 指定した文字を検索しそのレコードに移動したい
アクセスのフォーム上のレコードで 会社名 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 全部エラーになり、うまくいきません。 正しい記述の仕方を教えてください。
- ベストアンサー
- その他MS Office製品
- Access レコード移動時イベントでサブフォーム
お世話になります。 親フォーム Aがあります。(データソースが存在します) その中にサブフォームBがあります。(データソースが存在します) 親フォームのレコード移動時のイベントで、いつもサブフォームのレコードの最後を表示したいのです。そこで・・・ 親フォームAの レコード移動時イベントに Private Sub Form_Current() Me.B.SetFocus DoCmd.GoToRecord , , acLast End Sub 上記を記述すると、一番初めはきちんとサブフォームBのレコードは最後を表示するのですが、以後、親フォームのレコードを動かすと、親フォームの最後のレコードをさしっぱなしになってしまいます。 Me.B.SetFocus DoCmd.GoToRecord , , acLast これの後にどんな記述をすれば、親フォームのレコードを動かすと同時にサブフォームBも最後の行に移るようにできますでしょうか? 何卒よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
お礼
回答ありがとうございました。 bookmarkは使った事のないプロパティですが、 例示していただいたコードを参考にして使ってみます。