• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access2010でのレポートプレビュー表示)

Access2010でのレポートプレビュー表示

このQ&Aのポイント
  • Access2010でレポートのプレビュー表示でフォームの値が設定されない問題について
  • Access2010を使用している場合、レポートのプレビュー表示でフォームに入力されている値が表示されない問題が発生しています。
  • 具体的な流れとしては、レポートをプレビュー表示で開く際にフォームの値をレポートにセットする必要があるのですが、バージョンアップした場合にこのセットが正しく行われないようです。

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

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

補足を拝見し、全体の流れがつかめましたが。 2002でこの方法が成り立っていたのが不思議な 感じがするのですが、むしろ偶然にPCのスペック、 あるいはPCの環境で成り立っていたか、あるいは、 プレビューとデザインビューのどさくさにまぎれて エラーの出る前にデータをねじ込んだ、という ような感じです。 普通、   DoCmd.OpenReport "レポート名", acViewPreview, , , acHidden(質問中の2)   Call Set_Value(obj)(質問中の3)   DoCmd.OpenReport "レポート名", acViewDesign, , , acHidden(質問中の4) のところで、プレビューしたレポートを 閉じずに同じ名前のレポートをデザインビューで 開こうとするとエラーが出るものなのですが。 ############################################ 1.開いているレポートを一度閉じる。 2.レポートをプレビュー表示で開く(非表示状態)。 3.フォームのテキストボックス等に入力されている値をレポートにセット。 4.レポートを1度デザインビューで開く(非表示状態)。 5.レポートをプレビュー表示で開く。 Sub Get_Preview(obj As Object)   DoCmd.Close acReport, "レポート名", acSaveNo(質問中の1)   DoCmd.OpenReport "レポート名", acViewPreview, , , acHidden(質問中の2)   Call Set_Value(obj)(質問中の3)   DoCmd.OpenReport "レポート名", acViewDesign, , , acHidden(質問中の4)   DoCmd.OpenReport "レポート名", acViewPreview(質問中の5) End Sub Sub Set_Value(obj As Object)   With Reports("レポート名")     .Txt_Employee = obj("Txt_Employee")     (中略)   End With End Sub ########################################## 上記の、Get_Preview において、 レポートに直接データを渡すのではなく、 パブリック変数に格納して、それを レポートが開かれれる時に、レポートの セクションのフォーマット時に受け取るように すればいいのでは、と思います。 たとえば、標準モジュールに Public strDataOne Public strDataTwo Public strDataThree Public strDataFour    ・    ・    ・    ・ のどのように、必要なだけパブリック変数を 設定します。そして、 Sub Set_Value(obj As Object)     '変数の初期化     strDataOne = ""     strDataTwo = ""     (中略)     '変数へのデータの格納     strDataOne = obj("Txt_Employee")     strDataTwo = obj("Txt_Old")     (中略) End Sub のように設定します。 次に、レポートのモジュールに、たとえば データを受け取るテキストボックスが レポートヘッダにあるならば、レポートヘッダ のフォーマット時のイベントで、 Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)   Me!txDataOne = strDataOne   Me!txDataTwo = strDataTwo   Me!txDataThree = strDataThree   (中略) End Sub そして、Get_Preview の中の一部をコメントアウトまたは、削除 Sub Get_Preview(obj As Object)   DoCmd.Close acReport, "レポート名", acSaveNo(質問中の1)   'DoCmd.OpenReport "レポート名", acViewPreview, , , acHidden(質問中の2)   Call Set_Value(obj)(質問中の3)   'DoCmd.OpenReport "レポート名", acViewDesign, , , acHidden(質問中の4)   DoCmd.OpenReport "レポート名", acViewPreview(質問中の5) End Sub のようにすれば、大幅な改造は避けることは出来ます。

hu2ki
質問者

お礼

教えていただいた方法を試してみたところ、うまくいきました。 ありがとうございます。

その他の回答 (2)

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

No1です。 そもそも、質問の中の 1.開いているレポートを一度閉じる。 2.レポートをプレビュー表示で開く(非表示状態)。 3.フォームのテキストボックス等に入力されている値をレポートにセット。 4.レポートを1度デザインビューで開く(非表示状態)。 5.レポートをプレビュー表示で開く。 ←3でセットしたはずのフォームの値が表示されない という流れはそれぞれ何を意味しているのか わからないので、単に、フォームのテキスト ボックスの値を、レポートの非連結のテキス トボックスに表示するならば、フォームの ボタンクリックのイベントで、レポートを 開き、VBAでレポートにデータを表示する、という ことを簡単にNo1で述べたものです。 なお、当然ながらNo1のコードはレポートに 設定するものだということは間違わないで ください。 No1のそれぞれのイベントは、レポートを デザインビューで開き、レポートヘッダ、 あるいは詳細と表示してあるコントロールの 上で右クリックし、プロパティからそれぞれで イベントを選択して、コードを設定します。

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

2002ではフォームの値をレポートの コントロールにどのように渡していたのか、 書かれていませんし、レポートのどこに 何のコントロールに表示するのか何も 書かれていないので、こちらで、設定します。 たとえば、レポートのヘッダ部分に テキストボックスあるとします。ここに レポートを開いたときにフォームの テキストボックスの値を表示したい というのであれば、レポートヘッダの フォーマット時のイベントで、 Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer) Me!テキスト0 = Forms!フォーム名!テキスト0 End Sub あるいは、レポートの詳細にあるテキストボックス ならば、詳細のフォーマット時のイベントで、 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) Me!テキスト1 = Forms!フォーム名!テキスト0 End Sub では、どうですか。 ところで、 >4.レポートを1度デザインビューで開く(非表示状態)。 は、何の為に?何かのコントロールでもこのときに くっつけるのですか?

hu2ki
質問者

補足

ご回答ありがとうございます。 また、説明不足であったのに丁寧な説明ありがとうございます。 フォーマット時のイベントというのは知りませんでした。 調べてみます。 >フォームの値をレポートのコントロールにどのように渡していたのか 標準モジュールに以下の関数「Set_Value」を作成して渡しています。 引数のobjはフォームです。 複数のフォームで同様の処理を行うため、 標準モジュールを使用しているのだと思います。 Sub Set_Value(obj As Object)   With Reports("レポート名")     .Txt_Employee = obj("Txt_Employee")     (中略)   End With End Sub >4.レポートを1度デザインビューで開く(非表示状態)。 >は、何の為に? コメントには「データを取得できない為、デザインモードで最初に開く」 とありました。 私もよくわかっていません。 処理の流れについても補足します。 フォームには「プレビュー」ボタンがあり、Clickイベントから、 以下の「Get_Preview」関数を呼び出しています。 引数のobjはフォームです。 フォームの種類によって処理が分岐するのですが、 開くレポートが違うだけで、処理は同じなので省略しています。 Sub Get_Preview(obj As Object)   DoCmd.Close acReport, "レポート名", acSaveNo(質問中の1)   DoCmd.OpenReport "レポート名", acViewPreview, , , acHidden(質問中の2)   Call Set_Value(obj)(質問中の3)   DoCmd.OpenReport "レポート名", acViewDesign, , , acHidden(質問中の4)   DoCmd.OpenReport "レポート名", acViewPreview(質問中の5) End Sub 長くなってしまいましたが、補足は以上です。

関連するQ&A