OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

MS-Accessでのレポート印刷について

  • 困ってます
  • 質問No.230302
  • 閲覧数363
  • ありがとう数4
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 77% (114/147)

MS-Access97を使用しております。早速質問させていただきます。
売上データから請求書を発行するシステムを作っているのですが、たとえば
請求書をページプリンタへ印刷する場合、1枚目を「請求書」2枚目を「同控え」3枚目を「納品書」としたいのですが・・・。それぞれ3種類のレポートを作成し、請求書を発行するフォームから発行する条件をあたえ、コマンドボタンに3枚を順に印刷するコードを書いたのですが、これでは最初に1枚目をすべて印刷し、次に2枚目、次に3枚目という順序で印刷されてしまいます。
発行する客先が多くなるほど、印刷された用紙を手作業で並べかえなければならず大変不便です。
そこで、最初の1件目(お客)を1、2、3枚印刷し、続けて2件目(次のお客)を1、2、3と印刷(以後繰り返し)できるようにするにはどうしたらよいのでしょうか?
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.4
レベル14

ベストアンサー率 51% (1179/2272)

こんにちは。
yoishoさんのおっしゃる通り、ADOは97では使えません。
質問文を見落としてました。
次のようにDAO版に修正して下さい。

まず、VBEの参照設定で「Microsoft DAO 3.6 Object Library」にチェックがなければ、チェックします。

cnとrsのかわりに、dbとrsを使います。

宣言を入れかえます。
Dim db As DAO.Database
Dim rs As DAO.Recordset

レコードセットの作成を入れかえます。
Set db = CurrentDb()
Set rs = db.OpenRecordset("顧客テーブル", dbOpenDynaset)

抽出条件はそのままでいいです。

検索部分を次のようにします。
'1回目の検索
rs.FindFirst criteria
If rs.NoMatch Then
  '終了
  Exit Sub
Else
  Do Until rs.NoMatch
    *** ここに印刷処理を書く(Forループの中身だけ) ****
    Filterの抽出条件は、"顧客ID = " & rs!顧客ID
    (印刷処理)
    ************************************************
    '2回目以降の検索
    rs.FindNext criteria
  Loop
End If

rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
お礼コメント
aikun

お礼率 77% (114/147)

ご連絡が遅くなりました。
早速ためしてみます。いろいろありがとうございました。
投稿日時 - 2002-03-11 10:47:21
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル14

ベストアンサー率 51% (1179/2272)

こんにちは。maruru01です。 毎回客一人だけを抽出してレポートのソースに設定して、Forループで回せばいいと思います。 客総数をAllCountとして、 For i = 1 To AllCount   1枚目用レポート名.Filter = "(抽出条件)"   1枚目用レポート名.FilterOn = True   DoCmd.OpenReport 1枚目 ...続きを読む
こんにちは。maruru01です。

毎回客一人だけを抽出してレポートのソースに設定して、Forループで回せばいいと思います。

客総数をAllCountとして、

For i = 1 To AllCount
  1枚目用レポート名.Filter = "(抽出条件)"
  1枚目用レポート名.FilterOn = True
  DoCmd.OpenReport 1枚目用レポート名, acViewNormal
  2枚目用レポート名.Filter = "(抽出条件)"
  2枚目用レポート名.FilterOn = True
  DoCmd.OpenReport 2枚目用レポート名, acViewNormal
  3枚目用レポート名.Filter = "(抽出条件)"
  3枚目用レポート名.FilterOn = True
  DoCmd.OpenReport 3枚目用レポート名, acViewNormal
Next i

このままだと、紙は3枚目が一番上になると思うので、プリンタのオプションで変えるなり、上のコードの順番を変えるなりして下さい。
では。
補足コメント
aikun

お礼率 77% (114/147)

おはようございます。
早速ためそうとやりかけたのですが、ちょっと上記コードで質問なんですが、
 1枚目用レポート名.Filter = "(抽出条件)" ←この抽出条件の具体的な記述はどう書けばよいのでしょうか?ちなみに、請求書の元になるクエリーに以下の抽出条件を設定います。
「日付」・・・Between[Forms]![条件フォーム]![開始日]AND[Forms]![条件フォーム]![終了日]
「客先」・・・Between[Forms]![条件フォーム]![開始客先]AND[Forms]![条件フォーム]![終了客先]
条件フォームに日付、客先(コード番号)をそれぞれ設定し、レポートを印刷するスタイルです。
ご教授いただければ幸いです。
投稿日時 - 2002-03-07 09:49:02
お礼コメント
aikun

お礼率 77% (114/147)

ご連絡ありがとうございます。
早速ためさせていただきます(結果は明日になると思います)。
取り急ぎ御礼まで。
投稿日時 - 2002-03-06 18:40:06

  • 回答No.2
レベル14

ベストアンサー率 51% (1179/2272)

再びmaruru01です。 ADOのレコードセットを使用しましょう。 元のテーブルを[顧客テーブル]、その中にフィールド[顧客ID](数値型)、[日付](日付型)があるとします。 [印刷]ボタンのクリックイベントに、 Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim condHiduke As String Dim co ...続きを読む
再びmaruru01です。

ADOのレコードセットを使用しましょう。
元のテーブルを[顧客テーブル]、その中にフィールド[顧客ID](数値型)、[日付](日付型)があるとします。
[印刷]ボタンのクリックイベントに、

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim condHiduke As String
Dim condKyakuID As String
Dim criteria As String

'抽出条件の設定
condHiduke = "(日付 BETWEEN #" & [Forms]![条件フォーム]![開始日] & "# AND #" & [Forms]![条件フォーム]![終了日] & "#)"
condKyakuID = "(顧客ID BETWEEN " & [Forms]![条件フォーム]![開始客先] & " AND " & [Forms]![条件フォーム]![終了客先] & ")"
criteria = condHiduke & " AND " & condKyakuID

'レコードセットの作成
Set cn = CurrentProject.Connection
Set rs = New ADODB.Recordset
rs.Open "顧客テーブル", cn, adOpenKeyset, adLockReadOnly

'1回目の検索
rs.Find criteria, 0, adSearchForward
If rs.EOF Then
  '終了
  Exit Sub
Else
  Do Until rs.EOF
    *** ここに印刷処理を書く(Forループの中身だけ) ***
    Filterの抽出条件は、"顧客ID = " & rs!顧客ID
    (印刷処理)
    ************************************************
    '2回目以降の検索
    rs.Find criteria, 1, adSearchForward
  Loop
End If

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

レコードセットのOpenやFindメソッドについては、ヘルプを参照して下さい。
なお、私はAccess2000で、しかも試していないので、動作するかどうかはわかりません。
では。
お礼コメント
aikun

お礼率 77% (114/147)

丁寧にご説明いただきありがとうございます。
ここまで書いていただければなんとかできそうです。
早速ためしてみます。
投稿日時 - 2002-03-07 13:05:25
  • 回答No.3
レベル12

ベストアンサー率 63% (325/508)

せっかくの回答に水を差すようで申し訳ありませんが、Access97は、ADOをサポートしていません。(ADOが使えるのは Access2000からです。) いま、ちょっと時間を取れなくて、自分では具体的なアドバイスをできないのに、こんなことを申し上げるのは恐縮なのですが・・・。 ...続きを読む
せっかくの回答に水を差すようで申し訳ありませんが、Access97は、ADOをサポートしていません。(ADOが使えるのは Access2000からです。)

いま、ちょっと時間を取れなくて、自分では具体的なアドバイスをできないのに、こんなことを申し上げるのは恐縮なのですが・・・。
お礼コメント
aikun

お礼率 77% (114/147)

アドバイスありがとうございます。
投稿日時 - 2002-03-11 10:48:32
  • 回答No.5
レベル14

ベストアンサー率 51% (1179/2272)

ちょっと気になったので。 参照設定のDAOのバージョンは3.6ではないかも知れません。 とにかく自分が使っているのが、2000で97が手元にないので確認してませんが。 では。
ちょっと気になったので。
参照設定のDAOのバージョンは3.6ではないかも知れません。
とにかく自分が使っているのが、2000で97が手元にないので確認してませんが。
では。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ