- ベストアンサー
Accessで、一覧からクリックして詳細表示したい
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
添付画像のように単一のフォームで横に表示するのは無理(左は帳票またはデータシート、右は単票です。詳細エリアに混在はできない。)だと思うのですが、上下レイアウトでよく、今ターゲットがあるレコードの詳細表示でよい というのであれば、すぐに出来ます。 方法は、 1.該当のフォームの規定のビューを「帳票フォーム」にします。 2.備考と内容フィールドをフォームのフッターなり、ヘッダーに移動します。 それ以外のフィールドは「詳細」に置きます。 完成です。 これではよろしくない、クリックして表示し、次をクリックするまでそれを保持したいというのであれば、単票形式の別フォームを準備する方法になるかと思います。 その程度なら、VBAがわからなくても、マクロでナントカなりそうですが。 流れは「閉じる(別フォームを。前の分が開いているかもしれないので)」「フォームを開く(Where条件付)」「元フォームをアクティブにする」だけ。
その他の回答 (1)
- DexMachina
- ベストアンサー率73% (1287/1744)
> このような動作をさせるプログラムを、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.」をここに記録し、それと 同時に、青枠側のサブフォームを、上記の通り再クエリ)
お礼
遅くなりましたが、皆様ありがとうございました。 使えるものに出来ました。