我在excel中有一个电子表格,其中有三种类型的单元格。黑细胞,黄细胞和没有填充的细胞。我正在尝试编写代码,以使黑色单元格包含值1
,黄色单元格包含值2
和无填充单元格值0
。
到目前为止,这是我对黑色和黄色单元格的要求:
Sub changeValuesBasedOnColour()
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 = 0 'Black
.Value = 1
Case Is = 255255 'Yellow
.Value = 2
End Select
End With
Next
Application.DisplayAlerts = False
End Sub
这适用于电子表格中黑色填充的单元格:它们现在都包含值1
。但是,对于我的黄色细胞来说,什么都没有改变。
我认为可能与错误的十六进制代码有关,但是我也尝试过2552550
和```255255000``。黄色单元格由excel标准颜色的黄色填充,如下所示。
答案 0 :(得分:1)
您对黄色的值有误;它应该是65535
。可以通过几种方式进行验证:
? ActiveCell.Interior.Color
,然后按 Enter 。? vbYellow
,然后按 Enter 。? RGB(255, 255, 0)
,然后按 Enter 。在您的代码中,您可以只使用vbBlack
和vbYellow
来代替0
和65535
。
答案 1 :(得分:1)
必须准确指定颜色。黄色<>黄色。有上千种黄色阴影。您的代码中Application.DisplayAlerts = False
的第一个实例是不必要的。第二个是错误。
下面的代码采用的方法与您刚开始使用的方法相反。它读取颜色集,如果是“已知”颜色,则应用索引号。该系统的优点是,它更易于维护和扩展。
Sub SetValuesBasedOnColour()
Dim Cols As Variant ' array of colours
Dim Idx As Long ' index of Cols
Dim Cell As Range ' loop object
Cols = Array(vbBlack, vbYellow)
For Each Cell In Selection.Cells
With Cell
On Error Resume Next
Idx = WorksheetFunction.Match(.Interior.Color, Cols, 0)
If Err.Number = 0 Then .Value = Idx
End With
Next Cell
End Sub