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

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

ここでは、VBAのプログラムを使って、ラベルコントロールの「標題」プロパティを動的に設定することで、曜日を出力する例を紹介します。

ここで使うサンプルのレポートデザインは次のようなものです。
レポートのデザイン

日付についてはあらかじめ「1」〜「31」を標題とするラベルコントロールを配置しておきます。また、曜日の出力用に同じく31ケのラベルコントロールを配置しておきます。日付については操作しないので名前は何でも構いませんが、曜日のラベルについてはプログラムでのループ処理をしやすくするため、「lblYobi1」〜「lblYobi31」といったネーミングにしておきます。

そして、ページヘッダーセクションの「フォーマット時」イベントプロシージャを次のようにします。もしページごとに対象年月が変わらなければ、レポートの「開く時」イベントを使ってもかまいません。またここでは「dtmDate」という変数に今日現在の日付を代入していますが、この部分をフォームのテキストボックスを参照して代入するなどのコードに書き換えれば、いろいろ応用も利きます。

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)

  Dim dtmDate As Date
  Dim intDay As Integer
  Dim strYobi As String

  dtmDate = Date

  For intDay = 1 To 31
    If intDay <= Day(DateSerial(Year(dtmDate), Month(dtmDate) + 1, 0)) Then
      '月末日以前の日付の場合
      strYobi = Format$(DateSerial(Year(dtmDate), Month(dtmDate), intDay), "aaa")
      Me("lblYobi" & intDay).Caption = strYobi
    Else
      '月末日よりあとの日付の場合
      Me("lblYobi" & intDay).Caption = ""
    End If
  Next intDay

End Sub


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



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