#589 日付に対応した曜日を出力するには?(その2) レポート、VBA

レポートのページヘッダーなどに、「1」〜「31」の日付およびそれらに対応した”曜日”を出力したい場合、日付については固定的なラベルコントロールを配置することで済みますが、曜日については毎月異なる配置となるため、VBAのプログラムを用いるなどして動的に設定してやる必要があります。

ここでは、VBAのプログラムを使って、テキストボックスの「書式」プロパティを利用して曜日を出力する例を紹介します。

テキストボックスは元々は空欄(コントロールソースなし)でデザインします。そこにプログラムを使って日付(具体的な年月日)を代入していきます。もちろんそのままでは日付が出力されてしまいますので、あらかじめ曜日用のテキストボックスの書式プロパティの値を「aaa」と設定しておきます。それによって各日付の曜日だけが出力されるという仕組みです。


  1. まず次のようなデザインのレポートを用意します。
    レポートのデザイン
    日付についてはあらかじめ「1」〜「31」を標題とするラベルコントロールを配置しておきます。また、曜日の出力用に同じく31ケのテキストボックスコントロールを配置しておきます。曜日のテキストボックスについてはプログラムでのループ処理をしやすくするため、「txtYobi1」〜「txtYobi31」といったネーミングにしておきます。


  2. すべての曜日出力用のテキストボックスの「書式」プロパティを「aaa」に設定します。
    書式プロパティを設定


  3. ページヘッダーセクションの「フォーマット時」イベントプロシージャを次のようにします。もしページごとに対象年月が変わらなければ、レポートの「開く時」イベントを使ってもかまいません。またここでは「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

実行例:
実行例
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved