【问题标题】:Excel: Change text color in cells based on input in one cell (incl. updating)Excel:根据一个单元格中的输入更改单元格中的文本颜色(包括更新)
【发布时间】:2017-04-13 04:39:24
【问题描述】:

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

基于单元格 D10 为空白或非空白,我想格式化文本颜色和/或单元格填充其他单元格。单元格 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

如何让这个模块持续“开启”?

【问题讨论】:

  • 尝试下面我的答案中的代码以获得 VBA 解决方案
  • 我不确定我是否做对了。请参阅下面的图片链接。我做错什么了吗?正如我之前提到的,我不擅长 VBA。 Screenshot

标签: vba excel colors conditional-formatting


【解决方案1】:

选择单元格 D10,然后功能区转到公式 > 定义名称并为单元格 D10 命名(例如,我将使用 myVal。)

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

=myVal=""

第二个:

=myVal<>""

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

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

【讨论】:

  • 谢谢你:)。但是,这不适用于整个选择:“=$C$18:$I$20;$C$32:$I$33”。当 D10 改变时,只有一个单元格 (C18) 改变。其余的都有白色文字,不管 D10。
  • 如果要添加额外的范围,请将分号改为逗号。
  • 我认为我的 Excel 版本使用分号而不是逗号。至少这是我必须在公式中使用的(例如 =IF(A1=A2;"OK";"Not OK")。
  • 很奇怪,我也注意到了这一点!对不起。我得到的解决方法是给 D10 一个命名范围。在公式选项卡上定义名称,并将 d10 设置为任何名称(假设为 myVal。)然后将其更改为您的规则为 =myVal="", =myVal""。
  • 自定义名称在 Excel 中非常有用,对于公式和 VBA,它们会改变你的生活!
【解决方案2】:

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

然后,您需要检查Target范围是否为Cel​​l 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 2014-01-05
    相关资源
    最近更新 更多