如何在运行宏后更改字体颜色

时间:2013-11-14 18:57:40

标签: excel vba excel-vba conditional-formatting

我希望根据输入文档的日期更改我输入的文字颜色。现在我在工作表中有一个单元格,用于识别当前日期=TEXT(TODAY(), "dddd")。然后是以下VBA代码:

  If Range("A1").Value = "Thursday" Then Cells.Font.ColorIndex = 5

问题是它改变了文档中的所有文本 - 我只想在运行宏后输入的单元格的颜色索引为5.我不想指定范围因为范围会改变对于每一行,取决于最后一个文本的输入位置,我认为有更简单的方法,而不是循环遍历每一行并查找最后一列。我想要一个能够识别日期的宏,为我每天输入的任何东西分配颜色 - 星期一蓝色,星期二红色等等。我会感激任何帮助,特别是在改变宏之后写的文字的颜色时跑了!

3 个答案:

答案 0 :(得分:2)

您可以使用工作表更改事件执行此操作。转到要在其上实现的工作表的模块(右键单击选项卡并单击“查看代码”),然后输入以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
    For Each c In Target
        Select Case LCase(c.Value)
            Case "monday": c.Font.ColorIndex = 5
            Case "tuesday": c.Font.ColorIndex = 4
        End Select
    Next
End Sub

只要工作表发生更改,此代码就会运行(它不会应用于现有单元格,除非它们已更新)。

答案 1 :(得分:0)

打开VBA而不是创建模块,右键单击Sheet1 - >查看代码。 这应该打开一个区域供您编码。转到右上角,然后选择更改。每次更改所选单元格的值后,应运行代码。

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Format(Now, "dddd") = "Thursday" Then
            Target.Font.ColorIndex = 5
       End If
    End Sub

应该看起来像这样。或者这个:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Select Case Format(Now, "dddd")
        Case "Sunday"
            Target.Font.ColorIndex = 1
        Case "Monday"
            Target.Font.ColorIndex = 2
        Case "Tuesday"
            Target.Font.ColorIndex = 3
        Case "Wednesday"
            Target.Font.ColorIndex = 4
        Case "Thursday"
            Target.Font.ColorIndex = 5
        Case "Friday"
            Target.Font.ColorIndex = 6
        Case "Saturday"
            Target.Font.ColorIndex = 7
        End Select
    End Sub

显然,颜色可以是你想要的任何颜色,但它会根据实际的日期而不是你输入的内容而改变。

我想到的最后一个是:

Private Sub Worksheet_Change(ByVal Target As Range)
    Target.Font.ColorIndex = Weekday(Now)
End Sub

答案 2 :(得分:0)

如果要根据工作表更改的日期为工作表中更改的任何单元格着色,则应尝试以下代码。它不会在单元格中查找“星期一”值,而是为星期一更改的所有单元格着色。我正在使用 Now()告诉代码实际更改单元格的时刻,然后我使用 Datepart 来提取当天的索引(有点像名称,在本例中为1到7)。

Private Sub Worksheet_Change(ByVal Target As Range)
CurDay = DatePart("w", Now())
Dim c As Range
For Each c In Target
    If CurDay = 0 Then '0 is impossible just to keep the code "clean"
        ElseIf CurDay = 2 Then c.Font.ColorIndex = 5 '2 is by default Monday
        ElseIf CurDay = 3 Then c.Font.ColorIndex = 6 'etc
        ElseIf CurDay = 4 Then c.Font.ColorIndex = 7 'etc
        ElseIf CurDay = 5 Then c.Font.ColorIndex = 8 'etc
        ElseIf CurDay = 6 Then c.Font.ColorIndex = 9 'etc
        ElseIf CurDay = 7 Then c.Font.ColorIndex = 10 'etc
        ElseIf CurDay = 1 Then c.Font.ColorIndex = 11 ' Sunday
    End If
Next
End Sub

测试它,就像一个魅力!希望这是你想要的。 :)