• 締切済み

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