Как автоматически закрасить ячейки текущего месяца в календаре - PullRequest
3 голосов
/ 25 сентября 2019

У меня есть календарь в Excel, который будет работать до июля 2020 года. Мне бы хотелось, чтобы на рабочем листе была автоматическая окраска всех ячеек «текущего месяца» каждый раз, когда я открываю книгу.

Я уже сделал "автоцвет окраски текущего дня". Вот код:

Public Sub FormattaCalendario()

  Dim LColCount As Long
  Dim cell As Variant

  ultimoGiorno = DateSerial(Year(Date), Month(Date), 0)
  primoGiorno = ultimoGiorno - Day(ultimoGiorno) + 1

  LColCount = Cells(TrovaInizioProgetti(activeCell) - 1, 
  Columns.Count).End(xlToLeft).Column

  For Each cell In Range(Cells(TrovaInizioProgetti(activeCell) - 1, 11), 
  Cells(TrovaInizioProgetti(activeCell) - 1, LColCount))

    If cell.Value = Date Then
      cell.Interior.Color = RGB(255, 255, 91)
    End If

    If CDate(cell.Value) <> Date Then
      cell.Interior.Color = RGB(255, 150, 0)
    End If

  Next

End Sub

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 25 сентября 2019

Это можно сделать намного проще с условным форматированием.Примените эту формулу к диапазону, в котором находятся ваши даты:

=MONTH(A1)=MONTH(NOW())

. Это позволит выделить каждую ячейку в этом диапазоне, в которой есть дата в текущем месяце.Обязательно замените «А1» на первую ячейку в этом диапазоне.Или, если вы хотите выделить всю строку, введите «$ * Столбец * 1», где Столбец - это столбец, в котором находятся даты. Затем примените его ко всему листу.

EDIT Поскольку я все еще верю в этот ответ больше, чем в VBA, я также отвечу на вопросы в комментариях к этому ответу:

Сегодняшнюю дату можно выделить формулой:

=A1=TODAY()

РЕДАКТИРОВАТЬ 2 После некоторых трудностей и обучения с моей стороны лучшая формула для освещения выходных дней выглядит следующим образом:

=IF(CELL("format",A1)="D1",WEEKDAY(A1,2)>5,FALSE)

С благодарностьюto @ shrivallabha.redij и @Foxfire And Burns And Burns

2 голосов
/ 25 сентября 2019

Эта замена должна работать для того, что вы запрашиваете:

If Month(CDate(cell.Value)) = Month(Date) Then
  cell.Interior.Color = RGB(255, 255, 91)
Else
  cell.Interior.Color = RGB(255, 150, 0)
End If

Обратите внимание, что для этого вам не нужны два отдельных оператора IF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...