質問: Access97のおはなしです。 サブフォームを表形式で埋め込んでいます。 検索フォームを作成しサブフォームの項目で検索します。 検索結果よりメインのフォームに切り替える際に、 サブフォームの検索目標のあるページに移動することはできないでしょうか? たとえばの例ですが、 メインフォームは会社情報、 サブフォームは取扱商品といった感じです。 クエリーのページ移動ではページ番号は数字ではないとだめで「Like [商品名]」といったページの移動なできないんですよね。 なにかいい方法はありますでしょうか? ちなみにAccessBASICは全然分かりません(泣)
回答: 補足ありがとうございます。 話を簡単にするため、最初にフォーム、コントロールの名前を決めときます。 検索フォーム (検索条件を入力するフォーム) └検索条件 (検索する商品を入力するテキストボックス/コンボボックス) 会社一覧フォーム (取り扱い会社の一覧のフォーム。今回の回答には登場しません) └表示ボタン (会社別商品を表示するためのボタン) 会社別商品フォーム (会社別商品のフォーム) └商品一覧 (商品一覧を表示するサブフォームコントロール) └商品名 (商品名を表示するテキストボックス) 普段から何でもVBAでやってしまうクセがついているので、ちょっと失念していましたが、実は複数フィールドにまたがらない検索でしたら、マクロからでも可能でした。 マクロでするなら、こんな感じです。[表示ボタン]のクリック時に設定されているマクロの、末尾にでも追加してやるといいでしょう。 1行目 オブジェクトの選択 オブジェクトの種類: フォーム オブジェクト名: 会社別商品フォーム データベースウインドウ内: いいえ 2行目 コントロールの移動 コントロール名: 商品一覧 3行目 コントロールの移動 コントロール名: 商品名 4行目 レコードの検索 検索データ: =[Forms]![検索フォーム]![検索条件] 検索条件: フィールドの一部分 大文字小文字区別: いいえ 検索方向: すべてのレコード 表示書式で検索: いいえ カレントフィールドのみ: はい 先頭からの検索: はい VBAでするなら、 1:[表示ボタン]のプロパティの[クリック時]を[イベントプロシージャ]にします。 2:横の[...]ボタンをクリック Private Sub 表示ボタン_Click() End Sub のようなモジュールが表示されます。Private Sub と、End Subの間の行にカーソルがありますが、この位置にコードを入力して、以下のような感じにします。 Private Sub 表示ボタン_Click() Dim RST As Recordset 'マクロ名のところには、会社別商品フォームを開くのに使っているマクロの名前を記述してください。 DoCmd.RunMacro "マクロ名" 'マクロの「オブジェクトの選択」をVBAで書くと、こんな感じになります。 DoCmd.SelectObject acForm, "会社別商品フォーム", False 'サブフォームに表示されているレコードのコピー内容を取得します Set RST = Forms![会社別商品フォーム]![商品一覧].Form.RecordsetClone 'データを検索します。'[商品名] LIKE '*みかん*' みたいな感じです。 RST.FindFirst "[商品名] LIKE '*" & Forms![検索フォーム]![検索条件] & "'" '一致するレコードが発見できなければ、この時点で処理終了です If RST.NoMatch = True Then Exit Sub End If 'サブフォームのレコードを移動します Forms![会社別商品フォーム]![商品一覧].Form.Bookmark = RST.Bookmark '見つかったレコードを選択状態にします。 RunCommand acCmdSelectRecord End Sub も少し詳しく、とか、エラーが起きたとか、ありましたら、補足してください!