サブフォームを複数持つフォームからキーワード取得用フォームで印刷する方法

このQ&Aのポイント
  • サブフォームを複数持つフォームから、一つのキーワード取得用フォームで印刷する方法について教えてください。
  • キーワード取得用フォームに商品番号と日付を入力し、コマンドボタンを押すと、サブフォームに基本テーブルの内容と取得した日付情報が表示されるようにしたいです。
  • 印刷用フォームを作成し、それぞれのサブフォームに入力した日付情報を含む基本テーブルの内容を印刷する方法を教えてください。
回答を見る
  • ベストアンサー

サブフォームを複数持つフォームを、一つのキーワード取得用フォームから印

サブフォームを複数持つフォームを、一つのキーワード取得用フォームから印刷できますか。 印刷用フォームを作成しました。 その中には、基本情報とサブ情報1、サブ情報2…というような複数のサブフォームがあります。 基本テーブルは、 商品番号、商品名 内容 というようなフィールドがあります。   サブ1テーブルは、 商品番号、日付A サブ2テーブルは、 商品番号、日付B キーワード取得用フォームに、商品番号と日付を入れてコマンドボタンを押すと、サブフォームを複数持つフォームに、 (1)基本テーブルの内容と、 (2)それぞれのサブフォームには取得した日付の日付情報(複数レコードもあり) を入れて印刷したいのです。 こんなことは可能でしょうか。 コマンドボタンにクリック時のイベントを書けばいいような気もするのですが、方法がわかりません。 教えてください。よろしくお願いいたします。

noname#183584
noname#183584

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

情報いただきありがとうございます。 PCの不具合で遅くなりました。 >どこをどうすれば、サブクエリを日付Xで選択するように >できますでしょうか。 サブクエリとはサブフォームのレコードソースの ことですね。 検討した結果、フォームと同様に、レポートにも サブレポートを設定するのが一番自然だと思われます。 いただいた情報などでシュミレーションをして みました。二つほどあります。一つはメインレポート、 サブレポート二つの構成です。もう一つはサブレポート 二つに情報が入りきらない場合はレポートを二つに 分割するというものです。二つに分割するのは それほどでもないのでまず一つにしたものを出して みます。 そのときの概略を述べますと、 (1) キーワード取得用フォームに商品番号入力コンボボックスと 日付X入力テキストボックスと送信ボタンを設置。 コンボボックスは、値集合ソースに、 SELECT 基本テーブル.商品番号, 基本テーブル.商品名 FROM 基本テーブル; のSQL文を入れる。 列数を2。 列幅を2cm、2cm。 とする。 送信ボタンのクリックイベントを、 Private Sub 送信ボタン_Click() DoCmd.OpenReport ("レポート1"), acViewPreview End Sub とする。 (2) クエリを二つ作成。それぞれQサブ1、Qサブ2とする。 以下そのSQL文。 Qサブ1:(レポートのレコードソースにします) SELECT サブ1テーブル.商品番号, サブ1テーブル.日付A, サブ1テーブル.日付X FROM 基本テーブル INNER JOIN サブ1テーブル ON 基本テーブル.商品番号 = サブ1テーブル.商品番号 WHERE (((サブ1テーブル.商品番号)=[Forms]![キーワード取得用フォーム]![商品番号入力コンボボックス]) AND ((サブ1テーブル.日付X)=[Forms]![キーワード取得用フォーム]![日付X入力テキストボックス])); Qサブ2:(レポートのレコードソースにします) SELECT サブ2テーブル.商品番号, サブ2テーブル.日付B, サブ2テーブル.日付X FROM 基本テーブル INNER JOIN サブ2テーブル ON 基本テーブル.商品番号 = サブ2テーブル.商品番号 WHERE (((サブ2テーブル.商品番号)=[Forms]![キーワード取得用フォーム]![商品番号入力コンボボックス]) AND ((サブ2テーブル.日付X)=[Forms]![キーワード取得用フォーム]![日付X入力テキストボックス])); (3) レポートを三つ、一つはメインレポート、 メインレポート(R_全体書類): メインレポートのレコードソースを以下に設定 クエリとして保存してクエリ名でレコードソース に設定しても良いです。一応Q基本としています。 Q基本: SELECT 基本テーブル.商品番号, 基本テーブル.商品名, 基本テーブル.内容 FROM 基本テーブル WHERE (((基本テーブル.商品番号)=[Forms]![キーワード取得用フォーム]![商品番号入力コンボボックス])); メインレポートに所定のテキストボックスを配置。 レコードソースを基にコントロールソースを設定。 メインレポートに二つのサブレポートコントロール を設定。 ページフッター以下の白い余白はページフッター のほうに引き上げて余白を見えなくする。 (4) サブレポート: メインレポートと同様に作成。 それぞれのレコードソースにQサブ1、Qサブ2を設定し、 詳細の部分にテキストボックスを設定。それぞれの コントロールソースをレコードソースから設定。 ページフッター以下の白い余白はページフッター のほうに引き上げて余白を見えなくする。 ますは、このような感じでフォーム、および レポートを作成してみてください。

noname#183584
質問者

お礼

できました! 感激です! ありがとうございました!m(_ _)m とてもわかりやすく親切に、丁寧に教えていただきまして、本当に感謝です。 ここまでできると欲が出てきて、キーワード取得用フォームに商品番号が 入れられた瞬間に、動的に日付Xがリストから選択できるようになると もっと使いやすいと思ったりしています。 でも、この問題は解決しましたので別の問題として質問することにします。 (もし可能であれば、そちらの方も教えていただけると大変ありがたいです。) 本当にどうもありがとうございました。m(_ _)m

その他の回答 (1)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

確認ですが。 (1) 内容からして印刷用フォームとキーワード取得用フォーム に分離した理由はどのようなことで? (2) キーワード取得用フォームで取得したキーワードで 印刷対象となる印刷用フォームのデータはフォームに 表示されているデータ全体、あるいはその一部、 あるいはフォームに表示されているデータ以外の データを他のテーブルから取得する、など? 基本的にレポートにフォームの情報を印刷する場合、 レポートにクエリやSQL文をレコードソースとして 仕込んでおき、そのレコードソースに必要な 日付や伝票番号などの情報をパラメータ、クエリ で言えば抽出条件になりますが、の形で渡し、 レポートに表示させます。したがって、必要な 情報を何らかの形で、この場合ならばキーワード 取得用フォームで取得した情報をレポートに 渡せばいいのでしょう。 ただ直接印刷用フォームからでもいいのでは と思いますが、何らかの理由でそうしなければ ならないのらば二度手間でも実現させる手段を 考えなければならない、という感じです。 それで、 >こんなことは可能でしょうか。 よくあるやり方なので特にむつかしい仕様 が設定されていない限りできると思いますが。 単純にいえば、印刷用フォームから取り出す キーワードをキーワード取得用フォームに 渡し、それをレポートを開くイベントで レポートのレコードソースに 抽出条件として渡す、ということです。 ただ、レポートのレコードソース、あるいはコード の中の表示用データのSQL文が設定してある 場合、その抽出条件がキーワード取得用フォーム のキーワードでいい場合と、印刷用フォーム のフィールドを参照しているというキーワード が必要な場合は印刷用フォームから直接レポートに 抽出条件を渡したほうがいい場合があります。 これはケースバイケースですが。 それで、どのような回答が必要ですか。

noname#183584
質問者

お礼

アドバイスありがとうございます。m(_ _)m (1) 印刷用フォームとキーワード取得用フォームに分離した理由は、 (作っている私も初心者なのですが)使う人が二つのキーワードを 入力すれば簡単に書類を印刷できると考えたからなのです。 他に思いつかなかったので、もっと別の良い方法があれば この形にはこだわりません。 (2) 印刷用フォームは、レポートで上のことが実現できればフォームで ある必要はありません。 レポートで検討していましたが、全てを自動化することは私には 不可能っぽかったので、フォームにしておいて印刷時に手動で (チェックを入れるなど)作業が必要になるかと思い、フォームで 検討していたのです。 本来はすべてデータから判断できる内容なので、レポートで実現 できれば、そんなに嬉しいことはありません。 ということで、まずは全体書類が印刷されるレポートを作りました。 その中に、以下のような内容で印刷したいのです。 (質問時の項目立てが間違っていたので以下のように変更します) ------------------------------ 【テーブル構造】 基本テーブルは、 商品番号、商品名 内容  サブ1テーブルは、 商品番号、日付A 日付X サブ2テーブルは、 商品番号、日付B 日付X ------------------------------ 【キーワード取得用フォーム】 [1]商品番号入力コンボボックス→商品番号「001」が選択されたとします [2]日付X入力テキストボックス→日付「2010年6月5日」が選択されたとします [送信ボタン] ------------------------------ 【全体書類印刷用レポート】 ---基本情報--- (商品番号001の基本情報) 001:シャープペンシル 斬新なデザインで芯が減らないシャーペン ---サブ情報--- (商品番号001で日付Xが2010年6月5日のサブ1テーブルの日付A例) 2010年2月10日 2010年3月3日 (商品番号001で日付Xが2010年6月5日のサブ2テーブルの日付B例) 2010年2月20日 2010年4月5日 ------------------------------ こんな感じです。 今、送信ボタンには下のようなクリック時のコードを割り振ってみました。 DoCmd.OpenReport "R_全体書類", , "Q_基本レコード選択クエリ", "商品番号 = '" & Me!商品番号 & "'" すると、印刷されてくる書類には、すべてのサブデータが印刷 されています。(当然ですが) どこをどうすれば、サブクエリを日付Xで選択するように できますでしょうか。 ご教示よろしくお願いいたします。

関連するQ&A

  • Access2003で、2種類のキーワードを取得するときに2つ目を動的

    Access2003で、2種類のキーワードを取得するときに2つ目を動的にリストにしたいです。 http://okwave.jp/qa/q5912564.html こちらで解決した問題の続きになるのですが、 下のような構造で印刷できるようにはなりましたが、キーワード取得用フォームに おいて、商品番号を選択した瞬間に、全てのサブテーブルの、その商品番号がもつ 日付Xを日付X入力コンボボックスでリストにできますでしょうか。 (実際にはサブテーブルは5個あります) 可能であるならばその方法を教えてください。よろしくお願いいたします。 【テーブル構造】 基本テーブルは、 商品番号、商品名 内容  サブ1テーブルは、 商品番号、日付A 日付X サブ2テーブルは、 商品番号、日付B 日付X ------------------------------ 【キーワード取得用フォーム】 [1]商品番号入力コンボボックス→商品番号「001」が選択されたとします [2]日付X入力テキストボックス→日付「2010年6月5日」が選択されたとします [送信ボタン] ------------------------------ 【全体書類印刷用レポート】 ---基本情報--- (商品番号001の基本情報) 001:シャープペンシル 斬新なデザインで芯が減らないシャーペン ---サブ情報--- (商品番号001で日付Xが2010年6月5日のサブ1テーブルの日付A例) 2010年2月10日 2010年3月3日 (商品番号001で日付Xが2010年6月5日のサブ2テーブルの日付B例) 2010年2月20日 2010年4月5日 ------------------------------

  • 親フォームからサブフォームのレコードソースを設定

    親フォームからサブフォームのレコードソースを設定するには? フォーム1にテーブル1をドロップアンドドラッグして、「テーブル1のサブフォーム」を作成しました。 フォーム1にあるコマンドボタンから「テーブル1のサブフォーム」のRecordSourceを設定する方法を教えてください。 「テーブル1のサブフォーム」からなら Private Sub Form_Load() Me.RecordSource = "" End Sub とできるのですが、 やりたいことはフォーム1からのイベントなので 「テーブル1のサブフォーム」からのイベントは使えません。 だからってフォーム1の Private Sub コマンド2_Click() Me.テーブル1のサブフォーム.RecordSource = "テーブル1のサブフォーム" End Sub とするとコンパイルエラーになります。 良い方法があれば教えてください。アドバイスよろしくお願いします。

  • Accessのメインフォームとサブフォーム

    メインフォームのコマンドボタンからサブフォームのテーブルを操作することは可能でしょうか? 【メインフォーム】    日付[_2006/2/3]   『回数A(コマンドボタン)』    品物[_りんご]    『回数B(コマンドボタン)』    製作所[_青森]  【サブフォーム】     社員コード 所属   氏名   回数A 回数B     [_1234]  [_福島] [_山田] [_1]  [_0]     [_2345]  [_山形] [_佐藤] [_1]  [_0] とあるときに、『回数B(コマンドボタン)』をクリックすると、サブフォームの社員コード 「1234」と「2345」の回数Bに「1」(回数B+1)を入力し、回数Aを「0」(回数A-1) としたいのです。 どのようにすればいいのでしょうか? よろしくお願いします。

  • サブフォームのビューを切り替えたい

    親フォーム(フォーム1)にサブフォームとして、 テーブルをソースとするサブフォーム(テーブル1のサブフォーム)を配置しました。 親フォームからサブフォームのビューを変更したいのですが どうすればいいか教えてください。 親フォームのコマンドボタンにはそれぞれ Private Sub 単票フォームへ切り替え_Click() Me.Controls("テーブル1のサブフォーム").Form.DefaultView = 1 '帳票フォーム End Sub Private Sub 帳票フォームへ切り替え_Click() Me.Controls("テーブル1のサブフォーム").Form.DefaultView = 0 '単票フォーム End Sub としたのですが、 実行すると 実行時エラー 2136 "このプロパティを設定するには、フォームまたはレポートをデザインビューで開きます"。 となってしまいます。 Private Sub 帳票フォームへ切り替え_Click() DoCmd.SelectObject acForm, "テーブル1のサブフォーム" DoCmd.RunCommand acCmdFormView End Sub にしたところ、 実行時エラー 2489 “オブジェクト テーブル1が開いていません、” になります。 サブフォームに埋め込んでいて親フォームを開いていても 開いてない事になるのですね。 フォームビューの時に、切り替える事は不可能なのでしょうか? 帳票ビュー表示用フォーム、 単票ビュー表示用フォーム を作るしかないのでしょうか?

  • ヘッダーフォームからサブフォームを動かすVBAを組めるの?

    Access97/VBAは全然わかりません 棚と棚上の製品を管理しているDBです。ヘッダーでは棚の場所(棚1,棚2という感じです)を管理し、サブで棚上に置いてある製品番号と棚の移動記録(「前」と「現」)を管理しています。ヘッダーとサブはそれぞれテーブルも分かれています(ヘッダーテーブルとサブテーブル)。 1つの棚ナンバーに対してサブに登録される品番は通常100個位あります。お聞きしたいのは、サブの中の「前」の内容が100個の品番全て同内容だった場合の事です。サブテーブルの一番上の品番にだけ「前」のデータを入力し、ヘッダーに作った「前の一括コピー」というコマンドボタンをクリックすると、一番上の品番に入れた内容が下の99の品番の「前」部分に一斉にコピーされるようにしたいのです。以前、同一フォーム・同一テーブル内で品番も管理していた時には上手く行っていたのですが、品番をサブフォーム&サブテーブルで管理するようにしたら出来なくなってしまいました。 私がやったのは、まずサブテーブルとヘッダーテーブルを棚番号で紐付けたQuery(棚クエリー)を作り、その後ヘッダーフォーム上に作ったコマンドボタンのイベントプロシージャで「棚クエリーを見に行ってね」というVBAを組む、という方法でした。コマンドボタンをクリックすると、「qdf("p前") = Me![前]」という文が黄色くなります。コマンドボタンを置いてあるヘッダーフォームじゃなくてサブフォームを動かしたいのに「Me!」ってなってるからいけないの?それなら「You!」ならいいの?謎は深まるばかり・・・。誰か教えて!

  • サブフォームをリクエリしたい

    メインフォームのコマンドボタンを押下するとvbaを使ってテーブルのデータを更新します。 メインフォームの中にはサブフォームがあり、 そのサブフォームとテーブルがリンクしています。 サブフォームにはテーブルのデータが表示されており、 メインフォームのコマンドボタン押下→テーブルデータ更新 がされると、全て#Deletedという文字が表示されます。 なので、 Private Sub cmd_データ更新_Click() Call データ更新 Me.Controls("Fサブ").Form.Requery End Sub としたのですが、 「実行時エラー’2465’:指定した式で参照されている’Fサブ’フィールドが見つかりません。」 が発生します。 Me.Controls("Fサブ").Requery これにしても同じでした。

  • サブフォームの値をメインフォームで表示

    Accessのサブフォームの値をメインフォームで表示する方法をお教え下さい。 画像にありますように、各コントロールは以下になります。 http://upload.fam.cx/cgi-bin/img-box/th6120120093700.jpg MAIN_FORM1(このフォーム) subform_1(サブフォーム) combo1(コンボボックス) textbox1(テキストボックス) subform_1はクエリオブジェクト、「Q_月報」を呼び出し、以下のSQLでできています。 -------------------------------------------------------------------------------------------------- SELECT Format([伝票日付],"yyyy-mm") AS 月, 出庫テーブル.商品番号, 商品マスタ.商品名, Sum(出庫テーブル.数量) AS 数量の合計 FROM 出庫テーブル INNER JOIN 商品マスタ ON 出庫テーブル.商品番号 = 商品マスタ.商品番号 WHERE (((Format([伝票日付],"yyyy-mm"))=[Forms]![月報]![リスト2])) GROUP BY Format([伝票日付],"yyyy-mm"), 出庫テーブル.商品番号, 商品マスタ.商品名; -------------------------------------------------------------------------------------------------- MAIN_FORM1には下記のVBAコードが書かれています。 -------------------------------------------------------------------------------------------------- Private Sub リスト2_Click() Me!月報サブフォーム.Requery End Sub -------------------------------------------------------------------------------------------------- MAIN_FORM1を開き、コンボボックスにある日付を選択すると、日付をキーにサブフォームでrequeryされるようになっています。 わからない点は、MAIN_FORM1にtextbox1に、サブフォームの「数量の合計フィールド」の合計を表示したいと思います。 textbox1のコントロールソースに、「=Sum([Forms]![月報サブフォーム]![数量の合計])」をやりましたが、うまく表示ができません。エラーと表示されます。どのように注文フォームに表示されている、「数量の合計フィールド」の合計をテキストボックスに表示できるでしょうか?

  • Access2000 フォーム/サブフォームについて

    質問させていただきます。 フォーム/サブフォーム形式で画面を作っています。サブフォームは帳票形式で、複数のレコードを表示しており、各行の左にコマンドボタンを用意し、それをクリックすると、更新クエリー、削除クエリーが動くようにしています。 しかし、更新、削除クエリーとも ”0件のレコード”で処理が正しく動作しません。 ちなみに、両クエリの抽出条件は・・・ [Forms]![メインフォーム]![サブフォーム]![商品コード] しかし、フォームを使わずクエリーから実行する(パラメータに条件を手入力する)と正しく動作します。 記述ミスがないか何度も見返したのですが・・・。 「サブフォームの目的の行の商品コードと一致するデータを処理する」としたいのですが・・・。

  • サブフォームをリクエリするには?

    アクセスのフォームにはサブフォームがあり、 親フォームの上にあるコマンドボタンで、テーブルに対してアクションクエリでレコードの削除やレコードの更新を行います。 サブフォームにはそのテーブルをソースとしたデータを表示させているのですが、 親フォームの上にあるコマンドボタンのイベントの最後に、 Me.Controls("サブフォーム").Requery を入れても、フォームのデータが#Deletedになります。 Me.Requery でも、サブフォームのデータは#Deletedになってしまいます。 フォームを開きなおしたり、並べ替えをすればデータが表示されますが コマンドボタン押下後にイベントを実行し終わったら、サブフォームのデータも更新されたデータを表示するさせるには どうすればいいでしょうか?

  • Access フォームで条件抽出したものを印刷プレビューしたい

    条件抽出したフォームを印刷プレビューしたいのですが、プレビューすると 全データが表示されてしまいます。 出来ればフォームのままプレビューしたいのですが、この場合は、 別にレポートを作成しないとダメでしょうか? 1.メインフォームにサブフォームを組み込んであります。 2.サブフォームはクエリに関連させています。 3.コマンドボタン[印刷]で印刷プレビューを表示させたい。 メインフォーム:商品 サブフォーム:取引商品 クエリ:商品リスト -----コマンド[印刷]のイベント----- Private Sub cmdPrint_Click() '商品取引記録を印刷プレビューで開く DoCmd.OpenForm "商品", acViewPreview, Me.Filter End Sub

専門家に質問してみよう