【发布时间】:2021-12-02 12:37:37
【问题描述】:
我知道条件格式,但它没有给我我正在寻找的选项:即,可以根据另一个单元格的颜色手动更改单元格填充颜色(在受影响的单元格中),以及如果我什么都不做,那就是标准的填充颜色。我有一个单行的 VBA 代码(见下文),它可以工作,尽管我觉得它本身很复杂。现在,我想为另外 149 行做同样的事情,但代码显然变得复杂了。我怎样才能做到这一点?把它放在一个 SelectionChange 中是错误的吗?
代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Range("F7:PB7")
If Cell.Value < Range("D8").Value Or Cell.Value > Range("E8").Value Then
Cell.Offset(1, 0).Interior.ColorIndex = 0
End If
If Cell.Value >= Range("D8").Value And Cell.Value <= Range("E8").Value Then
If Range("B8").Interior.ColorIndex < 0 Then
Cell.Offset(1, 0).Interior.ColorIndex = 15
Else
If Range("B8").Interior.ColorIndex >= 0 Then
Cell.Offset(1, 0).Interior.Color = Range("B8").Interior.Color
End If
End If
End If
... et cetera next row ...
Next Cell
End Sub
最好的问候!
【问题讨论】:
-
欢迎来到 SO。所以,第一个问题;它必须使用
SelectionChange吗?你能把它放在一个不太经常触发的事件中吗?第二;您提到另外 149 行的代码会变得复杂,是因为这些行需要不同的逻辑/代码吗? -
我觉得您应该添加条件,这样就不会在您移动数据等时触发,添加
If Not Intersect(Target, Range("F:PB")) Is Nothing Then Exit Sub之类的内容会有所帮助。 -
在不了解第 7 行和第 8 行之间的关系的情况下,我不知道我们是否可以推断/插值修改它以用于其他行。如果您想添加条件以删除每隔一行,或者如果您想将该函数基于
Target.Row,它可能会提供有用的信息,它还允许您消除触发事件的偶数/奇数行。 -
不清楚何时应该运行。如果您想手动或通过(命令)按钮运行它,您需要将代码放入标准模块中。如果没有,您可能需要涵盖一些场景,例如当
F7:PB7发生更改或D或E列发生更改时。根据这些位置是否存在值或公式,可以创建适当的解决方案。如果您更改B列中的颜色,则不会触发任何事件。尝试另外解释逻辑并解决“值或公式问题”,最好是您可以随时编辑的答案。 -
如果我不必运行宏(单击按钮)那就太好了,所以在实践中,我正在寻找我们在条件格式中看到的那种行为。
标签: excel vba optimization foreach