Excel:根据一个单元格中的输入更改单元格中的文本颜色(包括更新)

Excel: Change text color in cells based on input in one cell (incl. updating)

我不是 Excel 或 VBA 方面的专家,但我会尽力而为。我有一个 Excel 文件,其中单元格 D10 为空白或非空白。

基于单元格D10为空或不为空,我想格式化文本颜色and/or单元格填充到其他单元格。单元格 D10 可以在空白和非空白之间变化,颜色也必须相应变化。

首先,我尝试在不使用 VBA 的情况下执行此操作:

这并没有像我希望的那样奏效。所做的更改并未应用于所选内容中的所有单元格,将单元格 D10 从空白更改为非空白再返回空白也没有效果。

然后我尝试了一些VBA,我真的不知道该怎么做。有人可以帮帮我吗?

Sub colourChange()

If Range("D10") = ISBLANK Then
    Range("C18:I20").Font.Color = RGB(256, 256, 256)
    Range("C32:I33").Font.Color = RGB(256, 256, 256)
End If

If Range("D10") = Not (ISBLANK) Then
    Range("C18:I20").Font.Color = RGB(0, 0, 0)
    Range("C32:I33").Font.Color = RGB(0, 0, 0)
End If

End Sub

如何使这个模块不断地"on"?

Select 单元格 D10 和功能区转到“公式”>“定义名称”并为单元格 D10 命名(例如,我将使用 myVal。)

对于您的第一个条件格式公式规则有:

=myVal=""

第二个:

=myVal<>""

这将检查 D10 中是否有任何类型的值,并正确应用格式。

我已经更新了这个答案,因为 Excel 没有完全配合我提供的初始解决方案,但我相信这应该可以解决问题![​​=12=]

如果要使用VBA,需要将代码移动到相关sheet的Worksheet_Change事件中。

然后,您需要检查Target范围是否为单元格D10,然后检查如何相应地修改Font.Color

注意:您可以使用 Union 在一行中设置多个范围,正如我在下面的代码中实现的那样。

代码

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim WatchRange                  As Range

' set watch range to cell D10
Set WatchRange = Range("D10")

' if modifed cell is D10 >> enter the rest of the code
If Not Intersect(Target, WatchRange) Is Nothing Then
    If IsEmpty(Range("D10")) Or Range("D10").Value = "" Then
        Union(Range("C18:I20"), Range("C32:I33")).Font.Color = RGB(256, 256, 256)
    Else
        Union(Range("C18:I20"), Range("C32:I33")).Font.Color = RGB(0, 0, 0)
    End If
End If

End Sub