|
はじめまして。よろしくお願い致します。
現在、「営業日マップ」の設定をユーザーに行わせるために MonthView を
フォーム上に配置し、休日に該当する日付を太字とし、日付をクリックする
ことで 休日/営業日 を切り替えさせようと思っています。
そこで、既に用意されている営業日情報を参照して MonthView に
反映させるプロシージャを組み、UserForm_Initialize() から呼び出して
いるのですが、ひとつとして DayBold が反映されていない状態です。
どのような原因が考えられますでしょうか。
また、このような問題を解決されている方がいましたら、教授のほどを
お願い致します。
参考までに、プログラムは次のようになります。
'***************************************************************
' カレンダー初期化テスト
'***************************************************************
Private oSettings As clsSettings ' 各種設定を扱う自作クラス
Private dic As Object ' 営業日情報辞書
' [営業日辞書仕様]
' Key : #年/月/1# As Date
' Item(Key) : パラメータ As Long
'
' パラメータ
' n ビット目が 1 の場合、Key 年月の n 日が休日。0 の場合は営業日。
' ...011010 の場合、2、4、5日が休日となる。
'===============================================================
' フォーム初期化
'===============================================================
Private Sub UserForm_Initialize()
Dim i As Integer, nMonths As Integer
Dim dDate As Date, dDayFirst As Date
Set dic = CreateObject("Scripting.Dictionary") ' 辞書インスタンス化
' カレンダー表示日付範囲取得 ------------------------------------------
nMonths = MonthView.Columns * MonthView.Rows ' 表示されている月数
' 8番目の日付の年と月から最初のついたちの年月(第一表示月)を取得
dDate = MonthView.VisibleDays(8)
dDayFirst = DateSerial(Year(oDate),Month(oDate),1) ' 第一表示月
' 営業日マッピング開始 ------------------------------------------------
dDate = dDayFirst ' 一時保存用 Date を第一表示月に初期化
For i = 1 To nMonths
MapMonthBold Year(dDate), Month(dDate) ' >> 営業日マッピング
dDate = DateAdd("m",1,dDate) ' 一時 Date + 1月
Next
End Sub
'===============================================================
' 営業日マッピング
'===============================================================
Private Sub MapMonthBold(ByVal nYear As Integer, ByVal nMonth As Integer)
Dim i As Integer
Dim nDayMax As Integer
Dim lHoliday As Long ' 営業日パラメータ
Dim dFD As Date
dFD = DateSerial(nYear, nMonth, 1) ' 1日
nDayMax = Day(DateAdd("d", -1, DateAdd("m", 1, dFD))) ' 日数
' 該当年月の営業日辞書が登録されていない場合にのみ
' 辞書にパラメータを登録
' 辞書がある
If dic.Exists(dFD) Then
lHoliday = dic.Item(dFD)
' 辞書がない
Else
lHoliday = oSettings.getHoliday(nYear, nMonth)
dic.Add dFD, lHoliday
End If
' 該当年月全日付について太字設定
For i = 1 To nDayMax
' i ビット目を抽出して値が 0 以外なら休日、0 なら営業日
If lHoliday And 2 ^ (i - 1) Then
MonthView.DayBold(DateSerial(nYear, nMonth, i)) = True
Else
MonthView.DayBold(DateSerial(nYear, nMonth, i)) = False
End If
Next
End Sub
'***************************************************************
ボタンを配置し、UserForm_Initialize() で行っていることをそれに
実装してあげると、正しく太字がマッピングされます。
ステップインを行いながらウォッチウィンドウで MapMonthBold プロシージャ
内の変数を見てみたのですが、一応どの変数も正しい動きをしているようでした。
|
|