お世話になります。AccessのレポートにSUM関数を使った集計帳票が有るのですが、全てのマスが空欄「不要な帳票」の物も現在印刷しております。この不要な帳票を印刷しないで済む方法は、ないでしょうか?印刷プレビューに出て来なくする方法をご教示下さい。このレポートは、変更を加える事が出来ない為、可能であればvbaで有れば幸いです。宜しくお願い致します。
お世話になります。AccessのレポートにSUM関数を使った集計帳票が有るのですが、全てのマスが空欄「不要な帳票」の物も現在印刷しております。この不要な帳票を印刷しないで済む方法は、ないでしょうか?印刷プレビューに出て来なくする方法をご教示下さい。このレポートは、変更を加える事が出来ない為、可能であればvbaで有れば幸いです。宜しくお願い致します。
印刷プレビューを呼び出す前後で直接外すのは難しいでしょう。
変更を加える事が出来ないようになっているのであれば、例え可能であったとしてもレポートに変更を加えるVBAは控えたほうがよろしいのではないかしら?
ご返答有難う御座います。テキストファイルにvbaのコードを貼り付けて、標準モジュールに貼り付けて実行を考えていましたが、特殊なイベントをハンドルする必要がある場合は、許可を貰えば可能です。変更が難しいのは、レポートを構成する要素でテーブル、クエリ、レポートは、難しいです。
因みに、この様な無駄紙を発生させたくない場合、一般的には、どの様な手法を取るのでしょうか?
レポートが元々空欄マスありきになっていて、問題が発生している場合、そうならないように新しいレポートを作成するのはどうでしょう?
レポートのレコードソースに元々不要なものが含まれていて、問題が発生している場合、レコードソースを遡って、フォーム・クエリ・テーブルを改善するかな。
ご返答有難う御座います。レポートは、空欄ありきになっています。そのレポートは、お客様の要望の構成になっており、いじる事が出来ません。総数量欄が空欄のページの取得が出来るだけでも助かるのですが、難しいでしょうか?
あー確かに。すごくわかるんですけど、経験不足などでこの回答は難しいです。
hatenaさん、hirotonさん、skさん・・・だったかな、もっと詳しい回答者の方々、お願い♪
要件が不明瞭ですね
何がよくて何がダメなのかわかりません
お客様の要望で無駄紙なのでなくしてもいい・なくしたいなのでしょうか?
すべて空白でも必要な書類というものもあるので、ここまでの話では、手を入れてはダメなのでは?と思います
普通、出力不要なモノはレコード単位で出力を制限します(データベースなので)
これを制御するならクエリです(または、そもそも数量のないものはテーブルに記録されないので出力されません)
レポートの書式を一定に保つならば
余白に応じて行数指定無く用紙の最後まで罫線を出力する(hatena chipsさん)
書式を一定に保つ手法はアプローチがいくつかあるので使いやすいものを検討すると良いです
これは「レポート」を変更(改修)することになります
上述した通り、そもそも存在しないものが出力されている状態が疑問です。何かそうしなければならない理由とそれを実現するために構築したレポートの仕様があるはずです
特殊な事情があるのであれば状況や仕様の説明がなければ解決案も出せません
各ページに出力される項目が固定ならば、事前にその項目のグループで集計を行って、出力のあるグループだけをクエリで抽出すれば実現できると思います
ACCESSはデータベース管理ソフトです。データを効率的に管理、運用するために、テーブル、クエリ、フォーム、レポートを相互に連携させながら適切なデータ構造の構築、操作の制限、処理の最適化を行っていきます。これらを「変更できない」では何もできません。「ACCESS」がどのようなアプリケーションなのか、正しい理解と、お客様とのすり合わせを行って、何をしたいのか、何故それがダメなのか、本当にそれが望んでいることなのか見極めてください
hirotonさんの回答でほとんど網羅してますが、少し補足を。
標準モジュールから、プレビューされたものを制御することはできないでしょう。
イベントをハンドルすることが可能なら、レポートの「フォーマット時」イベントで
Cancel = True とすれば、そのセクションの出力をキャンセルできますので、それを使うことができるかもしれません。
ご返答誠に有難う御座います。無駄紙は、いつも廃棄しており、経費節減の為何とかならないかと考えていました。総数量の座標が空欄の時をvbaやCOM等で取得しvbaで具現化できればと考えていました。vbaは、accessから独立しておりクエリ等を弄るのでは無く違った方法で出来るのではと考えておりましたが、もし可能であっても相当難しそうですね。
レポートにいっさい手を付けることができないという状況でしょうか。
私が提案したレポートのイベントを利用することも含めて。
そもそもなぜ、空欄のページで出るのか、その仕組みが不明です。データがないものは出力されないのが通常ですので、なんらかの特別の方法をつかっていると思うのですが、どのような方法を使っているのか提示できませんか。
レポートのレコードソースのクエリにも手を付けられないのでしょうか。
抽出条件を設定することで、空欄の出力を抑制できるのなら、
DoCmd.OpenReport の引数にフィルターを設定できるので、それを利用できるかもしれません。
あるいは、空欄になるページが事前に取得できるなら、DoCmd.PrintOut で印刷するページ数を指定できるので、空欄以外のページを印刷するようにはできます。
どちらにしても、提供されている情報からは、これ以上の具体的な提案は難しいですね。
現状、手作業で無駄紙を破棄しているのなら、
手作業にはなりますが、プレビューで無駄紙のページ数を確認して、印刷するときに無駄紙を除いたページを指定して印刷すれば、用紙の無駄遣いは抑制できますね。
レポートを一切触る権利が当方には有りません。当方が、作ったレポートでは無い為でかつ長年そのフォーマットで運用してきた為です。空欄が出るのは、お客様が休業日で注文が無かった場合発生し、レポートにある総数量を求めるSUM関数が0の時空欄になります。ですので、受注次第で総数量が0の時は変動し、無駄紙となります。帳票の構造は、テーブルに注文のあったメーカーの注文数をフォームを通してテーブルに入力していく構造です。総数量の合計0を取得できればよいのですが。毎日の印刷枚数は、200前後で平日は、無駄紙が余り発生しないのですが、連休が絡むと細々と発生します。
DoCmd.OpenReport の引数のフィルターに合計が文字列0を指定すれば出来るのか試してみます。ありがとうございました。
SUM関数の集計がレポートのレコードソースのクエリにあるのなら望みはありますが、
レポート内のテキストボックスで=Sum([フィールド名])などとしている場合は、
レポートを一切触る権利が一切ないなら無理ですね。
hatenaさんの仰る通りの状況です。もし、レポートを弄れるとしたらどうすれば良いでしょうか?
下記の2つの方法が考えられます。
ご回答有難う御座います。1の例で行くと選択クエリに合計数を求めているフィールドが2つあり、その両方が空欄の時が総合計が空欄になります。両方とも空欄になる場合どういう風に抽出条件を書けば良いですか?is nullでも非表示できますが、
フィールドの構成を変えない場合の記述の仕方がわかりません。ご教授頂けますと幸いです。
レポートのレコードソースのクエリのSQLを提示してもらえますか。
あと、レポート上のSum関数が設定してあるコントロールのコントロールソースに設定してある式、そのコントロールが設定してあるセクション名、レポートのグループ化/集計の設定も提示してもらえますか。
ご返答ありがとうございます。クエリのSQLは、SQLビューをスマホで写真撮った物をアップしても良いですか?
SQLはSQLビューで全選択してコピーして、貼り付けてください。
貼り付ける場合は、Markdown記法のコードブロックにしてください。
やり方は下記で説明していますので参照してください。
Microsoft Access 掲示板 の使い方 Microsoft Access 掲示板 - zawazawa
あと、レポートのデザインビューのスクリーンショットを「画像アップロード」してください。
会社のパソコンからは、他サイトに書き込み出来ない為、スマホの画像をコピーして貼り付けてみます。当方は、デスクワークは、殆どしていません。ですのでお時間を頂く事になります。宜しくお願い致します。
hatena様
スマホの画像でのsql読み上げは、これが限界です。すみません。画像はこの様な感じでよろしいでしょうか?
やはり難しいですかね
総合計のSUM関数の集計のレポートのレコードソースのクエリを作るしか手が無いようなので諦めます。有難う御座いました。