打开时特定日期的VBA Excel单元格格式

时间:2014-07-04 13:21:04

标签: excel vba excel-vba

如果日期是星期一,我希望将单元格区域(a9:e13)字体颜色更改为黑色,如果是其他任何一天,则将其更改为白色。我希望在文件打开时执行此操作。

到目前为止我已经

Private Sub Workbook_open()
If Cell(S2).Value = True Then
Range("a9:e13").Font.Color = vbWhite
Else
Range("a9:e13").Font.Color = vbBlack
End If
End Sub

在单元格S1中我有= =今天()

在单元格S2中,我有= =工作日(S1)= 2

这根本不起作用,有人可以帮我理解我的错误吗?

工作守则

Private Sub Workbook_open()
If Sheet1.Cells(2, "S") = True Then
Sheet1.Range("a9:e13").Font.Color = vbBlack
Else
Sheet1.Range("a9:e13").Font.Color = vbWhite
End If
End Sub

3 个答案:

答案 0 :(得分:1)

我认为最简单的解决方案不是使用VBA,而是使用条件格式。例如,请参阅http://office.microsoft.com/en-us/excel-help/use-a-formula-to-apply-conditional-formatting-HA102809768.aspx

此外,您的代码示例似乎有一些错误,它应该是这样的?必须用工作表的名称替换Sheet1

If Sheet1.Cells(2, "S") = True Then
    Sheet1.Range("a9:e13").Font.Color = vbWhite
Else
    Sheet1.Range("a9:e13").Font.Color = vbBlack
End If

答案 1 :(得分:0)

我会用这个公式进行条件格式化:

=WEEKDAY(TODAY())=2

答案 2 :(得分:0)

另一种选择是

Private Sub Workbook_open()
    With Worksheets("Your_sheet_name")
        If Weekday(Now) = vbMonday Then
            .Range("a9:e13").Font.Color = vbWhite
            Else
            .Range("a9:e13").Font.Color = vbBlack
        End If
    End with
End Sub

编辑: @hnk - 是的,谢谢你提出这个问题。我的想法是,由于这是原始要求的一部分,任何更改都会在工作簿开放时发生,并且假设对所涉及的含义有所了解,我只是认为假设您指出的方案不太可能发生是公平的。但我真的可能更好地强调那个