【问题标题】:VBA code to change row color when value in column A changes当 A 列中的值更改时,VBA 代码更改行颜色
【发布时间】:2011-05-14 13:13:51
【问题描述】:

我的电子表格是这样设置的:

我在 A 列中有一个职位编号列表,在 B 列中有一个相应的职位名称列表。我需要为某个职位编号的所有行着色。例如,第 2-4 行在 A 列中有“3705”,因此这些行将被涂成红色。第 5 行和第 6 行在 A 列中有 4169 并且将显示为绿色。第 7-10 行在 A 列中有 5518 并且将被着色为红色(在红色和绿色之间交替)。

有人可以给我一个 VBA 代码,它会自动/使用宏执行我上面描述的操作吗?

谢谢!!

【问题讨论】:

    标签: colors excel row vba


    【解决方案1】:

    如果您可以添加列,则只能使用 Excel 公式和条件格式来完成此操作。您可能无法交替使用红色/绿色,而只能是一种颜色而没有颜色。

    Alternate Excel Row Color Based on Content

    【讨论】:

      【解决方案2】:
      Sub colorize()
      
      Dim r As Long, val As Long, c As Long
      
          r = 1
          val = ActiveSheet.Cells(r, 1).Value
          c = 4 '4 is green, 3 is red '
      
          For r = 1 To ActiveSheet.Rows.Count
              If IsEmpty(ActiveSheet.Cells(r, 1).Value) Then
                  Exit For
              End If
      
              If ActiveSheet.Cells(r, 1).Value <> val Then
                  If c = 3 Then
                      c = 4
                  Else
                      c = 3
                  End If
              End If
      
              ActiveSheet.Rows(r).Select
              With Selection.Interior
                  .ColorIndex = c
                  .Pattern = xlSolid
              End With
      
              val = ActiveSheet.Cells(r, 1).Value
          Next
      
      End Sub
      

      如果您希望宏在每次 A 列中的单元格更改值时触发,请将以下内容添加到相关工作表的模块中:

      Private Sub Worksheet_Change(ByVal Target As Range)
      
          If Intersect(Target, Range("A:A")) Is Nothing Then
              Exit Sub
          End If
      
          colorize
      
      End Sub
      

      【讨论】:

      • 使用 DIM 时,您必须为每个变量指定变量类型。你拥有它的方式只会将 c 设置为整数。 r 和 val 都将是变体类型。您可以在 VBA 中使用 VarType 进行检查。
      • Vicky,当我尝试运行您给我的最高代码(长代码)时,它显示“运行时错误'13':类型不匹配”是因为 Remnant 所说的吗?如果是这样,我该如何解决?此外,当我尝试运行您给我的第二个代码(短代码)时,它不会作为运行选项出现(而是显示我记录的其他一些宏)。抱歉,我是 VBA 代码等的新手; .. 非常感谢您的帮助(Remnant & Vicky)!
      • 嗨@Colton,@Remnant 编辑了我的帖子以更正“Dim”语句,因此如果您使用它,因为它出现在答案中会很好。您的运行时错误可能与 ActiveSheet 相关 - 您需要在运行时选择相关工作表(即作为活动工作表),而不是代码模块工作表。我不确定@Mike Woodhouse 提供的第二个短sn-p,但我认为它应该在A 列发生任何变化时自动运行,因此您不需要将其作为宏运行。
      • 现在更有意义了,但我仍然做错了什么。这就是我正在做的事情:我打开相关的工作簿,没有别的(工作簿只有一张工作表。)我打开 VBE (alt+F11) 并在项目窗口中右键单击相关的工作表并选择插入模块。然后我打开该模块并将您和剩余给我的代码(在上面的答案中)复制并粘贴到模块代码区域中。然后我点击运行并得到我之前提到的错误。我还尝试将代码粘贴到工作表的代码窗口中,但这也不起作用。知道我做错了什么吗?对不起..
      • 是的,将代码粘贴到模块代码错误中,如上所述。然后返回工作表本身并通过菜单选择工具 > 宏 > 运行,然后选择着色并单击运行。如果您只是在代码编辑器中点击运行,那么代码编辑器就是活动工作表。
      猜你喜欢
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 2017-03-30
      • 2021-04-14
      • 1970-01-01
      • 2020-02-12
      相关资源
      最近更新 更多