🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

3189閲覧

ACCESS フォームのデータを1件ずつレポート出力したい

meronpansuki

総合スコア12

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2019/11/22 05:20

前提・実現したいこと

フォームのデータを1行ずつ読み、「キャンセル区分」がnullか
nullじゃないかでデータを分けて、
nullならば、キャンセルでないときのレポート、
nullでないならば、キャンセルのレポートを出したいです。

発生している問題・エラーメッセージ

キャンセルかキャンセルでないかの判別はできるのですが、 レポートがキャンセルでない方とキャンセルの方1枚ずつしかでません。 そこのプログラムを通ってはいますが、最初の1枚以外はプレビューできません。 また、印刷するとどちらも合わせて1枚しか印刷されません。 どこを直したらよいのでしょうか、すみませんが、よろしくお願いします。

該当のソースコード

'****************************** Private Sub 出力ボタン_Click() '****************************** Me.Refresh sql = "SELECT 受注№,受注明細№" sql = sql & " FROM 商品T" sql = sql & " WHERE (((商品T.出力チェック)=Yes))" Set rs = CurrentDb.OpenRecordset(sql, dbOpenSnapshot) If rs.BOF = True Then MsgBox "出力するデータにチェックを付けてください" End If Do Until rs.EOF 検索受注№ = rs![受注№] 検索受注明細№ = rs![受注明細№] sql2 = "UPDATE 商品T SET チェック1 = Yes" sql2 = sql2 & " WHERE 受注№ = '" & 検索受注№ & "'" sql2 = sql2 & " AND 受注明細№ = '" & 検索受注明細№ & "'" DoCmd.RunSQL sql2 sql3 = "SELECT キャンセル区分" sql3 = sql3 & " FROM 商品T" sql3 = sql3 & " WHERE 商品T.チェック1 = Yes" Set rs2 = CurrentDb.OpenRecordset(sql3, dbOpenDynaset) If IsNull(rs2![キャンセル区分]) = True Then DoCmd.OpenReport "出荷日変更レポート", acViewPreview Else DoCmd.OpenReport "出荷日変更レポート(キャンセル)", acViewPreview End If sql3 = "UPDATE 商品T SET チェック1 = No" sql3 = sql3 & " WHERE 受注№ = '" & 検索受注№ & "'" sql3 = sql3 & " AND 受注明細№ = '" & 検索受注明細№ & "'" DoCmd.RunSQL sql3 rs.MoveNext Loop End Sub

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

呈示されている情報とコードから推測すると、
やりたいことは下記のようなことでしょうか。

  1. 「商品T」テーブルの「出力チェック」にチェックが入ったレコードをレポートとして出力する。
  2. レコード毎に「キャンセル区分」がNullかどうかでレイアウトを変更したい。
  3. できれば、1つのレポートとしてプレビューしたい。

私なら、下記のような設計にします。

レポートのレコードソースを下記のよう設定します。

sql

1 SELECT * FROM 商品T WHERE 出力チェック=True;

レポートのデザインビューで主キーフィールドでグループ化してグループヘッダーを表示させる。これで、レコード毎にグループヘッダーが出力されます。

グループヘッダーに「キャンセル区分」がNullの場合のレイアウトになるようにコントロールを配置します。

詳細セクションに「キャンセル区分」に値が入っている場合のレイアウトになるようにコントロールを配置します。
詳細セクションの「改ページ」プロパティを「カレントセクションの後」に設定します。

グループヘッダーセクションのフォーマット時と詳細セクションのフォーマット時のイベントプロシージャを下記のように記述します。

vb

1Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer) 2 'キャンセル区分がNullでなければ出力しない 3 If Not IsNull(Me.キャンセル区分) Then Cancel = True 4End Sub 5 6Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) 7 'キャンセル区分がNullなら出力しない 8 If IsNull(Me.キャンセル区分) Then Cancel = True 9End Sub

このレポートをプレビュー(あるいは印刷)すれば、各レコード毎に「キャンセル区分」がNullの場合とNullでない場合で異なるレイアウトで一気に出力されます。

投稿2019/11/22 08:02

編集2019/11/22 10:16
hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

連続して印刷したいなら、acViewPreviewではなくてacViewNormalだと思いますけど。
ただ、レポート側で該当の1件だけになるような作りになっていないと駄目でしょうけど。

通常とキャンセルでレイアウトが違うなら、同一レポートに2つを配置して、片方を状態に応じてフォーマットしないみたいな感じになりそうですけど、細かい点が不明なのであまり詳細には回答し辛いですね。

追記

DoCmd系のメソッドは非同期なので、実行順序が担保されていません。
.Execute メソッドに変更してみてください。

CurrentDB.Execute sql2
とか
CurrentDB.Execute sql3
とかに。

投稿2019/11/22 05:34

編集2019/11/22 06:11
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meronpansuki

2019/11/22 05:50

回答ありがとうございます。 レポート側にも条件が付いていてそれがキャンセルとそうでない場合に 違っているので別のレポートを使いたいところです。 acViewNormalでもやはり1枚しか出ませんでした。。
meronpansuki

2019/11/22 05:54

同じキャンセルのものでも最初の1枚しかでないので、 レポートに出力するところが変なのですかね、、、。
sazi

2019/11/22 06:07

そのレポートでは商品Tはレコードソースに含まれていますか? 含まれているなら WhereConditionで "キャンセル区分=True And チェック1 = Yes" ※通常 "キャンセル区分=False And チェック1 = Yes" ※キャンセル のように指定すれば印刷するデータは限定されます
sazi

2019/11/22 06:15 編集

追記しました。 でも、印刷自体が非同期なので、WhereConditionにキーを渡すやりかたでないと厳しいかもですね。
meronpansuki

2019/11/22 06:58

含まれています! 通常とキャンセルの条件に追加しました。 acnormalで出力すると全データでました!が、previewは 最初の1つしか出ません。最初にプレビューの画面が開かれているので、 2枚目以降がエラーになっているのではないのかと思うのですが、 どうすればプレビューを全データできるのかわかりません。よろしくお願いします。
sazi

2019/11/22 07:07 編集

プレビューで開いて閉じていないから、次のopenは意味が無いでしょうね。 プレビューのウインドウが次々に開くのをイメージされているのですか? でしたら、印刷先をプリンタではなくPDFにしては如何でしょうか?
meronpansuki

2019/11/22 07:10

最後にキャンセルかどうか振り分けられたデータが一気プレビューで開かれる方がいいのですが、それもやり方がわからなくてこういったプログラムで書いてしまいました。最後にまとめてプレビューが見れるようにはなりますか、、?
hatena19

2019/12/09 12:22

> 最後にまとめてプレビューが見れるようにはなりますか、、? 私の回答がその方法なんですけどね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問