Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


60117 / 76736 ←次へ | 前へ→

【21268】MonthViewのDayBoldプロパティの初期化
質問  びねがっち  - 05/1/18(火) 10:00 -

引用なし
パスワード
   はじめまして。よろしくお願い致します。

現在、「営業日マップ」の設定をユーザーに行わせるために 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 プロシージャ
内の変数を見てみたのですが、一応どの変数も正しい動きをしているようでした。

0 hits

【21268】MonthViewのDayBoldプロパティの初期化 びねがっち 05/1/18(火) 10:00 質問
【21272】Re:MonthViewのDayBoldプロパティの初期化 びねがっち 05/1/18(火) 10:41 発言
【21281】Re:MonthViewのDayBoldプロパティの初期化 びねがっち 05/1/18(火) 13:16 質問
【21282】Re:MonthViewのDayBoldプロパティの初期化 IROC 05/1/18(火) 13:26 回答
【21285】Re:MonthViewのDayBoldプロパティの初期化 びねがっち 05/1/18(火) 13:47 質問
【21287】Re:MonthViewのDayBoldプロパティの初期化 IROC 05/1/18(火) 14:04 回答
【21290】Re:MonthViewのDayBoldプロパティの初期化 びねがっち 05/1/18(火) 14:18 お礼

60117 / 76736 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free