• ベストアンサー

AccessVBA データの受け渡し、表示(長いです)

こんにちは。度々質問させていただき、いつもお世話になっております。 今作成しているものの流れを下に書きます。 テーブル: 「社員マスタ」、「社員マスタ_抜粋」 ※「社員マスタ_抜粋」は「社員マスタ」から最低限必要な項目だけをクエリで抜き取ったテーブルです(例えば、社員ID、氏名、所属部署など) フォーム: 「社員マスタ」(表形式)、「社員マスタ_抜粋」(表形式)、「社員マスタ_詳細」(単票形式) ※「社員マスタ_詳細」は「社員マスタ」テーブルのレコードを一件一件単票形式で見れるフォームです ●実現させたいこと 1、「社員マスタ_抜粋」フォームの中に作成した「詳細」ボタンをクリック 2、「社員マスタ_抜粋」のカレントレコードの社員CDと同じ社員CDのレコードを 「社員マスタ」から探し、「社員マスタ_詳細」フォームにて表示 ●手順2を行うプログラム手順として(自分の頭の中で) 1、「社員マスタ_抜粋」フォームよりカレントレコードの社員CDを引数として、 「社員マスタ_詳細」フォームに渡す(Docmd.OpenArgs 使用) 2、「社員マスタ_詳細」フォームロード時に引数の社員CDと同じ社員CDをもつレコードを 「社員マスタ」テーブルから検索(FindRecord?) 3、発見したレコード内容を「社員マスタ_詳細」フォームに表示 自分で言うのもなんですが、上で書いたプログラム手順はものすごく 効率が悪いのではないかと思います。 またFindRecordでの検索も、このケースに適しているのかわかりません。 プログラム作成の流れ、この部分にはこんな関数がいいんじゃないか? 等、何でも構いませんのでどなたかいいアドバイスをお願いします。

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

  • ベストアンサー
noname#22222
noname#22222
回答No.2

Private Sub コマンド詳細参照_Click() On Error Resume Next   DoCmd.OpenForm "社員マスタ_詳細", , ,"社員CD=" & Me.社員CD End Sub 余り、複雑な手順は必要ないです。 これで、対応する詳細情報を単票形式で表示することが出来ます。

noname#181362
質問者

お礼

早速の回答ありがとうございます! 今書いて試してみたのですが、「OpenFormアクションはキャンセルされました」 と注意されます。これはなぜでしょうか?

その他の回答 (3)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.4

今考えてあおられる手順でもかまわないと思いますが 難しいことをしなくとも 詳細フォームのソースをクエリにし、社員CDの抽出条件欄に =Froms!社員マスタ_抜粋!社員CD と書くだけでいいいのでは 詳細フォームを開くボタンは社員マスタ_抜粋の詳細セクションに置きます これで全てのレコードにボタンが表示されるようになり 詳細を見たい社員のボタンを押せばそのレコードがカレントになりますから 詳細フォームはその社員のものが開きます

noname#22222
noname#22222
回答No.3

パラメータの一字一句は、あくまでも例示です。 ・コマンドボタンウィザードを起動。 ・[フォームの操作]-[フォームを開く]を選択。 ・該当するフォームを選択。 ・[特定のレコードを表示する]を選択。 ・関連付けるフォールドを選ぶ。 ・最後まで進む。 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)
回答No.1

普通 Query を使うのではないかしらん。 パラメータに社員コードを持つQueryを作って、 あ・・時間切れ

関連するQ&A