Vba 根据单元格颜色更改Excel中单元格的值
我使用下面的VBA代码根据单元格的颜色更改单元格的值,但它会更改所有选定的单元格,包括彩色单元格。请在这方面帮助我:-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
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