这是我第一次发帖,所以请留意! 我尝试将随机颜色分配给姓名列表,以便稍后可以回忆并填充人员编制表的另一个列表。
到目前为止,这是我的代码,但是由于某些奇怪的原因,它无法正常工作。 我不确定是否有人已经问过这个问题,但是我的搜索却空手而归。
谢谢!
Private Sub Worksheet_Change(ByVal Target As Range)
Set WF = Application.WorksheetFunction
If Target.Cells.Column = 1 Then
If Target.Column = 3 Then
x = 0
On Error Resume Next
x = WF.Match(Target.Value, _
Range("C1").Resize(Target.Row - 1), _
0)
On Error GoTo 0
If x > 0 Then
' duplicate value...copy the old color
Target.Interior.Color = Cells(x, 3).Interior.Color
Else
' choose a new color
Target.Interior.Color = RGB( _
WF.RandBetween(0, 255), _
WF.RandBetween(0, 255), _
WF.RandBetween(0, 255))
End If
End If
End If
End Sub
答案 0 :(得分:0)
On Error Resume Next
,请不要使用它。参见#1。Option Explicit
放在每个现有代码表的顶部。在您的情况下,您可以在整个列中查找目标值,并且将始终找到该目标值。如果在目标上方的一行中找到它,则您有一个重复值。
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns(3)) Is Nothing Then
Dim t As Range, x As Long
For Each t In Intersect(Target, Columns(3))
Debug.Print t.Address(0, 0)
'looking in the entire column means it will ALWAYS be found
x = Application.Match(t.Value, Columns(3), 0)
If x < t.Row Then
' duplicate value...copy the old color
t.Interior.Color = Cells(x, 3).Interior.Color
Else
' choose a new color
t.Interior.Color = RGB( _
Application.RandBetween(0, 255), _
Application.RandBetween(0, 255), _
Application.RandBetween(0, 255))
End If
Next t
End If
End Sub