我想要做的是当一个单元格(A1)匹配命名区域(“名称”)中的某些内容然后它会改变颜色,但是如果它不匹配但是匹配某个不同的命名范围(“眼睛”) )然后它变成了一种不同的颜色(还有更多的范围,但我确信在我有两个工作后我能够弄清楚它)
注意事项:
我知道这可以通过条件格式来完成,但是由于命名范围的数量和范围的大小,我希望使用宏更容易。
到目前为止,我已经设法让它适用于一个命名范围,并且当A1不是公式时(但是A1将是)
到目前为止我的2个代码是(注意这是在sheet1下):
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Application.Run ("Colour")
End If
End Sub
我的第二个(是一个单独的模块):
Sub Colour()
With ActiveSheet
For Each c In .Range("Names").Cells
If c.Value = .Range("A1").Value Then
Range("A1").Select
With Selection.Interior
.Color = 5287936
End With
End If
Next c
End With
End Sub
答案 0 :(得分:0)
我认为这可以满足您的需求:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
ApplyColor Me.Range("A1")
End If
End Sub
Sub ApplyColor(ValueRange As Range)
Dim MatchRanges As Variant
Dim MatchColors As Variant
Dim MatchValue As Variant
Dim i As Long
MatchRanges = Array("Names", "Eye")
MatchColors = Array(5287936, 4287952)
MatchValue = ValueRange.Value
ValueRange.Interior.Color = vbWhite
For i = LBound(MatchRanges) To UBound(MatchRanges)
If WorksheetFunction.CountIf(Me.Range(MatchRanges(i)), MatchValue) > 0 Then
ValueRange.Interior.Color = MatchColors(i)
Exit For
End If
Next i
End Sub
一些注释:“颜色”是一个VBA保留字,可能会导致问题,所以我使用了其他东西作为你的子名。在这种情况下,您不需要使用Application.Run
,只需要使用子名称及其参数(如果您愿意,还可以使用Call
。)