根据单元格颜色更改Excel中单元格的值

时间:2017-11-19 22:04:49

标签: excel vba excel-vba

我使用以下VBA代码根据颜色更改单元格的值,但它会更改所有选定的单元格,包括彩色单元格。请帮助我: -

Sub ChangeValueBasedOnCellColor()
    Dim rg As Range
    Dim xRg As Range
    Set xRg = Selection.Cells
    Application.DisplayAlerts = False
    For Each rg In xRg
        With rg
            Select Case .Interior.Color
                Case Is = 16777215
                    .Value = "OFF"

            End Select
        End With
    Next
    Application.DisplayAlerts = False
End Sub

1 个答案:

答案 0 :(得分:2)

您遇到的问题是,没有/未设置/默认 * 背景颜色的单元格和背景颜色明确设置为白色的单元格都具有相同的 .Interior.Color属性值(16777215)。

要区分这两者,您需要检查每个单元格的.Interior.ColorIndex属性。没有背景颜色的单元格.Interior.ColorIndex等于xlNone-4142),而具有设置的白色背景颜色的单元格的.Interior.ColorIndex等于2。< / p>

因此,您的代码需要更改为以下内容才能正确设置&#34; white&#34;的值。彩色单元格到OFF

Sub ChangeValueBasedOnCellColor()
  Dim rg As Range
  Dim xRg As Range
  Set xRg = Selection.Cells
  Application.DisplayAlerts = False
  For Each rg In xRg
    With rg
      Select Case .Interior.ColorIndex
        Case Is = 2
          .Value = "OFF"
      End Select
    End With
  Next
  Application.DisplayAlerts = False
End Sub

注意:
* 如果您的默认背景颜色不是白色,则.Interior.Color属性值 仍然 为白色。这是因为改变&#34;的唯一方法。默认的单元格颜色是添加彩色背景图像。基础单元格的背景颜色仍未设置。