如何在日历中自动为当前月份的单元格着色

Posted

技术标签:

【中文标题】如何在日历中自动为当前月份的单元格着色【英文标题】:How to automatically color cells of the current month in calendar 【发布时间】:2020-01-25 09:38:59 【问题描述】:

我在 Excel 中有一个日历,一直持续到 2020 年 7 月。我希望在我的工作表中拥有的是每次打开工作簿时自动着色“当前月份”的所有单元格。

我已经做了“当天自动着色” 这是代码:

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

提前谢谢你。

【问题讨论】:

你只需要你所在的那一天,而不是你需要使用If Month(cell) = Month(Date) then 这样你就可以选择月份。 类似:If cell.Value = Month(Date) Then cell.Interior.Color = 'Color End If 不,因为cell.value 是日期,而不是月份...您需要使用Month() 进行两个比较。看看下面的答案。 【参考方案1】:

这种替换应该可以满足您的要求:

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 语句。

【讨论】:

好的,成功了,非常感谢。最后一个问题,也为当天着色? @Lomoo 把你拥有的那个和If 放在一起,然后检查月份一个ElseIf 那么如果今天是星期六,需要显示哪种颜色呢?因为我相信你想要今天的颜色,周六和周日的颜色不同,而本月的其余时间颜色不同。那么它是哪一个? 无论如何,认为 If 语句逐行运行,并且当比较为真时将停止,您需要知道的是 Format(cell, "dddd") = "Saturday" 或 sunday 可以解决问题,现在将它与您的逻辑。 @Lomoo 转到 Excel 和单元格格式,您可以在那里玩弄并尝试它的作用。假设您有 25/09/2019,“dd” = 25,“ddd” = 当天的简称,“dddd” = 当天的全名。与月份“mm”、“mmm”、“mmmm”相同,您可以根据需要格式化日期【参考方案2】:

使用条件格式可以更轻松地完成此操作。将此公式应用于您的日期所在的范围:

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

这将突出显示该范围内日期在当月内的每个单元格。确保将“A1”更改为该范围内的第一个单元格。或者,如果您想突出显示整行,请输入 $*Column*1,其中 *Column* 是您的日期所在的列。然后应用到您的整个工作表。

编辑由于我仍然相信这个答案而不是 VBA 选项,因此我还将回答 cmets 中关于该答案的问题:

今天的日期可以用公式突出显示:

=A1=TODAY()

编辑 2 After some trouble and learning on my part 突出周末的最佳公式如下:

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

感谢@shrivallabha.redij 和@Foxfire And Burns And Burns

【讨论】:

这完全是不必要的 Plutian,你有Month(),它更短更干净。 这确实是一种更简洁的方法,并且给出了相同的结果。我会更新我的答案。我忘记了Month(),因为我更关心的是用条件格式来表达我的观点。 虽然 CF 是不稳定的,但我认为我仍然更喜欢它而不是通过 VBA 获得更静态的单元格颜色。 =) @JvdV 同意,如果有的话,它应该更快,不需要在每个工作簿打开或更改时触发宏。

以上是关于如何在日历中自动为当前月份的单元格着色的主要内容,如果未能解决你的问题,请参考以下文章

如何在EXCEL单元格中制作可以选择的下拉日历并自动填充

excel2010制作下拉菜单日历的方法

在EXCEL中插入日历控件后,如何添加到单元格上(带下拉箭头),点击后出现日历,选择一个日期自动填充并隐

如何使用JS / jQuery在HTML表中选择一个特定的单元格?

vba日历控件只能在一个单元格用怎么办

如果单元格包含当前月份,如何删除行?