アクセスのMDEファイルでレポート印刷できない問題について

このQ&Aのポイント
  • アクセスのMDEファイルでレポート印刷できません。回避策を試みてもレポート内容が空になってしまいます。
  • MDEファイルからレポート印刷ができない問題について、回避策を試みてもレポートの内容が空になってしまうことがあります。
  • アクセスのMDEファイルでレポート印刷ができない問題に遭遇しました。レポート内容が空になることがあります。
回答を見る
  • ベストアンサー

アクセスのMDEファイルでレポート印刷したい。

MDEファイルからレポート印刷できません。 下記構文の下から4行目「acViewDesign」を開けないからだと思います。 回避しようと「acViewDesign」を省くようにいろいろ試みているのですが、 レポート印刷はできるようになっても、 レポート内容(詳細セクション)が空になってしまいます。 どなたかご教授くだされば幸いです。 よろしくお願いいたします。 ---------------------------------------------------------------------- Dim strDate As String strDate = "#" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "/" & Year(Me.txt日付) & "#" Sql = "SELECT * FROM q棚卸_結果表示 WHERE 日付 = " & strDate & " " & strWhere & "ORDER BY メーカー名, カナ" DoCmd.OpenReport "r棚卸_結果表示", acViewDesign [Reports]![r棚卸_結果表示].[RecordSource] = Sql DoCmd.OpenReport "r棚卸_結果表示", acViewPreview End Sub ----------------------------------------------------------------------

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

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

No6、No7と作成しておいて、何ですが。 q棚卸_結果表示を開けばそのままデータが 表示できないものであるかもしれない という前提でつくっています。いくつかの フォームなどのデータによるフィルタ がかかっているかもしれない、という ことです。 しかし、q棚卸_結果表示を単独で開けばそのまま データが表示できるものであるとするならば、 簡易な方法で言えば、やはりフィルタをレポートの レコードソースにそのままかけるのが一番ですが。 No1の考えをフィルタにするならば、 (1) レポートの作成 r棚卸_結果表示のレコードソースをq棚卸_結果表示 として、レポートをデザインビューで開き、プロパティから、 レコードソースの右端をクリックしてクエリビルダを 開き、フィールドをすべて設定し、メーカー名とカナの 並び替えを設定します。 (2) フォームの作成その(1) 新規作成から「q棚卸_結果表示」を基にして表形式 のフォームを作成します。名前を一応「F棚卸」とします。 出来たフォームをデザインビューにし、詳細のところに マウスを当て、十字になったら詳細を適当に押し下げ、 残りのラベルも詳細のところにもっていきます。 次に、以下のテキストボックス、コンボボックス、 ボタンを設定します。 txt日付 txtSchコード    (テキストボックス) txtSchSyouhinName  (テキストボックス) cmbSchMaker    (コンボボックス) cmbSchBunrui    (コンボボックス) cmd抽出      (ボタン) Private Sub コマンド20_Click() Dim strWhere As String Dim strQry1 As String 'Tレポート用の初期化のSQL文 strQry1 = "DELETE * FROM Tレポート用;" '日付が必ず入力されているものとします If IsNull(Me!txt日付) Then MsgBox ("日付が設定されていません") Exit Sub End If 'strWhereを日付から設定 'strWhere = strWhere & "#" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "/" & Year(Me.txt日付) & "#" strWhere = strWhere & "#" & Year(Me.txt日付) & "/" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "#" If Me.txtSchコード <> "" Then strWhere = strWhere & " AND 商品コード = '" & Me.txtSchコード & "'" End If If Me.txtSchSyouhinName <> "" Then strWhere = strWhere & " AND (商品名 LIKE '*" & Me.txtSchSyouhinName & "*' OR カナ LIKE '*" & Me.txtSchSyouhinName & "*')" End If If Me.cmbSchMaker <> "" Then strWhere = strWhere & " AND メーカー名 = '" & Me.cmbSchMaker & "'" End If If Me.cmbSchBunrui <> "" Then strWhere = strWhere & " AND 大分類 = '" & Me.cmbSchBunrui & "'" End If Me.Filter = strWhere Me.FilterOn = True DoCmd.OpenReport "r棚卸_結果表示", acViewPreview, strWhere End Sub (3) フォームの作成その(2) (2)とは違い、単なる単票形式では、フォームの レコードソースを設定せずに、 txt日付 txtSchコード    (テキストボックス) txtSchSyouhinName  (テキストボックス) cmbSchMaker    (コンボボックス) cmbSchBunrui    (コンボボックス) cmd抽出      (ボタン) を設定し、 (2)から Me.Filter = strWhere Me.FilterOn = True を除けば出来てしまいます。 何だかだんだん簡易になっていくような感じですが、 だいたいこのようなところです。

bell0330
質問者

お礼

No.7を元に対策し、MDEで試して不具合が無い事が確認できました。 無事、目的を達成する事ができました。たいへん助かりました。 (No.8も、勉強のために後日試してみます。) piroin654さんの大切なお時間をいただいたこと、とても感謝しています。 本当にありがとうございました。

その他の回答 (7)

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

No6の(4)のコードの途中が崩れて表示されたので (4)のところをもう一回。 (4) フォームのボタンクリック時の設定 Private Sub cmd抽出_Click() Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Dim strWhere As String Dim strQry As String 'Tレポート用の初期化のSQL文 strQry = "DELETE * FROM Tレポート用;" '日付が必ず入力されているものとします '日付が未入力ならプロシージャを終了 If IsNull(Me!txt日付) Then MsgBox ("日付が設定されていません") Exit Sub End If 'strWhereを日付から設定 strWhere = strWhere & "#" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "/" & Year(Me.txt日付) & "#" If Me.txtSchコード <> "" Then strWhere = strWhere & " AND 商品コード = '" & Me.txtSchコード & "'" End If If Me.txtSchSyouhinName <> "" Then strWhere = strWhere & " AND (商品名 LIKE '*" & Me.txtSchSyouhinName & "*' OR カナ LIKE '*" & Me.txtSchSyouhinName & "*')" End If If Me.cmbSchMaker <> "" Then strWhere = strWhere & " AND メーカー名 = '" & Me.cmbSchMaker & "'" End If If Me.cmbSchBunrui <> "" Then strWhere = strWhere & " AND 大分類 = '" & Me.cmbSchBunrui & "'" End If Me.Filter = strWhere Me.FilterOn = True Set db = CurrentDb Set rs1 = Me.RecordsetClone Set rs2 = db.OpenRecordset("Tレポート用", dbOpenDynaset) 'Tレポート用の初期化 db.Execute strQry1 'Tレポート用への抽出レコードの書き込み If rs1.RecordCount > 0 Then rs1.MoveFirst Do Until rs1.EOF rs2.AddNew rs2!日付 = rs1!日付 rs2!商品コード = rs1!商品コード rs2!商品名 = rs1!商品名 rs2!カナ = rs1!カナ rs2!メーカー名 = rs1!メーカー名 rs2!大分類 = rs1!大分類 rs2.Update rs1.MoveNext Loop End If rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing db.Close: Set db = Nothing End Sub Private Sub cmdレポート_Click() DoCmd.OpenReport "r棚卸_結果表示", acViewPreview End Sub

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

一応、確認したので作成手順とコードを載せます。 【作成手順】 (1) レポートのレコードソース用テーブルの作成 q棚卸_結果表示で表示される全フィールドを新しい テーブルに設定し、その名前を「Tレポート用」とします。 フィールドの型はq棚卸_結果表示の基になる テーブルのフィールドの型を設定してください。 (2) レポートの作成 (1)で作成した「Tレポート用」を基に新規作成から表形式 を選択し、出来たレポートを「r棚卸_結果表示」とします。 レポートをデザインビューで開き、プロパティから、 レコードソースの右端をクリックしてクエリビルダを 開き、フィールドをすべて設定し、メーカー名とカナの 並び替えを設定します。 (3) フォームの作成 新規作成から「q棚卸_結果表示」を基にして表形式 のフォームを作成します。名前を一応「F棚卸」とします。 出来たフォームをデザインビューにし、詳細のところに マウスを当て、十字になったら詳細を適当に押し下げ、 残りのラベルも詳細のところにもっていきます。 次に、以下のテキストボックス、コンボボックス、 ボタンを設定します。 txt日付 txtSchコード    (テキストボックス) txtSchSyouhinName  (テキストボックス) cmbSchMaker    (コンボボックス) cmbSchBunrui    (コンボボックス) cmd抽出      (ボタン) cmdレポート    (ボタン) (4) フォームのボタンクリック時の設定 Private Sub cmd抽出_Click() Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Dim strWhere As String Dim strQry As String 'Tレポート用の初期化のSQL文 strQry = "DELETE * FROM Tレポート用;" '日付が必ず入力されているものとします '日付が未入力ならプロシージャを終了 If IsNull(Me!txt日付) Then MsgBox ("日付が設定されていません") Exit Sub End If 'strWhereを日付から設定 strWhere = strWhere & "#" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "/" & Year(Me.txt 日付) & "#" If Me.txtSchコード <> "" Then strWhere = strWhere & " AND 商品コード = '" & Me.txtSchコード & "'" End If If Me.txtSchSyouhinName <> "" Then strWhere = strWhere & " AND (商品名 LIKE '*" & Me.txtSchSyouhinName & "*' OR カナ LIKE '*" & Me.txtSchSyouhinName & "*')" End If If Me.cmbSchMaker <> "" Then strWhere = strWhere & " AND メーカー名 = '" & Me.cmbSchMaker & "'" End If If Me.cmbSchBunrui <> "" Then strWhere = strWhere & " AND 大分類 = '" & Me.cmbSchBunrui & "'" End If Me.Filter = strWhere Me.FilterOn = True Set db = CurrentDb Set rs1 = Me.RecordsetClone Set rs2 = db.OpenRecordset("Tレポート用", dbOpenDynaset) 'Tレポート用の初期化 db.Execute strQry1 'Tレポート用への抽出レコードの書き込み If rs1.RecordCount > 0 Then rs1.MoveFirst Do Until rs1.EOF rs2.AddNew rs2!日付 = rs1!日付 rs2!商品コード = rs1!商品コード rs2!商品名 = rs1!商品名 rs2!カナ = rs1!カナ rs2!メーカー名 = rs1!メーカー名 rs2!大分類 = rs1!大分類 rs2.Update rs1.MoveNext Loop End If rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing db.Close: Set db = Nothing End Sub Private Sub cmdレポート_Click() DoCmd.OpenReport "r棚卸_結果表示", acViewPreview End Sub 以上です。(4)のテーブルへの書き込みのところでは フィールドはこちらで推定して並べました。実際に 合わせて変更してください。

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

No4の説明で、 >q棚卸_結果表示の抽出条件でレコードを取り出し、 は、 q棚卸_結果表示を抽出条件でフィルタかけレコードを抽出し です。ちょっと言い方が変でした。

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

いろいろ検索条件がある場合に、無理にデータをレポートに 突っ込む方法を考えるよりも、レポートのレコードソースとして 必要なフィールド(もちろん型の設定も)をもった空のテーブルを 作成し、それをレポートのレコードソースにし、 q棚卸_結果表示の抽出条件でレコードを取り出し、それを 作業用テーブルにいれることを考えれば、フォームをデザインビュー にして、レコードソースを設定して・・・などのような ことは考える必要はなくなります。 作業用テーブルをTレポート用とします。 フィールドは上記の通りです。 一応概略を言いますと、 (1) q棚卸_結果表示で帳票フォームを作成 (2) 出来たフォームにテキストボックス、コンボボックス、コマンドボタン設定 (3) ボタンクリックでフォームにフィルタをかけ、抽出したデータを テーブルにエクスポート。このときのフィルタ条件は補足の条件を そのままフォームに適用。 (4) レポートを開く (5) 必要に応じて次のレポート作成のために テーブルを初期化。 このような感じです。コードは書いていませんが、 ちょっとサンプルを作って確認してみます。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

一つ気になるのは Sql = "SELECT * FROM q棚卸_結果表示 WHERE 日付 = " & strDate & " " & strWhere & "□ORDER BY メーカー名, カナ" で、ORDER BY 句の前にスペースが無いことです。(でもこの場合はエラーで止まるはず?) Sql = "SELECT * FROM q棚卸_結果表示 WH・・・の次の行で Debug.print Sql Exit Sub としてイミディエイトウィンドウ(出してなければ、Ctrl + G で出ます)に Sqlの内容が出力されてます。 このSQL文を新規クエリのSQLビューに貼り付けてみたらということです。 あるいはここにでも。 問題の切り分けのためにWhere条件を少しずつ増やして動作確認してみてもよいですね。 なお、今回の問題とは関係ないと思いますが、「SQL」はAccessの予約語です。 http://office.microsoft.com/ja-jp/access-help/HA010030643.aspx 私も変数名に結構長いこと知らずに使ってましたがエラーになった事はありませんけど一応。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

ORDER BY ・・・が無ければ、Docmd.OpenReport・・・にWhere条件を付ければ済む問題なのですけど。 q棚卸_結果表示クエリのSQL文を書き換えてしまうとか、 (過去ログで、QueryDef について調べてみてください) もっとシンプルな方法があったような気もします。 でも、その前に Sql = "SELECT * FROM q棚卸_結果表示 WHERE 日付 = " & strDate & " " & strWhere & "ORDER BY メーカー名, カナ" Debug.print Sql でSQL文の確認をするとか 新規クエリのSQLビューに貼り付けて、希望した結果が得られるか確認する方が先決です。

bell0330
質問者

お礼

nicotinism様、ありがとうございます。 私の方が素人すぎてせっかく戴いたアドバイスを有効活用できないのが 残念です。 もう少し勉強してみます。

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

MDEファイルにするとデザインビューには どう転んでもできませんから、 どうしても、レポートを開くときにレコードソースを 設定しなければならない理由がないのなら、 Month(Me.txt日付)の部分を Month(Forms!フォーム名!txt日付)などのように 他の部分も同じように変更して、レポートの レコードソースに最初から設定しておけば いいのでは、と思いますが。 strWhereの 内容はわかりませんが、このようなところです。

bell0330
質問者

お礼

piroin654様、ありがとうございます。 > Month(Me.txt日付)の部分を > Month(Forms!フォーム名!txt日付) をやってみましたが構文のエラーになってしまいました。 きっとそれだけではだめなのでしょうね。 もう少し勉強してみます。

bell0330
質問者

補足

> > strWhereの内容はわかりませんが、 > このような内容です。よい方法はありますでしょうか。。。 'WHERE条件の作成------------------------------------- If Me.txtSchコード <> "" Then strWhere = strWhere & " AND 商品コード = '" & Me.txtSchコード & "'" End If If Me.txtSchSyouhinName <> "" Then strWhere = strWhere & " AND (商品名 LIKE '*" & Me.txtSchSyouhinName & "*' OR カナ LIKE '*" & Me.txtSchSyouhinName & "*')" End If If Me.cmbSchMaker <> "" Then strWhere = strWhere & " AND メーカー名 = '" & Me.cmbSchMaker & "'" End If If Me.cmbSchBunrui <> "" Then strWhere = strWhere & " AND 大分類 = '" & Me.cmbSchBunrui & "'" End If Dim strDate As String strDate = "#" & Month(Me.txt日付) & "/" & Day(Me.txt日付) & "/" & Year(Me.txt日付) & "#" Sql = "SELECT * FROM q棚卸_結果表示 WHERE 日付 = " & strDate & " " & strWhere & "ORDER BY メーカー名, カナ" DoCmd.OpenReport "r棚卸_結果表示", acViewDesign [Reports]![r棚卸_結果表示].[RecordSource] = Sql DoCmd.OpenReport "r棚卸_結果表示", acViewPreview

関連するQ&A

  • Accessのレポート印刷について教えて下さい。

    Accessのフォームでフィルタを使い絞り込んだデータをレポートで 印刷する場合について教えて下さい。 DoCmd.OpenReport "レポート名", acViewPreview, , Me.Filter では、フォームとレポートが同じレコードソースだと使えるという事ですが、 フォームとレポートのレコードソースが別の場合はどのようにすると フィルタで絞り込んだ条件のレポートを印刷できますか? 教えて下さい。よろしくお願いします。

  • Accessのコード入力

    アクセス初心者です。 レポート内の検索結果を再びレポートで表示したいため、フォームのコードで下記のようにしたのですが、フォームで前後の文字を入れなくても検索できるようにするにはどのようにしたら良いでしょうか。 (テーブルなどで検索する時の、*a* のような感じです) DoCmd.OpenReport "R1", acViewDesign Reports!R1.FilterOn = True Reports!R1.Filter = "[a]='" & Me.テキスト1.Value DoCmd.OpenReport "R1", acViewPreview 宜しくお願い致します。

  • Accessのレポート印刷について

    Access2007を使用しています。 DoCmd.OpenReport "レポート名", acViewNormal, , Me.Filter で絞り込みをした内容のレポートで1枚目だけが印刷されるようにしたいのですが、 どうしたら良いですか? 2枚目・3枚目は印刷したくないので、1枚目だけが印刷されるようにしたいです。 よろしくお願いします。

  • ACCESSのレポートについて

    ACCESSでフォームから印刷ボタンを押すとレポートの印刷プレビューが表示されるという簡単なアプリケーションを作成したんですが、レポートの余白・向きを保存→アクセスを終了→アクセスを起動→レポートを表示→レポートを閉じる→レポートを表示という操作をすると、ページ設定で設定し保存した余白・ページの向きが元に戻ってしまいます。どうすればちゃんと保存できるのでしょうか? ちなみにDoCmd.OpenReport "hoge", acViewPreviewでレポートを表示させてます。

  • ACCESSの印刷ダイアログについて

    いつも大変お世話になっております。 レポートをFILTER(県名)で抽出した状態でプレビューしたいと思い以下のようにPGを組みました。 DoCmd.OpenReport "レポートR", acViewPreview Reports!レポートR.Filter = "[県名] Like '*" & txtbox_県名1 & "*'" Reports!レポートR.FilterOn = True プレビューはうまくいきましたが、この抽出した状態で印刷したいのですがどうすればいいのでしょうか。また、印刷の前に印刷ダイアログをだしたいと思い、 DoCmd.SelectObject acReport, "レポートR", False DoCmd.RunCommand acCmdPrint と組んだのですが全件印刷されてしまいます。 ご教授宜しくお願いします。

  • Accessを使ってレポートを印刷する際に。。。

    No.2353071の続きなのですが、 Private Sub コマンド0_Click()   DoCmd.OpenReport "レポート1", acViewDesign   Reports("レポート1").Controls("ラベル0").Caption = "AAA"   DoCmd.Close acReport, "レポート1", acSaveYes End Sub このようにすると「DoCmd.OpenReport "レポート1", acViewDesign」を実行する際に、デザインビューで開く画面が表示されるのですが、この画面を消すことはできないのでしょうか。

  • Access2003のフォームからレポートに変数を渡したいのです。

    Access2003のフォームからレポートに変数を渡したいのです。 フォームに「結果」という名前の非連結コンボボックスがあり、値集合ソースは、「"承認";"却下";"保留"」です。 フォームの印刷ボタンはクリック時のイベントに以下を設定しています。 DoCmd.OpenReport ("R_レポート名"), acViewPreview このレポートでテキストボックスに「結果」の内容を表示させたいと思います。 テキストボックスのコントロールソースに、「=[Forms]![F_フォーム名]![結果]」と入れてみましたがエラーになります。 フォームのコンボボックスの値をレポートで表示させるにはどうすれば良いのでしょうか。 ご教示ください。よろしくお願いいたします。

  • アクセスについてです(レポート)

    フォームからレポートを開く時に、 VBAでコントロールにコントロールソースを指定したいのですが どうやらエラーになってしまうようです。 フォームからではなく手動でレポートを開く場合は エラーにはなりません。 レポートのレコードソースは、T_testを指定していて、 その上にあるコントロールは非連結で指定したコントロールソースをvbaで入れたいです。 なので、レポートのLoadイベントで Private Sub Report_Load() Me.テキスト0.ControlSource = "8月" End Sub として、手動でレポートを開く分には問題ないのですが このコードのまま、フォームから Private Sub コマンド0_Click() DoCmd.OpenReport "レポート1", acViewPreview End Sub とすると、Me.テキスト0.ControlSource = "8月"で、 実行時エラー2191 印刷プレビュー時または印刷を開始した後は コントロールソースプロパティを設定できません。 のエラーが発生します。 フォームから Private Sub コマンド0_Click() DoCmd.OpenReport "レポート1", acViewDesign End Sub とすると、レポートのLoadイベントが発生しませんでした。 ご回答よろしくお願いします。

  • ACCESS でフォームフィルターをレポートに引き継ぐ方法

    こんにちは。 いつもありがとうございます。 現在、ACCESSで名簿管理ソフトを作っています。 フォームで条件を指定し、該当する人を抽出できるようになっているのですが、その条件をそのままレポートのソースに使用するにはどうれすばいいでしょうか? DoCmd.OpenReport "rpt_名簿", acViewPreview,, Me.Filter としているのですが、実行時エラー 438が出てしまいます。

  • Accessのレポートが開けません。

    いつもお世話になっております。 使用環境:Windows20000、Access2003 表題の件ですが、Accessのレポートを作成し、 メニュー画面フォームからボタンでそのレポートを 開きたいのですがなぜか開きません。 ボタンを押しても画面が真っ白になって砂時計になり、 暫くするとエラーも出ずにメニュー画面に戻ってしまうのです。 以下、ボタンが押された時のソースです。(この1行だけ) DoCmd.OpenReport "Aレポート", acViewPreview 普通にレポートをダブルクリックするとプレビューが 正常に表示されます。 一体何が原因なのでしょうか。何かエラーが出れば対処の しようもあるのですが。 どなたか心当たりのある方おられませんでしょうか。 宜しくお願い致します。

専門家に質問してみよう