レポートのページヘッダーなどに、「1」〜「31」の日付およびそれらに対応した”曜日”を出力したい場合、日付については固定的なラベルコントロールを配置することで済みますが、曜日については毎月異なる配置となるため、VBAのプログラムを用いるなどして動的に設定してやる必要があります。
ここでは、VBAのプログラムを使って、テキストボックスの「書式」プロパティを利用して曜日を出力する例を紹介します。
テキストボックスは元々は空欄(コントロールソースなし)でデザインします。そこにプログラムを使って日付(具体的な年月日)を代入していきます。もちろんそのままでは日付が出力されてしまいますので、あらかじめ曜日用のテキストボックスの書式プロパティの値を「aaa」と設定しておきます。それによって各日付の曜日だけが出力されるという仕組みです。
- まず次のようなデザインのレポートを用意します。
日付についてはあらかじめ「1」〜「31」を標題とするラベルコントロールを配置しておきます。また、曜日の出力用に同じく31ケのテキストボックスコントロールを配置しておきます。曜日のテキストボックスについてはプログラムでのループ処理をしやすくするため、「txtYobi1」〜「txtYobi31」といったネーミングにしておきます。
- すべての曜日出力用のテキストボックスの「書式」プロパティを「aaa」に設定します。
- ページヘッダーセクションの「フォーマット時」イベントプロシージャを次のようにします。もしページごとに対象年月が変わらなければ、レポートの「開く時」イベントを使ってもかまいません。またここでは「dtmDate」という変数に今日現在の日付を代入していますが、この部分をフォームのテキストボックスを参照して代入するなどのコードに書き換えれば、いろいろ応用も利きます。
Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)
Dim dtmDate As Date
Dim intDay As Integer
dtmDate = Date
For intDay = 1 To 31
If intDay <= Day(DateSerial(Year(dtmDate), Month(dtmDate) + 1, 0)) Then
'月末日以前の日付の場合
Me("txtYobi" & intDay) = DateSerial(Year(dtmDate), Month(dtmDate), intDay)
Else
'月末日よりあとの日付の場合
Me("txtYobi" & intDay) = Null
End If
Next intDay
End Sub
実行例:
|