4.万年カレンダーのこと
【ビジネス帳票スケジュールのVBA】
[戻る]
■概要説明
- 下図は、万年カレンダーと呼ばれている物です。
7列を表示出来る枠を作り、その枠をずらす事により年中使えるカレンダーです。
しかしこのカレンダーは、全て大の月で表示されます。
ワープロでカレンダーを作るのは、結構面倒です。この様な万年カレンダーを保存しておいて7列を切り出して貼り付けると便利です。
但し小の月や2月は不要な31日等を削除するのを忘れないこと。
- Accessでは、下図のようにラベルを使い1.と同様に万年カレンダーを保存してコピーアンドペーストしてワープロのような使い方が出来ます。
- AccessのVBAを使えば自動的にカレンダーを作成してくれます。
標準ツールのActiveXコントロールのカレンダーを貼り付けた物です。
名前を付け表示月を指定します。
名前をCalとしたら
Cal.Yrar = 2001
Cal.Month = 7 と指示すれば
2001年の7月のカレンダーが表示されます。
- 自由なカレンダーフォームを作りたい時は自分で作成するほか無いですね
2っのカレンダーを作りましょう。
(1)普通のカレンダーの様に曜日位置が決まっているカレンダー
(2)スケジュール表のようにどの月も1日から表示するカレンダー
■(1)曜日位置が決まっているカレンダーの作成。
曜表示をラベルで作成します。
日付欄は、非連結テキストボックス(コントロールソースの無い物)を図の様に縦に37個並べそれぞれ名前を付け、可視=「いいえ」にします
非連結テキストボックスの名前は「日1」〜「日37」とか「テキスト_1」〜「テキスト_37」等と連番を付けます。
月初=DateSerial(Year([指定日]),Month([指定日]),1)
'月初日のシリアル値を求めます。
月末=DateAdd("m",1,DateSerial(Year([指定日]),Month([指定日]),1))-1
'翌月の1日から1日引いたつまり末日
月日数=DateDiff("d",[月初],[月末])+1 '指定日の月の日数
曜日=DatePart("w",DateSerial(Year([指定日]),Month([指定日]),1),2)
'1日の週数
For K = 曜日 To 月日数+曜日 '開始曜日から末日まで
Me("日" & K).Visible = True '可視にします
Me("日" & K) = K - 曜日 + 1 '日付欄に日数を表示
Next
応用問題 この例は、開始曜日が月曜日ですが日曜日に変更してみよう。
■(2)月の1日から表示するカレンダーの作成。
日付欄をラベルで作成します。
曜日欄は、非連結テキストボックス(コントロールソースの無い物)を図の様に31個並べそれぞれ名前を付け,可視=「いいえ」にします。
名前は「日1」〜「日31」とか「ラベル1」〜「ラベル31」等と連番を付けます。
(1)と同様に
月初=DateSerial(Year([指定日]),Month([指定日]),1)
'月初日のシリアル値を求めます。
月末=DateAdd("m",1,DateSerial(Year([指定日]),Month([指定日]),1))-1
'翌月の1日から1日引いたつまり末日
月日数=DateDiff("d",[月初],[月末])+1
'指定日の月の日数
曜日=DatePart("w",DateSerial(Year([指定日]),Month([指定日]),1),2)
'1日の週数
For K = 1 To 月日数 '1日から末日まで
Me("ラベル" & K).Visible = True '日付欄を可視にします
Me("曜" & K).Visible = True '可視にします
Me("曜" & i) = Format(DatePart("w", DateSerial(Year([指定日]), Month([指定日]), K)), "aaa") '曜日欄に曜を表示
If Me("曜" & i) = "土" Then
Me("曜" & i).ForeColor = RGB(0, 128, 64)
Me("ラベル" & i).ForeColor = RGB(0, 128, 64)
End If
If Me("曜" & i) = "日" Then
Me("曜" & i).ForeColor = RGB(255, 70, 70)
Me("ラベル" & i).ForeColor = RGB(255, 70, 70)
End If
Next
曜日欄のプロパティーの書式が"aaa"なので 月 火 等と表示されます。
又曜日欄のプロパティーの書式に"ddd"と記入すると Mon Tue 等と表示されます。
これでカレンダーの骨格が出来ました。
■(3)祝日の表示をするルーチンを作る。
祝日表示は、祝日テーブルからDLookup関数で参照する方法もありますが、「祝日」と言う名前のコンボボックスを貼り付け
値集合ソースに祝日テーブルを指定します。
祝日テーブルは「祝日コード」「祝日」「標題」の3っのフィールドがあります。
「祝日」を参照するのでコンボボックスの連結列を2にします。
Dim P As Integer
For P = 0 To 14 祝日テーブル全てチェックします。
If Month([指定日]) = Val(Left([祝日].ItemData(P), 2)) Then
If DatePart("w", DateSerial(Year([指定日]), Month([指定日]), Day(Right([祝日].ItemData(P), 2) + 1))) <> 1 Then
Me("ラベル" & Val((Right([祝日].ItemData(P), 2)))).ForeColor = RGB(255, 70, 70)
Me("曜" & Val((Right([祝日].ItemData(P), 2)))).ForeColor = RGB(255, 70, 70)
Else
祝日が日曜日かどうか判断しもし日曜日の時翌日月曜日を祝日色にします。
Me("ラベル" & Val((Right([祝日].ItemData(P), 2)) + 1)).ForeColor = RGB(255, 70, 70)
Me("曜" & Val((Right([祝日].ItemData(P), 2)) + 1)).ForeColor = RGB(255, 70, 70)
End If
End If
Next
以上
[戻る]