OptionExplicitPrivate ws As Worksheet
Private Диап_Календ As Range
Private Диап_Дат As Range
Private Столб_Цвет_Смещ AsLongPrivate Дата_Текущ As Range
Private bDeBug AsBooleanPublicSub Календарь_Красить()
' Пройтись по списку дат и цветов,' заодно раскрасить заранее заготолвенный календарь
bDeBug = fasle
Список_Проход _
Выходные( _
Инит)
EndSubPrivateFunction Список_Проход(OptionalByVal msg AsVariant) _
AsVariantDim el As Range
ForEach el In Диап_Дат
Set Дата_Текущ = el
День_Цвет el
NextEndFunctionPrivateFunction День_Цвет(el As Range) AsVariant
Цвет _
День( _
Месяц_Диап( _
Месяц(el)))
EndFunctionPrivateFunction День(ByVal rng As Range) As Range
Dim el As Range, ДеньД AsLongForEach el In rng
ДеньД = День_из_Даты
If bDeBug Then el.SelectIf el.Value = ДеньД ThenSet День = el
ExitForEndIfNextEndFunctionPrivateFunction День_из_Даты(OptionalByVal msg AsVariant) AsLong
День_из_Даты = Format(Дата_Текущ.Value, "d")
EndFunctionPrivateFunction Цвет(el As Range) AsVariant
el.Interior.Color = _
Дата_Текущ.Offset(0, Столб_Цвет_Смещ).Interior.Color
EndFunctionPrivateFunction Месяц(ByVal el As Range) AsString
Месяц = Format(el.Value, "MMMM")
EndFunctionPrivateFunction Месяц_Диап(ByVal str AsString) As Range
Dim el As Range
ForEach el In Диап_Календ
If InStr(1, el.Value, str, vbTextCompare) > 0 ThenSet Месяц_Диап = Диап_Месяц(el)
ExitForEndIfNextEndFunctionPrivateFunction Диап_Месяц(ByVal el As Range) As Range
Set Диап_Месяц = el.Resize(6, 7).Offset(2, 0)
EndFunctionSub tmonth_test()
Dim y AsLongFor y = 1 To 12
Debug.Print Choose(y, _
"Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", _
"Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь")
NextEndSubPrivateFunction Выходные(OptionalByVal msg AsVariant) AsVariantDim y AsLongFor y = 1 To 12
Выходные_Красить _
Выходные_Диап( _
Месяц_Название_из_Номера(y))
NextEndFunctionPrivateFunction Выходные_Красить(rng As Range) AsVariantIfNot rng IsNothingThen _
rng.Interior.ColorIndex = 15
EndFunctionPrivateFunction Месяц_Название_из_Номера(ByVal iNumb AsLong) _
AsString
Месяц_Название_из_Номера = _
Array("Январь", "Февраль", "Март", _
"Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", _
"Октябрь", "Ноябрь", "Декабрь")(iNumb - 1)
EndFunctionPrivateFunction Выходные_Диап(ByVal Мес AsString) As Range
Dim el As Range, rng_Мес As Range
ForEach el In Диап_Календ
If InStr(el.Value, Мес) > 0 ThenSet rng_Мес = Диап_Месяц(el)
Set Выходные_Диап = _
rng_Мес.Resize(rng_Мес.Rows.Count + 1, 2). _
Offset(-1, 5)
ExitForEndIfNextEndFunctionPrivateFunction Инит(OptionalByVal msg AsVariant) AsVariantSet ws = Me
With ws
Set Диап_Календ = .Range(.Cells(3, 1), .Cells(27, 33))
Заливки_НЕТ Диап_Календ
Set Диап_Дат = _
.Range(.Cells(2, 44), .Cells(.Rows.Count, 44).End(xlUp))
Столб_Цвет_Смещ = 2
EndWithEndFunctionPublicSub Заливки_НЕТ(rng As Range)
With rng.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
EndWithEndSub