打开特定date的VBA Excel单元格式

如果星期一是星期一,我希望单元格范围(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中,我= = Today()

在单元格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 

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

另外,你的代码示例似乎有一些错误,它应该看起来像这样? Sheet1必须replace为您的工作表的名称。

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

我会做这个公式的条件格式:

 =WEEKDAY(TODAY())=2 

另一种select是

 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 – 真的,感谢您提出这一点。 我的想法是,既然这是原来的要求的一部分,任何变化发生在工作簿的开放,并假设理解所涉及的影响,我只是认为这是公平的,假设你指出的情况不太可能发生。 但我可能更强调这一点