0

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

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

问题是它会更改文档中的所有文本 - 我只希望在运行宏后键入的单元格的颜色索引为 5。我不想指定范围,因为范围会随每一行而改变取决于输入最后一个文本的位置,我认为有比遍历每一行并找到最后一列更简单的方法。我想要一个可以识别日期的宏,为我每天输入的任何内容分配颜色 - 星期一蓝色,星期二红色等。我会很感激任何帮助,尤其是在更改宏之后仅写入文本的颜色时正在运行!

4

3 回答 3

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

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

于 2013-11-14T19:30:30.787 回答
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
于 2013-11-14T19:40:29.280 回答
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

测试了一下,效果很好!希望这就是你要找的。:)

于 2013-11-14T22:31:36.403 回答