愚者の経験

「また今度」はほとんどこない

月別アーカイブ: 10月 2013

[Access]レポートで行を非表示にする

久しぶりの更新です。最近いそがしくて気づいたら3か月近く放置してました。
ではさっそくですがAccessネタです。

レポートで特定の行を非表示にしたい案件ってないですか?
「クエリで消したら?」という方ごもっともです。が
クエリで消せない状況に遭遇しました。

一例をあげますと
「販売した商品の合計」のような帳票があったとして、
それぞれ男性に何個、女性に何個みたいな形で出したとします。

この状況では

商品名 合計x個
——————
男性  m個
女性  n個

と出ていればいいでしょう。レポートのデザインでは
——————
商品ヘッダー
——————
商品名テキスト 合計テキスト
——————
詳細
——————
性別テキスト  数量テキスト
——————

このようにするでしょう。しかし、こういわれたらどうします?
「3行もいらない。合計うち女性の数で表示して」

案件とすればかなり妥当でしょう。
この場合男性をWhere句で消すわけにはいかないのはわかると思います。
商品名のグループヘッダーで合計個数を表すのにコントロールソースで「=sum([数量])」と
するからです。男性を消せば合計個数がおかしくなります。
「レポートを直してクエリでゴリゴリやればできる」のはわかっています!…が実際は
上のデザインで男性だけ消せばよいはずです。合計はそのままで。

需要が理解できたと思います、というわけでこうします。

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
    Me.PrintSection = (Me.性別="女性")
    Me.MoveLayout = (Me.性別="女性")
End Sub

「PrintSection」はFalseにするとそのセクション内は印刷されません。
ですがセクションの高さがそのまま出てしまいますので、さらに
「MoveLayout」をFalseにして印刷位置をもとに戻します。これで完成です。

久しぶりの投稿で結構有意義なものが書けた気がします。
というか自分に必要だったのでメモメモ。

広告