使用 vba 进行条件格式设置?

时间:2021-04-07 08:30:51

标签: excel vba conditional-formatting

向这里的团队问好,

在这几天里,我遇到了一个无法找到解决方案的问题。每当我在 Excel 中使用 VBA 编辑器时,我引入的任何更改都不会产生永久性结果。更加具体。我正在尝试根据其他单元格的一些逻辑标准更改位于 K 列(从第 92 行到第 95 行)中的单元格的颜色。 A)如果H列和同一行对应的单元格小于等于2,那么K的单元格应该是红色的。 B) 如果H列和同行对应的单元格大于5,那么K的单元格应该是绿色的。

我可以进行任何更改或引入新的条件规则,但我的电子表格已扩展到数百个单元格。因此我需要找到一种有效的方法。

到目前为止,vba 代码非常简单,如下所示:

Sub FixCondFormat()

Dim i As Long, r1 As Range, r2 As Range, r3 As Range

   For i = 92 To 95
       Set r1 = Range("E" & i)
       Set r2 = Range("H" & i)
       Set r3 = Range("K" & i)
       If r2.Value <= (2 * r1.Value) Then r3.Interior.Color = vbRed
       If r2.Value > (5 * r1.Value) Then r3.Interior.Color = vbGreen
   Next i

  End Sub

如果我为我的工作表运行这个,更改不是永久性的。我的意思是,每当单元格值发生变化时,我都需要一次又一次地运行这部分代码。通过手动引入新规则,相应的规则是永久性的。见下文: enter image description here

另一方面,尽管在运行上面的代码之后,尽管相应的颜色不断变化,但没有为单元格 92 到 95 的系统引入任何规则。

我需要你的帮助。有没有办法只运行上面的代码来引入这些条件规则?

请注意,H 列单元格中的值是其他两个单元格的减法乘积。鉴于手动插入规则条件这工作正常这一事实,有没有我可以在这里使用的替代方案?我需要我的条件的基础是 H 中单元格的值。

另外,有没有办法自动生成这些条件规则(如上图所示),仅通过执行一个vba例程?我一直在考虑执行批处理文件,以进行这些更改并自动引入这些规则。

1 个答案:

答案 0 :(得分:0)

您的代码会更改单元格颜色。这种变化是永久性的。是的,当值发生变化时,您将不得不再次运行代码。为了使用条件格式,您必须设置您的代码不具备的条件格式。

我也不会。那是因为我不喜欢 Excel 干扰我的 VBA。 VBA 解决方案将涉及一个类似下面提供的程序。将其安装在您的范围所在的工作表的代码模块中。 (如果安装在标准代码模块中将无法工作)。

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Cell    As Range
    Dim Col     As Long
    Dim R1      As Double
    
    With Target
        For Each Cell In Target
            If Not Application.Intersect(Target, Columns("H")) Is Nothing Then
                R1 = Val(Cells(Cell.Row, "E").Value)
                Col = IIf(.Value <= (R1 * 2), vbRed, IIf(.Value > (5 * R1), vbGreen, 0))
                
                With Cells(Cell.Row, "K").Interior
                    If Col Then
                        .Color = Col
                    Else
                        .Pattern = xlNone
                    End If
                End With
            End If
        Next Cell
    End With
End Sub

当 H 列中的一个或多个单元格发生更改时,此过程将运行,将新值与 E 列中的值进行比较,并相应地设置 K 列中的颜色。

请注意,当 H 列中的更改由其他地方的更改引起时,它可能不会运行,例如 H 列包含公式时的情况。在这种情况下,偶数过程的触发器必须移动到发生变化的一列或多列。例如,如果 H 列是 F 和 G 列中数字的乘积,您可以让这些列中的任何一列的变化触发代码。

另外请注意,在正常情况下,您一次不能更改多个单元格。因此,我的代码中的循环似乎是多余的。它只会运行一次。但是,如果您粘贴从其他地方提取的一组值,那么一次性更改许多单元格,我的循环就会生效。

相关问题