- ベストアンサー
別レポートで合計値を表示する方法
- 別のレポートに配置してある合計値を表示する方法をお教えください。
- 「R_イベントB」に、「R_イベントA」に配置してある「イベントA合計」の値を表示したいです。
- ご教示いただけると幸いです。
- みんなの回答 (18)
- 専門家の回答
質問者が選んだベストアンサー
訂正です。 No17の真ん中あたりで、 >「R_イベントB」のレコードソースにすることはできます。 は、 「R_イベントB」の「R_イベントB」の「イベントA合計リンク」の コントロールソースにすることはできます。 です。
その他の回答 (17)
- piroin654
- ベストアンサー率75% (692/917)
「R_イベントA」のレコードソースがフォームやクエリの 込み入った計算や集計をしたものである場合や、レポート上で 同様に計算や集計を行ったものが合計として表示される仕組みならば 「R_イベントA」を開くことで「イベントA合計」という結果を 求める必要があります。 したがって、VBAで「R_イベントA」を開きデータを確定し、 結果を「R_イベントB」に渡す必要が出てきます。 あるいは、コードでそれらの計算ができるならばコードでの 計算結果を「R_イベントB」にコードで渡すことになります。 この場合は「R_イベントA」を開く必要はないでしょう。 また、もし単に「R_イベントA」のレコードソースが何の加工も していないテーブルならばクエリで集計結果だけを取り出し、それを 「R_イベントB」のレコードソースにすることはできます。ただし、 レポートが受け入れてくれればですが。たとえば、「R_イベントA」の レコードソースを「T_イベントA」という名前のテーブルとします。 テーブルのフィールドに質問で提示されている「参加者」があるとします。 データ型は数値とします。以下のようなSQL文のクエリ、 SELECT Sum(T_イベントA.参加者) AS 参加者の合計 FROM T_イベントA; を作り、その名前を「Q_イベントA合計」とします。そして、 =DLookUp("参加者の合計","Q_イベントA合計") を「R_イベントB」の「イベントA合計リンク」プロパティでコントロールソース に設定します。これでレポートが受け入れれば「R_イベントA」を開かずに データが表示されるはずです。 どうしても「R_イベントA」を開いてデータを確定する必要があるならば、 フォームの「R_イベントB」を開くボタンクリックのイベントで、 Private Sub コマンド1_Click() DoCmd.OpenReport "R_イベントA", acViewPreview DoCmd.Close acReport, "R_イベントA" DoCmd.OpenReport "R_イベントB", acViewPreview End Sub のようにして「R_イベントA」を開いて閉じて、データを確定させて、 「R_イベントB」を開くということもできますが、ただしうまくいけば ですが。一応確認はしていますが。もちろんこの場合は「R_イベントB」 のイベントA合計リンク」プロパティでコントロールソースをコードで 設定する場合です。
- piroin654
- ベストアンサー率75% (692/917)
たびたびすみません。 No15のコードの中で、 Me!総合計.ControlSource = "=" & [varNum] & "" となっていましたが、 Me!イベントA合計リンク.ControlSource = "=" & [varNum] & "" に訂正します。テキストボックスの名前が間違っていました。
補足
piroin654さん、何度も何度もお世話になり大変ありがとうございます。 おかげさまで、今度は代入できるようになりました。本当にありがとうございました。 「R_イベントB」を印刷する時は先に「R_イベントA」を開いて、次に「R_イベントB」を開くモジュールを作成したいと思います。 誠に勝手ながら再度ご質問ですが、「R_イベントA」を先に開かずに、直接「R_イベントB」を開いて代入する方法はあるのでしょうか? 何度も申し訳ございませんが、ご教示をよろしくお願いいたします。
- piroin654
- ベストアンサー率75% (692/917)
No14の訂正です。 エラー処理がうまく機能しないので、以下のように してみてください。 Private Sub Report_Open(Cancel As Integer) If IsEmpty(varNum) Then Exit Sub End If If IsNull(varNum) Then Exit Sub End If If varNum = "" Then Exit Sub End If Me!総合計.ControlSource = "=" & [varNum] & "" End Sub 「R_イベントA」を開かずに、いきなり「R_イベントB」を開いた時の エラー処理です。
- piroin654
- ベストアンサー率75% (692/917)
「R_イベントB」を開くときのイベントで、 コントロールソースを変更します。 Private Sub Report_Open(Cancel As Integer) If Not IsEmpty(varNum) Then Me!イベントA合計リンク.ControlSource = "=" & [varNum] & "" End If End Sub これでどうでしょうか。
- piroin654
- ベストアンサー率75% (692/917)
「R_イベントB」をレポートビュー、あるいは印刷プレビュー で開いても結果はおなじですか?
- piroin654
- ベストアンサー率75% (692/917)
テキストボックスの「イベントA合計リンク」のプロパティが どのようになっているのかわからないので、 一度、【R_イベントB】の「イベントA合計リンク」を削除して 新たにテキストボックスを設定し、その名前を「イベントA合計リンク」 にして、確認してみてください。
補足
piroin654さん、こんばんは。 新たにテキストボックスを設定し、その名前を「イベントA合計リンク」にしましたが駄目でした。 varNumにはデータが格納されているのに、イベントA合計リンクのテキストボックスに代入にならないのは、代入の仕方が悪いのでしょうか。
- m3_maki
- ベストアンサー率64% (296/460)
横から失礼します。 > レポートは他のレポートの情報は参照出来ませんが、 そんことはありませんよ。 【R_イベントA】が開かれているなら 「イベントA合計リンク」 の コントロールソースを =[Reports]![R_イベントA]![イベントA合計] とするだけです。 VBA は不要です。 【R_イベントA】が開かれていないとエラー表示されます。 これを避ける必要があるなら、 「イベントA合計リンク」 の コントロールソースは空にして Private Sub レポートフッター_Format(Cancel As Integer, FormatCount As Integer) With CurrentProject.AllReports("R_イベントA") If .IsLoaded Then If .CurrentView <> acCurViewDesign Then Me.イベントA合計リンク = [Reports]![R_イベントA]![イベントA合計] Else Me.イベントA合計リンク = Null End If End If End With End Sub
補足
m3_makiさん、こんばんは。 できれば、【R_イベントA】を開かないで表示したいのでモジュールを設定しましたが、テキストボックスの「イベントA合計リンク」は 空欄となってしまいました。
- piroin654
- ベストアンサー率75% (692/917)
「R_イベントB」において、 テキストボックスの名前は、「イベントA合計」ではなく、 「イベントA合計リンク」でしたね。 ひょっとしてすべて「イベントA合計リンク」ではなく、 「イベントA合計」としていましたか。 「R_イベントB」のレポートフッターの印刷時のイベントで Private Sub レポートフッター_Print(Cancel As Integer, PrintCount As Integer) Me!イベントA合計リンク = varNum End Sub あるいは、「R_イベントB」レポートフッターのフォーマット時 Private Sub レポートフッター_Format(Cancel As Integer, FormatCount As Integer) Me!イベントA合計リンク = varNum End Sub 上記でもう一度確認してみてください。
補足
piroin654さん、何度も申し訳ございません。 やっぱり空欄となってしまいます。 一応、教えていただいた内容と同じではありますが、入力してあるモジュールをコピーしました。 ーーーーーー「R_イベントB」のモジュールーーーーーーーー Private Sub Report_Close() varNum = "" End Sub ----------------------------------------------------------------------------------- Private Sub Report_Open(Cancel As Integer) MsgBox varNum End Sub ----------------------------------------------------------------------------------- Private Sub レポートフッター_Format(Cancel As Integer, FormatCount As Integer) Me!イベントA合計リンク = varNum End Sub ----------------------------------------------------------------------------------- Private Sub レポートフッター_Print(Cancel As Integer, PrintCount As Integer) Me!イベントA合計リンク = varNum End Sub
- piroin654
- ベストアンサー率75% (692/917)
「R_イベントB」のレポートフッターの印刷時のイベントで Private Sub レポートフッター_Print(Cancel As Integer, PrintCount As Integer) Me!イベントA合計 = varNum End Sub を設定するとどうなりますか?
- piroin654
- ベストアンサー率75% (692/917)
No7の続きで、 レポートの構造が分からないので一応考えられるレポートの イベントを網羅しておきます。 「R_イベントA」のレポートのページフォーマット時のイベントで、 以下のコードを設定してみる。 Private Sub Report_Page() varNum = Me!イベントA合計 End Sub レポートを閉じるときのイベントに varNum = Me!イベントA合計 を追加して以下を設定してみる。 Private Sub Report_Close() varNum = Me!イベントA合計 MsgBox varNum End Sub どれかでデータが表示されると思いますが。
補足
piroin654さん、何度もお世話になり、ありがとうございます。 さて、お教えいただいたとおり試したところ、レポートを閉じるときのイベント「varNum = Me!イベントA合計」でメッセージボックスにデータが表示となりました。ついでに、「R_イベントB」の開くときのイベントでも試しましたが、同じようにデータが表示となりました。「R_イベントA」のレポートのページフォーマット時イベントでは、空欄でした。 しかし、肝心の「R_イベントB」に配置してあるイベントA合計リンクは、空欄のままでした。
- 1
- 2
お礼
piroin654さん、こんにちは。 おかげさまで、いずれの方法でも値が代入されました。 2パターンお教えいただきましたが、状況によっていずれかを選択したいと思います。 長文で何度もお教えいただき、本当にありがとうございました。 今後またなにかございましたら、ご教示をお願いいたします。