• 締切済み

ACCESSのレポートで、指定した数だけラベル印刷を行うには?

クエリで作成した抽出結果を元にラベル印刷をしたいのですが、そのクエリに書かれている個数分だけラベルを作るにはどうすればいいのでしょうか? ACCESSのマクロやVBAの経験はありませんが、必要なら使ってみたいと考えています。また、プログラミングの経験はありますので、一般的な言語ならforを使えばよさそうだという気がします。ただ、どうやってその画面を出し、どのような手続きをすればいいのか全くわかりません。 アドバイス、よろしくお願いいたします

みんなの回答

回答No.10

未だに解決が導かれていないのでしょうか?

  • keikan
  • ベストアンサー率42% (75/176)
回答No.9

ちょっと遅くなったので既に解決されているかもしれませんが、通常コードから参照できるのは実際のオブジェクトになった物だけですので[個数]フィールドを配置して、非表示にしておいてください。(この際他のオブジェクトとかさなってもかまいません)これで、[個数]は印刷されずに必要な枚数印刷されるはずです。

  • keikan
  • ベストアンサー率42% (75/176)
回答No.8

コードを記述したモジュールウィンドウですね。^^;; 2003だとそこの[デバッグ]-[○○のコンパイル]を実行しておいてください。 (○○はデータベースの名前になっているかと思います)

pinsel
質問者

お礼

御礼が非常に遅くなり申し訳ありません。 実はまだエラーが出るのです。 > If maisuu >= [数量] Then のところで、私のプログラムでは個数になっていますので、[個数]に置き換えているのですが、”フィールド[個数]がありません”が出てしまうのです。 me.[個数]などともしてみましたが駄目でした。 なお、個数は印刷しませんが対象となっているテーブルの中のフィールドとして存在しています。 何度も申し訳ありませんが、よろしくお願いいたします。

  • keikan
  • ベストアンサー率42% (75/176)
回答No.7

レポートデザインにおいて、[表示]-[並べ替え/グループ化の設定]をクリック。 と、そのウィンドウが開きますので、 [フィールド/式]の項目に商品毎のIDもしくは品番等をリストから選んでください。 その項目でグループ化の設定をしたことになりますが、元々商品単位としては重複はしていないためこの時点では何も変わらないはずです。ただし今回の印刷リストの中に同じ商品が複数ある場合は1つにまとめられてしまうこともあるので注意してください。 右側の[並べ替えの順序]は昇順にでもしておいてください。 下の段に[グループヘッダー]という項目があると思いますのでそれを[はい/Yes]に設定してください。 これで、グループ化の設定は終わりですのでとりあえずこのウィンドウは閉じてもOK。 この時点でレポートのデザインの[詳細]の上の段に[品番ヘッダー](項目名+ヘッダーになっていると思います)が追加されていると思います。 このヘッダーの中にもいろいろ印刷したい物があれば項目を追加して印刷することも可能ですが今回は何もいらないのでここのヘッダーの幅を縮めて0にしてください。([詳細]項目の上の方をドラッグすると縮まります。) デザインの設定はこれで終わりです。次にコードの方に移ります。 デザインにおいて[表示]-[コード]をクリックしてください。 [Report_品番ラベルクラスモジュール]などというレポート名の付いたウィンドウが開きます。 そこに Dim maisuu As Integer をまず1行追加してください。 つぎに、デザインをクリックして、先ほど作った[品番ヘッダー]をクリックし、プロパティのイベントのタブをクリック。 [フォーマット時]の項目をリストから選び[Event Procedure]としてください。そのあと右側に[・・・]と付いたボタンをクリックしてください。 すると、先ほど開いたコードウィンドウに Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer) End Sub というのが追加されていると思います(ヘッダーの番号が違うかもしれませんが) この中間の行に maisuu = 1 を1行加えて Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer) maisuu = 1 End Sub としてください。 同様に[詳細]の[フォーマット時]にもイベントを設定して Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) If maisuu >= [数量] Then Me.NextRecord = True Else Me.NextRecord = False End If maisuu = maisuu + 1 End Sub としてください。 入力後、コードウインドウで、[デバッグ]-[すべてのモジュールをコンパイルして保存]を実行しておいてください。 入力に間違いなどがあればエラーも出るかもしれませんがよく見て直してください。 後はこのレポートをプレビューすればOKのはずです。 がんばってみてください。

pinsel
質問者

お礼

ありがとうございます。 やってみたのですが、最後のコードウィンドウというのがわかりませんでした。これかなって思う画面はあるのですが、そこには、[すべてのモジュールをコンパイルして保存]がないのです。 あと一歩のところまで来ているのに残念です。 できましたら、再度教えていただけますでしょうか? Verは、2003です。 なお、3/7まで、インターネット利用ができないかもしれませんので、お礼を書くのが遅れるかもしれません。

  • keikan
  • ベストアンサー率42% (75/176)
回答No.6

'グローバルな変数の宣言何枚印刷されたか数えるための物 Dim maisuu As Integer '商品毎のグループヘッダーを作成してください。中身はなくてかまいません。印刷枚数の初期値設定で下記のコードを入れてください。 Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer) maisuu = 1 End Sub 'Me.NextRecordが次のレコードに進むかどうか決めるプロパティーです。falseに設定すると同じレコードを繰り返します。カウントして必要回数繰り返したらTrueに設定して次のレコードに進んでください。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) If maisuu >= [数量] Then Me.NextRecord = True Else Me.NextRecord = False End If maisuu = maisuu + 1 End Sub こんな感じで行けると思います。このコードでは少なくとも1枚は印刷するので、事前にクエリーで0枚の物は省いておいてください。

pinsel
質問者

お礼

ありがとうございます。 > 商品毎のグループヘッダーを作成してください。 この意味がわかりませんので、教えていただけませんか? また、上記のコードをどこに書けばいいのか(その画面の出し方も)わかりません。お手数ですが、再度教えていただければと思います。よろしくお願いします

  • jzx90_mt
  • ベストアンサー率14% (1/7)
回答No.5

2です。 質問者さんはマクロやVBAの経験がないという事ですが 他の言語(VisualBasicやVisualC++)の経験はどうでしょうか? この質問を満足する為にはVBAを使用しないと 質問No.236714以上の複雑な結果になってしまうとおもうのですが。 ちなみにイベント系プログラムの経験が無いなら本とか 買って勉強しなおしたほうが早いですよ

pinsel
質問者

補足

実は、かなり前に一度だけACCESS応用の講習会でマクロを見たことはありますが、その後使う機会がなく忘れてしまいました。 VBは入門程度でしたら経験があります。普通のC言語しか経験はなく、VisualC++は触ったことがありません。 力技的なやり方ではなくて、まともなやり方を知りたいのですが、他の急ぎの用件に追われていて、一から勉強している時間が取れないので困っています。 この場所で、やり方を教えていただけると助かると思い質問させていただきました。 かなり複雑になると思いますが、やってみたいと思います。 よろしくお願いいたします

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

>クエリで作成した抽出結果を元にラベル印刷をしたい クエリで抽出されたレコード数分だけラベルを出力したいということですね。 クエリで抽出しているレコードとラベルのレポートに使っているレコードソースが別であるということで考えると 例えばレポートは住所・氏名などの顧客テーブルでクエリで抽出しているレコードは受注テーブル等であるとして レポートのレコードソースに使っているテーブルのフィールドとクエリで抽出しているレコードのフィールドでリレーションしているものがあればSQLスタートメントでそのクエリをテーブル追加すればリレーションによって抽出されたレコード分しか印刷されません。 リレーションしてなくても共通のフィールドがあればSQLスタートメント上でフィールド同士を連結すれば必要レコード(抽出されたレコード分)しか印刷されません。

pinsel
質問者

補足

再度のご回答ありがとうございます。 どうも説明が下手で申し訳ありません。 レポートのレコードソースはクエリで抽出した物です。別ではなくて同じものです。 商品にラベルを貼りたいのですが、同じ商品が複数あれば、複数ラベル印刷をしたいのです。 その方法として、クエリに個数フィールドをつくり、その数値の分だけラベル印刷したいのです。例えば商品1の個数が2なら2枚分、商品2の個数が5なら5枚分という具合です。現状ではすべて1枚ずつしか出てきません。とりあえずの処置として先に書きました質問No.236714で対応しておりますが、もっと良い方法を知りたいのです。 よろしくお願いいたします。

  • keikan
  • ベストアンサー率42% (75/176)
回答No.3

アクセスのレポートにおいては、もととなるクエリーで抽出したレコードの数だけ印刷されます。 クエリーの抽出結果が1件であれば1件分の印刷、 クエリーの抽出結果が100件であれば100件分の印刷をおこないます。 デザインにおいては通常レポートの[詳細]の部分が自動的にレコードの数だけ繰り返されて印刷されます。 同一のデータを複数回印刷する場合は印刷指示の時点で、枚数を設定する必要があります。

pinsel
質問者

お礼

質問の意味がわかりにくくて申し訳ありません。 個数フィールドがあり、その数値の分だけラベル印刷したいのです。商品1の個数が2なら2枚分、商品2の個数が5なら5枚分という具合です。現状ではすべて1枚ずつしか出てきません。 過去のNo.236714の質問者の方と同じ状況です。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=236714 同じ方法で、解決できるのですが、もっと良い方法がありそうなので、質問させていただきました。 よろしくお願いいたします。

  • jzx90_mt
  • ベストアンサー率14% (1/7)
回答No.2

クエリー結果に発行枚数が記載されているという事でしょうか?返答No1さんと同様に説明が足りないと思われます。 フォームを使用しているのであれば発行枚数を画面に 代入してマクロの繰返し機能で印刷すればVBAを使わずに 済むと思いますが・・・

pinsel
質問者

お礼

説明不足で申し訳ありません 過去のNo.236714の質問者の方と同じ状況です。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=236714 同じ方法で、解決できるのですが、もっと良い方法がありそうなので、質問させていただきました。 マクロの繰り返し機能を使ったことがありませんので、教えていただけますでしょうか?よろしくお願いいたします

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

>クエリで作成した抽出結果を元にラベル印刷をしたい そのクエリを元にラベルを印刷するレポートを作ればできます。 >そのクエリに書かれている個数分だけラベルを作る・・ 意味が分かりにくいのですがクエリで抽出されたレコード分だけと言うことでしょうか? そのクエリを元に作ったレポートもしくはラベル印刷のレポートのレコードソースにそのクエリを指定し印刷する項目のフィールドがあっていればクエリで抽出されたレコード分しか印刷されません。 レポートの作り方は新規作成で宛名ラベルウィザードを使いそのクエリを元にすればすぐ出来ます。 質問の内容と違うようでしたらゴメンなさい。

pinsel
質問者

お礼

早速の回答ありがとうございます。 印刷するレポートはすべてできています。 複数印刷の意味をうまく書けていませんでした。 過去のNo.236714の質問者の方と同じ状況です。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=236714 同じ方法で、解決できるのですが、もっと良い方法がありそうなので、質問させていただきました。 よろしくお願いいたします

関連するQ&A

  • Access2003 ラベルに印刷する元データの変更方法

    Access2003を利用しています。 クエリで抽出したデータがいくつかあって、それぞれ同じ大きさのラベル用紙に、同じ項目、同じ形式で印刷したいと思っています。 クエリ毎にラベル印刷の設定をするのは手間がかかります。 1つのラベル印刷設定に対して、リンクされている元データを簡単に変更して印刷することは可能でしょうか? 何か簡単な方法がありましたら教えてください。 分かりづらい点がありましたら補足致しますのでご指摘ください。 よろしくお願いしますm(__)m

  • アクセスでの宛名ラベル作成

    お世話になります。 アクセス(WINXP アクセス2002)で住所録を作成しました。 クエリで抽出したデータを元に宛名ラベルを作りたいのですが、 ウィザードで作成されたラベルは1枚に複数レコードが入るラベルです。 1つのレコードで1枚の宛名ラベルを作成したいのですが・・・。 1枚の宛名ラベルに10枚ラベルシールがあるとしたら、10枚全て 同一のものを作成したいのです。 エクセルデータを元にワードの差込印刷だと出来るのですが・・・。 アクセスのみで行いたいので困っています。 宜しくお願いします。

  • ACCESS ラベルの枚数を指定して印刷したいんですが。

    ACCESS2003で荷物の送り状を作っています。 フィールドには、宛先名、住所、個数、重量などの情報を入れますが、 これを利用して、荷物を発送するときのラベルを作りたいのです。 ラベルの発行枚数を入力すると、レポートにその分のラベルが印刷されるようにしたいのですが、どのようにしたらよいのでしょうか。 初心者です。どうぞよろしくお願いいたします。

  • AccessのVBAでレポートの印刷が出来ない

    こんばんは、Kapaといます。 Access2003のVBAで注文データを印刷しているのですが、 うまく、印刷されないで困っています。 最近、注文データからクエリーを2つ使い(どちらも選択クエリーで集計) レポート印刷していますが、VBAから自動で呼び出すと印刷されず、 ステップで1行ずつ行うと印刷されます。 なんとかVBAで印刷ができるようにしたいので、アドバイスをいただければ 幸いです。 よろしくお願いします。

  • Access2000レポートについて

    Access2000で担当者別顧客名簿を作成しています。担当者別なので顧客の重複があります。 クエリで抽出してレポートのラベル印刷をしたいのですが、顧客の重複している場合は、1ラベルだけ印刷したいのです。テーブルの削除はしてはいけないのです。できる方法ご存知の方お願いします。 また、顧客名の重複がある場合チェックが自動的に入る方法もありましたらお願いします。

  • アクセス2003でレポート印刷について。

    いつもいつもお世話になっています。 アクセス2003で月間の抽出結果一覧がある帳票フォーム(選択クエリがレコードソースです)があり、印刷ボタンでその一覧のレポートを印刷したいと考えています。 そのフォームを開く時に、抽出条件として西暦と月を入力するのですが、そのレポート(同じ選択クエリがレコードソース)を印刷するときも再度西暦と月を指定しなければいけません。この年、月の入力を一度ですませるにはどのようにしたらよいでしょうか? どなたかよろしくお願いいたします。

  • Accessでの宛名ラベルの印刷について

    Access2003で抽出した1件の住所録データを 宛名ラベル2列x6段のすべてに印刷させたいのですが 方法がよくわかりません。 教えていただけませんか。

  • AccessのデータをExcelテンプレートに出力・自動印刷したい

    Access2000を使っています。 クエリで必要なデータだけをフォーム上に抽出した後、フォーム上のコマンドボタンをクリックすることで、Excel2000で作成したテンプレートに出力・自動印刷したいのですがこんなことできますか?できるのでしたら方法を教えてください。マクロでもいいのですが、できればVBAのコードで教えていただければ助かります。 よろしくお願いします。

  • アクセスのレポートで宛名ラベルを作成したいのですが・・・

    アクセスのレポートで宛名ラベル(ヒサゴA4に12ラベル)を作成したいのですが、ページ設定で、用紙サイズを指定し作成できないようです。wordでは、差込印刷で作成したのですが、SQLデータベースのデータをアクセスで つなぎ、必要なデータ(取引先、郵便番号、住所等)で選択クエリを作成し、それを差込印刷機能でもってきたのですがwordを開いて編集するとすぐ、固まってしまいます。アクセスのレポートで作成できれば良いのですが・・ 良い方法があれば教えてください。

  • 宛名ラベル印刷について

    こんにちは! 早速ですが、アクセスで教えていただきたいことがあります。 お客様の住所等をを宛名ラベルに印刷する際、数が少ないので ラベルの下の方がどうしても余ってしまい、もったいないので これを次に印刷する時に使いたいのです。 印刷する際、ラベルのどの部分に印刷するか選べるように することってできないでしょうか? できたとして、VBAでプログラム…ですよね? 私はまだVBAは超初心者なので、できるだけ わかりやすく教えていただけないでしょうか? (勝手な言い分ですみませんxxx) よろしくお願いします!