ユーザーフォーム
コンボボックスの名前は「〆切日」としておき、カレンダーリスト作成
の引数にぶち込む
あと2つの引数は
- 今日から数えた日数
- 土日を含むか否か
Private Sub UserForm_Initialize()
' その他処理
Call カレンダーリスト作成(〆切日, 180, False)
End Sub
標準モジュール
Option Explicit
Sub カレンダーリスト作成(ByVal obj As Object, 日数, 土日を含むか As Boolean)
Dim myDate, i
With obj
For i = 0 To 日数
myDate = DateAdd("d", i, Date)
If 土日判定(myDate) = True Then
.AddItem 曜日付与(myDate)
End If
Next
End With
End Sub
Private Function 曜日付与(myDate) As String
Dim 曜日
曜日 = WeekdayName(Weekday(myDate), True)
曜日 = "(" & 曜日 & ")"
曜日付与 = myDate & 曜日
End Function
Private Function 土日判定(myDate) As Boolean
Dim 曜日
Dim flg As Boolean
曜日 = WeekdayName(Weekday(myDate), True)
Select Case 曜日
Case "土", "日": flg = False
Case Else: flg = True
End Select
土日判定 = flg
End Function
おまけ 日付の形式変換関数
Function Date2yymmdd(myDate)
Dim myDt As String
myDate = Split(myDate, "(")(0)
myDt = Format(myDate, "yymmdd")
Date2yymmdd = myDt
End Function
Function yymmdd2Date(yymmdd)
Dim myDt As Date
myDt = Format(yymmdd, "@@@@/@@/@@")
yymmdd2Date = 曜日付与(myDt)
End Function
実行するとこんな感じ
背景が黄色っぽくなってるのは、フォーカス時のみ色を変える別のコード使ってます
リストボックスと比べてコンボボックスだといちいち開きにいかなきゃなのが面倒だけど、
ユーザーフォーム全体のサイズ感はコンパクトになるという利点はあるので好き好きで。