>0のまま終わって
レポート内にPagesを表示する所が無いためです。テキストボックスを
ページヘッダ等に設け、コントロールソースには "=[Pages]" とし、
可視を"いいえ"にします。非表示ですがPagesを参照するので、Pagesが
0のまま(設定しない)ということが防げます。
先のプログラム例では最終ページの最終行で下線がでない可能性が
あります。(最終ページの行数が少ない場合)
レポートのレコードソースを"SELECT 1 AS 固定,* FROM ~"に変更し、
固定でもグループフッタを設けます。固定は定数なので、最終行後に
1回だけ生成されます。つまり、グループ化で、「固定」「K」の順に
指定し、それぞれにグループフッタを設けます。中身は直線です。
Dim 最大行数 As Long
Dim 行数 As Long
Dim 直前フッタ As Long
Private Sub ページヘッダーセクション_Format(~)
行数 = 0 '行数をクリア
End Sub
Private Sub 詳細_Format(~)
If Me.Pages = 0 Then
'最初にページあたりの行数を調べておく
If Me.Page = 1 Then 最大行数 = 最大行数 + 1
End If
行数 = 行数 + 1
End Sub
Private Sub グループフッター1_Format(~)
If Me.Pages = 0 Then
Cancel = 1 'Pages調査中はフッタを生成しない
Else
'最下行より前はフッタを生成しない
If 行数 < (最大行数 - 1) Then Cancel = 1
End If
直前フッタ = Cancel '直前にフッタを生成したかどうかを記録
End Sub
Private Sub グループフッター0_Format(~)
'最終行のフッタと最下行のフッタが重複しない処置
If 直前フッタ = 0 Then Cancel = 1
End Sub
私なら、Lineのような動的手段は用いず、次の方法にします。
(1)レポートのデータで一意で、昇順になっている項目(以下、K)を
指定して、グループフッタを作り、横線を置く。
(2)レポートの内部プログラム
Dim 最大行数 As Long
Dim 行数 As Long
Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)
行数 = 0 '行数カウンタをクリア
End Sub
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
If Me.Pages = 0 Then
'初回フォーマット時に行数/ページを求めておく
If Me.Page = 1 Then
最大行数 = 最大行数 + 1
End If
End If
行数 = 行数 + 1 '現在の行位置を更新する
End Sub
Private Sub グループフッター0_Format(Cancel As Integer, FormatCount As Integer)
If Me.Pages = 0 Then Exit Sub
'ページ内の最終行でなければ、このセクションを生成しない。
If 行数 < (最大行数 - 1) Then Cancel = 1
End Sub
考え方としては以下の通りです。
(1)Me.Pages = 0
全ページ数を求めるため、一通り明細行をFormatしますが、その途中
ではPagesが確定していないので0になっています。
(2)Me.Page = 1
1ページ目で何回Formatされるか数えます。これが最大行数です。
実際はFormatした後で、ページをはみ出すかどうかがチェックされ、
はみ出さなければPrintされ、はみ出せばPrintされません。
従って、カウントした値は実際はページ当たりの行数+1です。
(3)If 行数 < (最大行数 - 1) Then Cancel = 1
行数(ページ内の行位置)が最終行位置でなければ、フッタの生成を
キャンセルします。このセクションにある線も作成されません。
上記条件以外(最終行)の場合はフッタの生成をキャンセルしない
ので、このセクションにある線も作成されます。
但し、フッタが線だけ(高さが非常に低い)とした時の考え方です。
最大行数を数えている間はフッタはキャンセルされないので、
「はみ出し」のチェックはフッタ込みで調べられます。実際のFormat
では最終行だけフッタが出るので、キャンセルされたフッタの高さの
合計が明細行1行分の高さ以上ですと、「最終行」の判断を間違う
可能性があります。
フッタが作成されるかどうかで、ページ当たりの行数が変わる
お礼
ありがとうございます! 教えていただいた内容で下線を実現することができました! ページあたりの行数を配列に持たせ 最終ページは結局、Me.Page = Me.Pagesの時のフッタ判断を If 行数 < (最大行数) にしてラインを生成しました。 レコードソースを変更し、ということもできるのですね。 今回はとても勉強になりました。 詳しくありがとうございました。 ただ、今回の帳票に関しては・・・ 詳細_Printにて、前の明細と同じであった場合 txt項目A.visible = Falseにするという設定を行っていました。 ※txt項目A は印刷時拡張 ON そのため、初回フォーマット時には当然 txt項目A.visible = Falseを考慮したページカウントをしないため ページあたりの最大行数、及び、総ページ数が正しく取得できていませんでした。 表示させたいレイアウトがグループで表現できなかったため 上記手段を取ったのですが色々無理させすぎですね。。 もし上記設定をふまえた最大行数の取得が可能であれば ご教授いただきたいとは思いますが、 今回はご丁寧にありがとうございました。 とても満足しています。