次の方法で共有

レポートで3行ずつ印刷したい

Anonymous
2012-06-26T05:27:55+00:00

レポートの細かい調整ができなくて困っています。

 教えてください。

 番号、氏名、ポイント、試合名

 というテーブルがあります。

 ソートは番号(昇順)、ポイント(降順)です。

 ポイントには1~3が入っています。

 これをこんな感じで印刷をします。(罫線と見出しは省略してあります)


番号ヘッダー         (番号ごとで改ページは「はい」)


番号    氏名


詳細


ポイント  試合名


番号フッダー


改ページ

 このレポートで同じ番号(氏名も同じですが)の人で、ポイントが3点になるまで印刷したいのです。

 人によってはポイントが3点ある人は1行で印刷がおしまいです。

 人によってはポイントの1点が3つあれば、3行印刷をします。

 ここでの問題点は、

 ・1行でも2行でも罫線は3行の表になるようにしたい。

 ・ポイントは4点以上の人もいる

 ということです。(3ポイントに該当しない人はいません)

 つまり1つで3ポイントあって、もし他に2ポイントあっても、その2ポイントは印刷をしないが表は印刷をするんです。

 また、1ポイントを4つとか5つとか取っていても、はじめの3行しか印刷をしません。

 改ページをしたあとは、次の人にしたいのです。

Option Compare Database

     Dim p As Integer 'ポイント計算用 

     Dim L As Integer '行数計算用 

     Dim hozon As Integer '番号保存用 

Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)

      p = 0 

      L = 0 

      hozon = Me.番号 

End Sub

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)

      p = p + ポイント 

      L = L + 1 

      If hozon = Me.番号 Then 

          If p <= 3 Then 

              Me.改ページ.Visible = False 

              Me.ポイント.Visible = True 

              Me.試合名.Visible = True 

          Else 

              If L >= 3 Then 

                    Me.改ページ.Visible = True 

                    Me.NextRecord = True 

              Else 

                    Me.ポイント.Visible = False 

                    Me.試合名.Visible = False 

              End If 

         End If 

      Else 

          Me.改ページ.Visible = True 

      End If 

End Sub

 このようにやってみたものの、全くうまくいきません。

 誰か教えてください。

 よろしくお願いします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2012-06-27T03:52:17+00:00

Lanevo8 さん、こんにちは。Microsoft Answers のご利用ありがとうございます。

レポートの出力で、以下のような印刷結果にする方法をお探しなのですね。

・ 条件を満たさない (3 ポイント以下のポイントに関する) レコードは空白とするが、空白と罫線は印刷したい

・ 条件を満たし、4 ポイント以上の場合も、3 ポイント分までのレコードと罫線のみ印刷する

レポートを使用すると、空白の部分を詰めてしまうため、難しいかもしれませんね。

何らかの方法はあると思いますが、今すぐにはちょっと思いつきません。

代替策ではありますが、ワークテーブルのような印刷用のテーブルを新しく作成して、印刷したいデータを追加するという方法はいかがでしょうか。

条件を満たさない場合は、空白のダミーレコードを入れる必要があるので少し手間ではありますが…

もっといい方法がありましたら、どなたでもぜひコメントしてくださいね。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

1 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2012-06-27T13:09:59+00:00

    別の投稿サイトにも同じ質問をしておいたら、返事が来ました。

    よって、すでに解決済みです。

    参考までに、このようになります。

    (レポートモジュール)


    Option Compare Database

    Option Explicit

    '定数の宣言

    Private Const cnsPageMaxRows As Long = 3 '1ページ辺りの最大行数

    Private Const cnsPointMax As Long = 3 'ポイント累計の上限値

    '変数の宣言

    Private lngPointTotal As Long 'ポイント累計カウンタ

    Private lngCnt As Long 'レコード件数カウンタ

    Private lngGroupCnt As Long 'グループ内のレコード件数

    'レポートヘッダーの[フォーマット時]イベント

    Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)

    lngPointTotal = 0

    lngCnt = 0

    End Sub

    '[グループヘッダー0]の[フォーマット時]イベント

    Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)

    lngPointTotal = 0

    lngCnt = 0

    '[テーブル名]のうち、現在の[番号]グループの

    'レコード件数を取得

    lngGroupCnt = DCount("*", "テーブル名", "番号=" & Me.番号)

    End Sub

    '詳細セクションの[フォーマット時]イベント

    Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)

    lngCnt = lngCnt + 1

    If lngCnt > cnsPageMaxRows Then

    Cancel = True

    Exit Sub

    End If

    If lngCnt < lngGroupCnt Then

    If lngPointTotal < cnsPointMax Then

    Me.ポイント.Visible = True

    Me.試合名.Visible = True

    Else

    Me.ポイント.Visible = False

    Me.試合名.Visible = False

    End If

    Me.改ページ.Visible = False

    Me.NextRecord = True

    lngPointTotal = lngPointTotal + Nz(Me.ポイント, 0)

    Else

    If lngCnt = lngGroupCnt Then

    If lngPointTotal < cnsPointMax Then

    Me.ポイント.Visible = True

    Me.試合名.Visible = True

    Else

    Me.ポイント.Visible = False

    Me.試合名.Visible = False

    End If

    lngPointTotal = lngPointTotal + Nz(Me.ポイント, 0)

    Else

    Me.ポイント.Visible = False

    Me.試合名.Visible = False

    End If

    If (lngCnt Mod cnsPageMaxRows) = 0 Then

    Me.改ページ.Visible = True

    Me.NextRecord = True

    Else

    Me.改ページ.Visible = False

    Me.NextRecord = False

    End If

    End If

    End Sub


    この回答は役に立ちましたか?

    0 件のコメント コメントはありません