• ベストアンサー

Accessで、一覧からクリックして詳細表示したい

イメージとしては図をご覧ください。 テーブルをサブフォームにして、フォーム内に表示(画像の左下)、 その中の詳細表示させたいレコードをクリック(もしくはダブルクリック)すると、 右のボックスに表示される、、、といった感じにしたいです。 このような動作をさせるプログラムを、VBAで作れますか? (VBAまったくわかりません。) 表示させたい内容を別のテーブルにしてリレーションシップを設定するのがいいのかとも思いましたが、いずれにしてもVBAがわかりません。 バージョン2000です。

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

  • ベストアンサー
  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.1

添付画像のように単一のフォームで横に表示するのは無理(左は帳票またはデータシート、右は単票です。詳細エリアに混在はできない。)だと思うのですが、上下レイアウトでよく、今ターゲットがあるレコードの詳細表示でよい というのであれば、すぐに出来ます。 方法は、 1.該当のフォームの規定のビューを「帳票フォーム」にします。 2.備考と内容フィールドをフォームのフッターなり、ヘッダーに移動します。 それ以外のフィールドは「詳細」に置きます。 完成です。 これではよろしくない、クリックして表示し、次をクリックするまでそれを保持したいというのであれば、単票形式の別フォームを準備する方法になるかと思います。 その程度なら、VBAがわからなくても、マクロでナントカなりそうですが。 流れは「閉じる(別フォームを。前の分が開いているかもしれないので)」「フォームを開く(Where条件付)」「元フォームをアクティブにする」だけ。

skullfish8
質問者

お礼

遅くなりましたが、皆様ありがとうございました。 使えるものに出来ました。

その他の回答 (1)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

> このような動作をさせるプログラムを、VBAで作れますか? もしも幾つかの前提条件を掛けてもよいようでしたら、 プログラムは(殆ど)使用せずに、ご希望の動作をさせることが できるかと思います。 つまり、  1)赤枠で囲んだ部分の表示には、「サブフォーム」ではなく   (複数列を表示させる)「リストボックス」を使用  2)青枠で囲んだ部分の表示には「サブフォーム」を使用し、   サブフォームのリンク親フィールドとして、上記「1」の   リストボックスを使用 とすることでVBA/マクロを一切使用せずに、リストボックスの クリックで右側の表示内容の切替が可能になります。 ※こちらの環境(Win XP&Access2003)で確認済。  但し、環境によっては(?)、リストボックスの更新後イベント  での、サブフォームの「再クエリ(Requery)」だけは、必要に  なるかもしれません(汗) 必要となる前提条件は、  ・赤枠部分は、別のフォームで編集   (この画面では追加/編集/削除は不可)  ・赤枠部分の各列の列幅は、ユーザーは変更不可   (フォームのデザイン時に設定した幅で固定) となります。 上記前提でよければ、以下の手順で対応できます: 1)当該テーブルをレコードソースとするフォームを新規作成  し、「内容」「備考」等を表示するテキストボックスを設置  ※青枠内のサブフォーム用 2)新規フォームをデザインビューで開く  (こちらはレコードソースは指定不要) 3)リストボックスを追加し、プロパティシートで以下を設定:  ○『書式』タブ   ・『列数』=「3」 (No.、年月日、件名の3列)   ・『列幅』=適宜調整(例えば「1cm;2cm;5cm」等)     ※各列の幅を「;」(セミコロン)で区切って指定。  ○『データ』タブ   ・『値集合ソース』=上記3フィールドのみを表示する    クエリを予め作成しておき、ここにその名前を指定    (または、プロパティシートの上記欄にカーソルを     置いた時に右端に表示される『ビルダ』を使用     して、ここでクエリ(SQL文)を作成してもOk)   ・『連結列』=「1」 (「No.」フィールドが主キーなど、     レコードの特定できるデータであると推測) 4)サブフォームを追加し、プロパティシートで以下を設定:  ○『データ』タブ   ・『ソースオブジェクト』=「1」で作成したフォームの名前   ・『リンク子フィールド』=「No.」   ・『リンク親フィールド』=「2」で作成したリストボックスの     名前  ※親フォームのレコードソースが空白の場合、リンク親   フィールド/リンク子フィールドで『ビルダ』を使用すると、   「非連結フォームにリンクを作成することはできません」   とのエラーが表示されますが、ビルダを使用せずに手で   直接入力してやればOkです。 5)フォームを保存して閉じる ・・・以上です。 なお、リストボックスで値を選択してもサブフォームの内容が 切り替わらない場合は、 1)リストボックスのプロパティシートで、『イベント』タブを選択  し、『更新後処理』にカーソルを移動 2)右端に表示される『ビルダ』(「...」のボタン)をクリック 3)『ビルダの選択』ダイアログが開くので、「コードビルダ」を  選択して『OK』ボタンをクリック 4)Visual Basic Editor(VBE)画面が開くので、以下を入力:  (先頭と末尾の計2行は自動で入力されるので、中央の   1行のみ手入力すればOk) Private Sub リストボックス1_AfterUpdate()   (サブフォーム名).Requery End Sub  ※「(サブフォーム名)」には、実際のサブフォームの名前   (ソースオブジェクトではなく、プロパティシートの『その他』   タブの『名前』に表示される方)を入力。   (前後の「( )」は無用。「Requery」の前に「.」(ピリオド)が    必要なので注意) と、1行だけVBAを追加すれば、切り替わるようになります。 (VBAなしでサブフォームの表示が切り替わるなら不要です) 【参考】 赤枠部分もデータの更新が必要な場合は、そちらもサブフォームに した上で、その『レコード移動時』イベントを使用してやれば (→ここにはVBAが必要)、同様に対応できます。 (リストボックスの代わりに非表示のテキストボックスを設置し、  リンク親フィールドとします。  赤枠側のレコード移動時にその「No.」をここに記録し、それと  同時に、青枠側のサブフォームを、上記の通り再クエリ)

関連するQ&A

  • アクセスでの詳細表示のしかた

    新規採用の応募者のDB作成しました。 学校の種別(大学院、大学、高校)や学校名で検索(クエリ)のフォーム(A)に、応募者テーブルを基にしたデータシート型のサブフォーム(B)を埋め込みました。 ここまでは、学校名の一覧表示のフォーム(O)に詳細表示用のボタンを配し、マクロで上記のサブフォームを含む、学校情報フォーム(A)を開くのはできました。 次に、このサブフォーム(B)中の応募者のID(氏名でも)をダブルクリックすると、応募者の詳細表示フォーム(C)を表示できるようにしたくて、応募者IDのコントロールのプロパティでイヴェントのダブルクリックにマクロを設定しました。 (C)フォームを開く where条件として [フォーム(B)]![応募者ID]=[フォーム(C)]![応募者ID]としても、左項の値が右項へ代入されず、うまく行きません。 どうしたら、サブフォーム(データシート)の帯び データから特定のレコードを指定して、更に別のフォーム(特定レコード)の表示が可能なのでしょうか? 不慣れで、説明もままならないこんな私にどなたかHELP!

  • Access97:サブフォームを切り替え表示したい

    アクセスで仕事で用いられる専門用語の和英辞書データベースを作っております。 その辞書は用語の持つ意味や使われ方などから分類をしています。 分類一覧テーブルは分類ID,分類からなり、用語一覧テーブルは用語IDと用語からなります。 これらをつなぐのが和英辞書テーブルで、辞書ID,分類ID,用語IDからなり、 分類ID,用語IDはそれぞれ分類一覧テーブル,用語一覧テーブルのそれとリレーションシップを 組んでいます。 メインフォーム(既定のビュー=単票フォーム)には分類フィールドを作り、コンボボックスにします。 分類を選択したときまたはその横に「表示」ボタンを設置しておいてそのボタンをクリックしたときに 選択された分類に属する用語一覧がサブフォーム(既定のビュー=帳票フォーム)にリロードされてるように切り替えて表示させたいと考えています。 メインフォーム元:分類一覧テーブル,サブフォーム元:用語一覧テーブルにしたフォームは作成できました。 メインフォームのレコードを切りかえるとサブフォームも切り替わりますが、 コンボボックスの選択でサブフォームを切りかえ(たように見せ)る上記のようなフォームに このフォームから編集することはできるでしょうか? 無理なら新規にフォームを作りなおすとしてできるでしょうか? 自分の発想で2通りやってみましたが、いずれも失敗でした。 (詳しく書いたら文字数が800を超えたので省略します) テーブルの構成やリレーションを多少変えてもいいしフォームのレコードソースにクエリービルダを使ったりVBを組んでもいいので、メインフォームのコンボボックスの選択値によってサブフォームの表示を切り替える方法について教えて下さい。

  • サブフォームでのダブルクリックイベント

    Access2003です。 フォームにサブフォームを設置し、直接テーブルを表示させています。 このサブフォームのテーブルのある行をダブルクリックしたら その行のデータを他のフォームのオブジェクトにセットしたいのですが 行や行のデータ全てを取得は出来るのですが、サブフォームのイベントがEnterとExitしかなくて、イベント発生が出来ません。 フォームのダブルクリックでXとYを見て…と思ったのですがサブフォーム上ではフォームのダブルクリックイベントが発生せず。 サブフォームのテーブルはユーザーがソートする事もあるのでベタに上にテキストボックス等を置く事は出来ません。 どうにかダブルクリックで動作させる方法はありませんでしょうか?

  • レコードセレクタをクリックすると詳細フォームを表示

    このサイトに何度か、登校しています。eternallyと言います。 さて、質問の内容というのが、ACCESS2010のレコードセレクタについてです。 【Aテーブル】 ID  会社名  ソフト名  ソフトの説明 1   AAAAA BBBBB CCCCCCCC 2 DDDDD EEEEE FFFFFFFFF 3 GGGGG HHHGH IIJIIII 【Bテーブル】 ID 金 額  所有有無 1  50,000 X 2 35,000 ○ 3  70,000  × Aテーブルの内容をそのまま、フォームAとして帳票フォームで表示しています。 ここでフォームAのレコードセレクタをクリックすると、Bテーブルを関連付けた フォームBの内容を表示したいのです。 他のサイトで調べましたが、 同じテーブルをレコードセレクタで表示させる方法は見つかったのですが、 違うテーブルを表示させる方法がみつからなかったので、このサイトで聞いてみようと思いました。 Private Sub Form_Click() Forms!フォームA.Filter = "ID=" & Me!ID Forms!!フォーム.FilterOn = True End Sub 上はフォームAのレコードセレクタをクリックすると、 詳細フォームを表示する場合のVBAです。 フォームBの場合はエラーになって、動いてもくれません。 「フォームBが見つかりません。」というエラーです。 どうぞ、よろしくお願いします。

  • ACCESSのサブフォームについて

    ACCESSにおいて、サブフォームにデータを表示させた状態で、あるレコードをダブルクリックで選択させ、 そのデータ(対象レコード)をメインフォームに戻って使用させるにはどのようにしたらよろしいのでしょうか? サブフォームの該当箇所に、ダブルクリック時イベントを貼り付けて、 制御をメインフォームへ移すのでしょうか。 よろしくお願いします。

  • Access のフォームで新しい行を挿入する方法

    アクセスの表形式でフォームを作成した時、データの先頭を右クリックすると ボックスが表示され、切り取り、コピー、貼り付け と表示されますが、ここに 挿入 がありません。  そこで、ここでダブルクリックをする事により、行挿入を行おうと思いました。 実際やってみるとテーブルの中には新しいレコードが挿入されているのですが、フォームを再表示(Repaintメゾッドを使用)しても、作成されたレコードが表示されません。 この時、レコード件数も増えているのに、以前のままの表示です。追加した後の枝No.は変更されて表示されています。  レコードには、キー項目と枝No.があります。  最初、レコード件数は2件とします。 1件目と2件目の間に新しいレコードを挿入したいので、2件目をダブルクリックして、新しく枝No.「2」のレコードを作成し、元の枝No.「2」のレコードは「3」に変更している事はテーブルを開けてみて確認しています。  この時、フォームでも枝No.は Repaint 実行後、変更されて表示されています。  どのようにすれば、新しいレコードが表示する事が出来るでしょうか。 実際には、この表形式はサブフォームにしており、メインフォームから、この挿入イベントを実行したいのです。 メインフォームでイベントを実行後、新たにサブフォームだけ開けてみると、ちゃんと新しいレコードが表示され、レコード件数も3件になっています。  よろしくお願いいたします。

  • ACCESSフォームのリストボックスでレコードが選択できない

    ACCESS2000です。 フォームの左側に親テーブルのフィールド1の値を選択させるリストボックスがあり、そこで選択したレコードにリンクする子テーブルのレコードをフォームの右側にサブフォームで表示させたいのですが、リストボックスでレコードを選択できません(クリックしても反転しません)。でもレコード移動ボタンを押すと、リストボックス内の該当レコードがちゃんと反転し、右側のサブフォームにも正しく反映します。 リストボックスのプロパティはくまなく見ましたがそれらしい設定項目はみつかりませんでした。どこを直せばよいのでしょうか。

  • また、ACCESS2000ですけど。

    先日の質問(MSアプリの1366)も解決しないうちに、恐縮なのですが、 先日のフォームにタグコントロールをつけまして、別のサブフォームを 表示させることにしました。 内容は検索なのですが、単票フォームで表示させたのち、 1レコードを選び、ダブルクリックで変更フォームを開くように したいのですが、単票フォームでどのレコードをダブルクリックしたか 解る関数ってなんでしょう?

  • Accessサブフォームの表示について

    はじめまして、yossy136kgと申します。 Microsoft Access2003のメインフォーム、サブフォームに関して下記の件、ご教授願います。 メインフォーム、サブフォームを作成しリンクして、あるテーブルのレコードをサブフォームに表示されることが確認できている状況です。 サブフォームのRecordSourceに設定しているテーブルに【複数件レコードがある】状態に対して、検索条件に満たない場合空の状態でサブフォームは表示出来ています。 確認したいことは、サブフォームのRecordSourceに設定しているテーブルが【0件(レコードがない)】の状態に対して、サブフォームを空の状態で表示することは出来ますでしょうか? 現状、サブフォームは非表示となっています。 ※ダミーデータを入れてそれを表示対象とするしかないのでしょうか? 何かご不明な点がありましたご指摘ください。 以上、宜しくお願い致します。

  • ACCESSの表形式で、レコードをクリック→詳細を表示させたい

    表題の通りなのですが、ACEESSで、表形式でレコードを表示させています。 これらの詳細を書いたものを、別フォームで作成しています。 要はこの2つを、 表形式のどこかにボタン配置→そのボタンをクリックすると、別フォームで該当テーブルが起動され、見ることができる、 ということを行いたいと思っています。 これらを行うことはできるのでしょうか。 また、できるならその方法をご教授頂けませんでしょうか。 どうぞよろしくお願いします。

専門家に質問してみよう