アプリ版:「スタンプのみでお礼する」機能のリリースについて

イメージとしては図をご覧ください。

テーブルをサブフォームにして、フォーム内に表示(画像の左下)、
その中の詳細表示させたいレコードをクリック(もしくはダブルクリック)すると、
右のボックスに表示される、、、といった感じにしたいです。

このような動作をさせるプログラムを、VBAで作れますか?
(VBAまったくわかりません。)
表示させたい内容を別のテーブルにしてリレーションシップを設定するのがいいのかとも思いましたが、いずれにしてもVBAがわかりません。

バージョン2000です。

「Accessで、一覧からクリックして詳細」の質問画像

A 回答 (2件)

添付画像のように単一のフォームで横に表示するのは無理(左は帳票またはデータシート、右は単票です。

詳細エリアに混在はできない。)だと思うのですが、上下レイアウトでよく、今ターゲットがあるレコードの詳細表示でよい というのであれば、すぐに出来ます。

方法は、

1.該当のフォームの規定のビューを「帳票フォーム」にします。
2.備考と内容フィールドをフォームのフッターなり、ヘッダーに移動します。
それ以外のフィールドは「詳細」に置きます。

完成です。

これではよろしくない、クリックして表示し、次をクリックするまでそれを保持したいというのであれば、単票形式の別フォームを準備する方法になるかと思います。

その程度なら、VBAがわからなくても、マクロでナントカなりそうですが。

流れは「閉じる(別フォームを。前の分が開いているかもしれないので)」「フォームを開く(Where条件付)」「元フォームをアクティブにする」だけ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/05/23 20:26

> このような動作をさせるプログラムを、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.」をここに記録し、それと
 同時に、青枠側のサブフォームを、上記の通り再クエリ)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A