#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 実行例: |
|||
|
Copyright © T'sWare All rights reserved |