Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 根据单元格颜色更改Excel中单元格的值_Vba_Excel - Fatal编程技术网

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

Vba 根据单元格颜色更改Excel中单元格的值,vba,excel,Vba,Excel,我使用下面的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

我使用下面的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

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

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

因此,您的代码需要更改为以下内容,以便将“白色”彩色单元格的值正确设置为
关闭

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
属性值仍为白色。这是因为“更改”默认单元格颜色的唯一方法是添加彩色背景图像。基本单元格的背景色仍未设置。

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

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

因此,您的代码需要更改为以下内容,以便将“白色”彩色单元格的值正确设置为
关闭

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
属性值仍为白色。这是因为“更改”默认单元格颜色的唯一方法是添加彩色背景图像。基本单元格的背景颜色未设置。

对我来说,它只会更改未着色的单元格,使其包含“OFF”一词。16777215..是颜色索引。如果颜色索引匹配,则应将该单元格中的“OFF”一词删除。但在我的例子中,对于每个选定的单元格,它都会延迟。在xRg中每个rg的
语句后面直接放置
MsgBox rg.Address&“|”&rg.Interior.Color
语句,然后尝试在一个小的选择上运行代码,其中包括一些您希望更改的单元格和一些您希望保持不变的单元格。查看每个单元格显示的
Interior.Color
值。OK。。。我会试试。如果你想检查没有颜色的单元格,那么请使用
如果rg.Interior.ColorIndex=xlNone
对我来说,它只会更改没有颜色的单元格中的“OFF”一词。16777215..是颜色索引。如果颜色索引匹配,则应将该单元格中的“OFF”一词删除。但在我的例子中,对于每个选定的单元格,它都会延迟。在xRg中每个rg的
语句后面直接放置
MsgBox rg.Address&“|”&rg.Interior.Color
语句,然后尝试在一个小的选择上运行代码,其中包括一些您希望更改的单元格和一些您希望保持不变的单元格。查看每个单元格显示的
Interior.Color
值。OK。。。我会试试。如果要检查没有颜色的单元格,请使用
如果rg.Interior.ColorIndex=xlNone