ACCESSで明細を印刷する方法を教えて下さい。
利用環境はWindowsXP、ACCESSは2002 SP3です。
5000人程の利用者名データと、
利用者毎の利用履歴データ(1人あたり1~200件)が入ったテーブルがあります。
この度、各利用者宛てに明細を送ることになりました。
印刷する用紙と内容が決められていて、
A4縦の用紙の左上に送付先宛名と総ページ数を印刷する欄、
中段に明細行(15行まで)、
下段に中段と全く同じ明細行(お客様控え用)を印刷する欄を設けることになっています。
レポートやフォーム、サブレポート等を使えば実現できるのではないかと思っていますが、
Accessはテーブルと選択クエリーしか触ったことがなかく、方法が分からずに困っています。
実現したいことは上記の通り、
・用紙の左上には「宛名」を表示。明細が15行を超える人の場合、「現ページ/総ページ」も表示したい
・1件しか利用履歴が無い場合でも、人が変わればページを変えたい
・利用明細行は15行までとして、同じ人でも16行目以降は次ページにしたい(次ページで再び「宛名」を印字)
・明細行は全く同じものを上下に2個(最大15行×2になります)配置したい
です。
人ごとにページを変える方法は何とかできましたが、明細行の改ページが上手くいきません。
明細行のあるサブレポートの表示枠を小さくすると、表示を15行に抑えることはできますが、
16行目以降は印刷されず、次の人になってしまいます。
枠のサイズを変える以外にページを変える方法はありますか?
うまく説明できずに申し訳ありませんが、急に指示されたため、困っているところです。
なにとぞよろしくお願いいたします。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
前回メニュー画面の添付が出来ていなかったのであらためて添付します。
この現象はたまに発生します。 何故なんでしょうね
前回説明が足らなかったようなのであらためて
>15行分の高さのサブレポートを(2段分)用意するということでしょうか。
>下段に中段と全く同じ明細行(お客様控え用)を印刷する欄を設けることになっています。
顧客抽出TBLを基に主レポート(利用履歴RPT)
利用履歴抽出TBLを基に副レポート(利用履歴RPTSUB、利用履歴RPTSUB副)
・利用履歴RPTSUB副は利用履歴RPTSUB をコピーします。
利用履歴RPT
・ページヘッダーに送付先宛名とページ/総ページ数
ここでのページは15行単位で分割するためブロック単位でリセットされます。
最初のブロックの総ページ数は送付対象の顧客数になります
詳細欄に
・利用明細の見出しとメニューのform!メニュー!ページNo.
・利用履歴RPTSUB
・お客様控えの見出しとメニューのform!メニュー!ページNo.
・利用履歴RPTSUB副
お客様単位の総ページ数を印刷するには
顧客TBLにご利用回数フィールドを追加しこれの1/15(切上げ)を印字
No.4
- 回答日時:
お待たせしました。
サイトのご紹介有難うございます。これから見させていただきます。
>15行分の高さのサブレポートを(2段分)用意するということでしょうか。
>>下段に中段と全く同じ明細行(お客様控え用)を印刷する欄を設けることになっています。
中段の御社用と下段のお客様控え用です
> 明細に行No.が付いていれば印字対象を15以下と15超にする
> 明細に行No.が付いていなければ明細テーブルに印刷コントロールのフィールドを追加する
利用テーブルに「ご利用回数」といったフィールドを増やして
1.今までのデータはエクセルにエキスポートして、メンテして履歴IDとご利用回数だけの
テーブルにインポートし、これで利用履歴テーブルをUPDATEする
2.新しいデータは履歴登録の仕組みに組み込む
さて本題ですが
少し仕掛けをして何とかなりそうです。
ただデータを分割処理するので後で名寄せが必要です。
1.利用履歴を行No.で分割保存する利用履歴抽出TBL 追加
項目は利用履歴IDを外して他は同じ項目で主キー無し
2.利用履歴抽出TBLに対応する顧客抽出TBL
項目は顧客TBLで顧客IDの主キー設定を外し
、顧客IDのデーター型を長整数型 インデックスに重複なし
3.メインレポートの基になるテーブルを顧客抽出TBL
サブレポート1、サブレポート2の元になるテーブルを利用履歴抽出TBL
4.レポートの起動はメニューフォーム上のレポート名のクリックイベントで
データーを分割抽出してから起動する
5.その他 テーブルの項目名は適当に考えました。
*メインフォームに配置するボックス
・起動レポート名 ラベル
・ページNo.、開始No.、終了No. テキストボックス
これで起動レポート名をクリックする都度15行単位で分割してレポートして
ページNo.がカウントアップし次のクリックを待ちます。
*メインフォームのコード
Option Compare Database
Option Explicit
Private Sub Form_Load()
ページNo. = 1
End Sub
Private Sub 利用履歴発行_Click()
利用履歴発行RTN
ページNo. = ページNo. + 1
End Sub
Private Sub 利用履歴発行RTN()
終了No. = ページNo. * 15
開始No. = 終了No. - 14
DoCmd.SetWarnings False
DoCmd.RunSQL ("delete from 履歴抽出TBL ;")
DoCmd.RunSQL ("insert into 履歴抽出TBL(顧客ID,行No.,利用日,利用内容) " _
& " select 顧客ID,行No.,利用日,利用内容 from 履歴TBL where 行No. >= 開始No. and 行No. <= 終了No.; ")
DoCmd.RunSQL ("delete from 顧客抽出TBL ;")
DoCmd.RunSQL ("insert into 顧客抽出TBL(顧客ID) select 顧客ID from 履歴抽出TBL ; ")
DoCmd.RunSQL ("Update 顧客抽出TBL Inner Join 顧客TBL On 顧客抽出TBL.顧客ID = 顧客TBL.顧客ID " _
& "set 顧客抽出TBL.顧客名=顧客TBL.顧客名,顧客抽出TBL.郵便番号=顧客TBL.郵便番号 " _
& " ,顧客抽出TBL.都道府県=顧客TBL.都道府県,顧客抽出TBL.市区町村=顧客TBL.市区町村; ")
DoCmd.SetWarnings True
DoCmd.OpenReport "利用履歴RPT", acViewPreview
End Sub
動作確認しました。
ここの説明はきりがありませんので省かせていただきます。
ある程度ご理解いただけたらこのURLを付けて新規に質問されると
他の人の別のアドバイスも頂けるのでは
No.3
- 回答日時:
こんばんは、色々勉強させてもらってます。
>「任意の行で改ページをしたい」
この意味が理解できなくて飛ばしました。 何か条件があるだろうと
15行を越えると次ページと理解してよろしいですね
サブレポート(主レポート内)のプロパティーの書式タグの下の方に
印刷時拡張、印刷時縮小があります。 規定値は両方とも「はい」
このときは行数によってフレームが伸縮します。
今回は印刷時縮小は「いいえ」ですね
1)印刷時拡張「はい」のままにするとフレームが伸びて全ての明細が印字されます。
控えのサブレポートがページ内に収まらないときはサブレポート単位で次ページへ移ります。
2)印刷時拡張「いいえ」にするとフレームに入らない明細は無視されます。
サブレポートのフレーム高さを15行分にして
明細の印字対象を二つに分けて印刷しては
明細に行No.が付いていれば印字対象を15以下と15超にする
明細に行No.が付いていなければ明細テーブルに印刷コントロールのフィールドを追加する
shinkamiさん、こんばんは。
何度もありがとうございます。
> この意味が理解できなくて飛ばしました。
すみません、私の説明が下手でした。
改ページは「顧客別」「行数別」に発生させようと思っています。
同じ「顧客」でも15行を超える利用履歴をお持ちのお客様は、
1行目から15行目はでは1ページ目に印字。
16行目から30行目までを2ページ目に印字。
31行目からは3ページ目に。といった具合です。
顧客が「Aさん」から「Bさん」に変わったら、そのタイミングでまた改ページ。
「Aさん」が35行、「Bさん」が24行の明細を持っていたとしたら、
「Aさん」は4ページ(4ページ目は5行のみ)、「Bさん」は3ページ(3ページ目は4行のみ)
としたいと考えています。
社名やロゴの入った用紙が既に印刷されていて、15行分の罫線が2段分(発送用と返送用)用意されている用紙なのです。
15行分の「空の罫線」が引かれた用紙に、うまく位置を合わせて印字したいのです。
このご回答を頂いたあと、「なるほど」と思い、
http://office.microsoft.com/ja-jp/access-help/HA …
を見てみました。
確かに、「印刷時縮小」は関係がなさそうですね。
無駄な動き(行の削除)を避けるためにも、「いいえ」にしておいたほうがよさそうです。
ただ、「印刷時拡張」が知識不足のため、うまく把握できません。
「印刷時拡張」プロパティを「いいえ」にして、
15行分の高さのサブレポートを(2段分)用意するということでしょうか。
拙いながらも試してみたところ、確かに15行目までの印字になりますが、
次ページは16行目からの印字ではなく、Bさんの1行目から印刷されてしまいます。
(つまり、16行目から35行目が無視される)
もう少しお付き合い頂ければ幸いです。
特に、
> 明細に行No.が付いていれば印字対象を15以下と15超にする
> 明細に行No.が付いていなければ明細テーブルに印刷コントロールのフィールドを追加する
の部分をどう実現したらよいのかがわかりません。
明細テーブルに、顧客ごとの明細に連番を付与して、VBAで制御するということでしょうか?
お時間があるときで結構ですので、
詳しく方法を教えて頂ければ幸甚に存じます。
宜しくお願い致します。
No.2
- 回答日時:
こんなの初めてです。
苦し紛れでやりましたので、他にもっとよい方法があるかと思いますが
仕訳伝票テーブルと仕訳明細テーブルで試してみました。
1.仕訳伝票テーブルで単票形式の仕訳伝票レポートを作ります。
2.仕訳明細テーブルで帳票形式の仕訳明細レポートサブを作ります。
3.仕訳伝票レポートの必要な項目を詳細枠に移動します。
4.仕訳明細レポートサブを仕訳伝票レポートのサブとしてサブレポートツールを用いて
仕訳伝票レポートに2度縦に並べて配置します。
5.サブレポートの項目見出しは表示されませんので、仕訳伝票レポートにラベルを追加します。
※仕訳伝票テーブルと仕訳明細テーブル1:n のリレーション設定し照ります。
色々勉強させていただきました。
shinkamiさん、ありがとうございます。
大変申し訳ありませんが、ご回答頂いた方法は私でも最初から試しています。
ただしサブレポートでは改ページが制御できません。
「任意の行で改ページをしたい」と言う点については、
「わからない」というご回答ということですね。
お時間を割いて頂きありがとうございました。
No.1
- 回答日時:
レポートに関してはトップクラスの実力者 hatena さんのスーパーテクニックです。
明細を持つ伝票とその複写を同じページに2分割して表示する
http://hatenachips.blog34.fc2.com/blog-entry-233 …
ちょこっと修正すれば使えるでしょう。
bonaronさん、こんばんは。ありがとうございます。
現在の知識ではちょっと内容が難しいですが、
今日明日で頑張って理解してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(パソコン・スマホ・電化製品) Webページ印刷時にヘッダー・フッターをつけたい 1 2022/04/25 21:35
- ノートパソコン ページ番号の入れ方について 3 2023/02/16 17:11
- Excel(エクセル) エクセルの印刷範囲をページ単位で可変にする方法 3 2022/05/23 13:04
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- その他(パソコン・スマホ・電化製品) Webページの印刷 1 2023/04/17 14:01
- Excel(エクセル) Excelであるシートだけ印刷できない 1 2022/04/01 09:04
- Excel(エクセル) エクセル2013「次のページ数に合わせて印刷」が小さすぎる 9 2023/03/28 10:18
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- 電子書籍 スマホからの楽天カード支払い明細書の印刷の仕方を教えてください 5 2022/11/29 10:34
- PDF PDF作成ファイルの不具合の件 5 2022/08/15 15:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースの1要素に複数デー...
-
Access VBAでクエリーのレコー...
-
顧客IDを入力すると顧客名や住...
-
ワードでの単純作業の効率化に...
-
Accessで名寄せグループの関係...
-
テーブル1 2 3 の結合
-
Access レコードロックについて...
-
ファイルメーカーの集計につい...
-
ACCESS で マクロの中でフィ...
-
SQLの結果がNULLならタブを出す...
-
Access IF文でテーブルに存在し...
-
文字化け、記号の含まれるフィ...
-
Excel 2019 のピボットテーブル...
-
【Access】フォームで自動計算...
-
アクセスクエリの計算
-
エクセルVBAで5行目からオート...
-
列が存在しないと言われる
-
Accessでテーブル名やクエリ名...
-
「直需」の意味を教えてください
-
Oracle 2つのDate型の値の差を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access VBAでクエリーのレコー...
-
Access IF文でテーブルに存在し...
-
データベースの1要素に複数デー...
-
ワードでの単純作業の効率化に...
-
Access フォームのデータがテー...
-
ACCESS で マクロの中でフィ...
-
Accessデータベースで行と列を...
-
ワードで保存するファイル名の...
-
別のDBからテーブルをコピーす...
-
ADOでレコードを閉じるタイミン...
-
Accessで名寄せグループの関係...
-
シングルクォーテーションとダ...
-
Access 縦(行)のデータを横(列)...
-
顧客IDを入力すると顧客名や住...
-
Access クエリ このレコードセ...
-
(ACCESS)連番取得について
-
Access2000 単票フォーム上の...
-
Access 既に開いているフォー...
-
文字化け、記号の含まれるフィ...
-
Access2013VBA 複数のテーブル...
おすすめ情報