• ベストアンサー

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