すべてのグループのページ数を偶数にする

 レポートで、各グループに配布するような印刷物を両面印刷で作るときに、用紙の表面と裏面が別々のグループになってしまい具合が悪い、ということが起こります。
 対策として、グループフッターが存在するページが奇数ページ(レポート全体でみた場合のページ番号が奇数であるページ。以下同様)であるとき、改ページコントロールによりさらに1ページ増やすという方法が考えられますので、以下に例を示します。
 グループごとのページ表示など、ページの表示については一切考慮してませんのであしからず_ _)

f:id:accs2014:20180415143857p:plain:right:w300

 用いるデータはこのようなクエリです。


f:id:accs2014:20180415143854p:plain:right:w400

 このクエリをレコードソースとするA5版の簡単なレポートです。
 グループ番号をグループヘッダー(ピンクの部分)とし、詳細セクションでそれぞれのグループに属する会員を表示しています。


f:id:accs2014:20180415155757p:plain:right:w400

 さて、デザインビューを操作してみます。
 まずグループフッターを設けます。プロパティについては名前を「グループフッター1」、改ページを「カレントセクションの後」とします。
 ただしこれだけでは2つのグループが別々のページに分離されるだけで、両面印刷の表裏になることは避けられません。
 そこでグループフッター内に改ページコントロールを置きます。名前は「改ページ」とします。
 なるべくデザインに影響を与えないよう、改ページコントロールはグループフッター内の左上に置き、グループフッター自体の高さも極力低くします。
 ちなみにページヘッダーは参考用ですので必要はありません。


f:id:accs2014:20180415143848p:plain:right:w400

 次に、フォームモジュールに以下のようなコードを記入します。



Option Compare Database

Private Sub グループフッター1_Format(Cancel As Integer, FormatCount As Integer)

    If Me.Page Mod 2 = 1 Then
    Me.改ページ.Visible = True
    Else
    Me.改ページ.Visible = False
    End If

End Sub

 グループフッターが奇数ページにあるなら改ページを有効に、偶数なら無効にしています。
 これにより結果的にすべてのグループのページ数が偶数となります。


f:id:accs2014:20180415143845p:plain:right:w400

 再度印刷プレビューを見てみます。
 最初のグループ「ぞうさんチーム」の最後のレコードと、グループヘッダーの始まり(直ちに改ページされているので見えない)は3ページ目(奇数)にあります。


f:id:accs2014:20180415143919p:plain:right:w400

 次の4ページ目を見ると、改ページコントロールのはたらきによりグループフッター(改ページ後の部分)が表示されています。グループ全体が偶数ページになっていることがわかります。


f:id:accs2014:20180415143916p:plain:right:w400

 2番目のグループ「キリンさんチーム」の最後のページは8ページ目(偶数)にありますので、グループフッター内での改ページは行われません。グループのページ数はやはり偶数ページ(8-4=4)です。


 さて、お気づきのように上記の方法ではグループごとのページ数を直接数えてはいません。当該グループの末尾が偶数ページであり、かつ、前のグループの末尾も偶数ページなのだからグループのページ数は偶数であるはずだ、という理屈です。
 その辺りに不安を覚える場合は、何らかのチェックを加えることも一考すべきかと思います。グループごとにページ数をカウントするのも難しくないと思いますし、より簡単な方法としてはグループヘッダーが偶数ページになっていないかのチェックを加える方法も考えられます。後者の具体的な例として(超適当でスミマセンが)上記のコードに次のようなコード(グループヘッダーの名前が「グループヘッダー0」の場合)を加えておき、プレビューで一度最終ページまで飛んでみることでチェックできます。

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

    If Me.Page Mod 2 = 0 Then
    MsgBox (Me.Page & "ページ目からのグループ開始が発見されました")
    End
    End If

End Sub

 末尾になりますが、改ページにより完全に空白のページが生じる場合に、プリンタの設定(空白ページを印刷しない)により当該ページがスキップされてしまうことがありますのでご注意ください。