- ベストアンサー
AccessVBA データの受け渡し、表示(長いです)
こんにちは。度々質問させていただき、いつもお世話になっております。 今作成しているものの流れを下に書きます。 テーブル: 「社員マスタ」、「社員マスタ_抜粋」 ※「社員マスタ_抜粋」は「社員マスタ」から最低限必要な項目だけをクエリで抜き取ったテーブルです(例えば、社員ID、氏名、所属部署など) フォーム: 「社員マスタ」(表形式)、「社員マスタ_抜粋」(表形式)、「社員マスタ_詳細」(単票形式) ※「社員マスタ_詳細」は「社員マスタ」テーブルのレコードを一件一件単票形式で見れるフォームです ●実現させたいこと 1、「社員マスタ_抜粋」フォームの中に作成した「詳細」ボタンをクリック 2、「社員マスタ_抜粋」のカレントレコードの社員CDと同じ社員CDのレコードを 「社員マスタ」から探し、「社員マスタ_詳細」フォームにて表示 ●手順2を行うプログラム手順として(自分の頭の中で) 1、「社員マスタ_抜粋」フォームよりカレントレコードの社員CDを引数として、 「社員マスタ_詳細」フォームに渡す(Docmd.OpenArgs 使用) 2、「社員マスタ_詳細」フォームロード時に引数の社員CDと同じ社員CDをもつレコードを 「社員マスタ」テーブルから検索(FindRecord?) 3、発見したレコード内容を「社員マスタ_詳細」フォームに表示 自分で言うのもなんですが、上で書いたプログラム手順はものすごく 効率が悪いのではないかと思います。 またFindRecordでの検索も、このケースに適しているのかわかりません。 プログラム作成の流れ、この部分にはこんな関数がいいんじゃないか? 等、何でも構いませんのでどなたかいいアドバイスをお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
Private Sub コマンド詳細参照_Click() On Error Resume Next DoCmd.OpenForm "社員マスタ_詳細", , ,"社員CD=" & Me.社員CD End Sub 余り、複雑な手順は必要ないです。 これで、対応する詳細情報を単票形式で表示することが出来ます。
その他の回答 (3)
- CHRONOS_0
- ベストアンサー率54% (457/838)
今考えてあおられる手順でもかまわないと思いますが 難しいことをしなくとも 詳細フォームのソースをクエリにし、社員CDの抽出条件欄に =Froms!社員マスタ_抜粋!社員CD と書くだけでいいいのでは 詳細フォームを開くボタンは社員マスタ_抜粋の詳細セクションに置きます これで全てのレコードにボタンが表示されるようになり 詳細を見たい社員のボタンを押せばそのレコードがカレントになりますから 詳細フォームはその社員のものが開きます
パラメータの一字一句は、あくまでも例示です。 ・コマンドボタンウィザードを起動。 ・[フォームの操作]-[フォームを開く]を選択。 ・該当するフォームを選択。 ・[特定のレコードを表示する]を選択。 ・関連付けるフォールドを選ぶ。 ・最後まで進む。 Private Sub コマンド74_Click() On Error GoTo Err_コマンド74_Click Dim stDocName As String Dim stLinkCriteria As String stDocName = "売上伝票" stLinkCriteria = "[ID]=" & Me![売上伝票ID] DoCmd.OpenForm stDocName, , , stLinkCriteria Exit_コマンド74_Click: Exit Sub Err_コマンド74_Click: MsgBox Err.Description Resume Exit_コマンド74_Click End Sub で、このようなコードが生成されます。 冗長ですので、次のように修正します。 Private Sub コマンド74_Click() On Error Resume Next DoCmd.OpenForm "売上伝票", , , "[ID]=" & Me![売上伝票ID] End Sub との手順を試して下さい。
- driverII
- ベストアンサー率27% (248/913)
普通 Query を使うのではないかしらん。 パラメータに社員コードを持つQueryを作って、 あ・・時間切れ
お礼
早速の回答ありがとうございます! 今書いて試してみたのですが、「OpenFormアクションはキャンセルされました」 と注意されます。これはなぜでしょうか?