我的代码在大部分时间都可以使用,但是当我清除新条目的数据范围时,我会得到运行时错误13,并且必须结束当前宏重新启动我的数据输入。最重要的是,突出显示先前的细胞仍然突出显示。知道如何防止这种情况吗?在此处输入图像描述
我的代码是:
Private Sub Worksheet_Change(ByVal Target As Range)
Set lowspec = Range("i6")
Set highspec = Range("m6")
Set i = Intersect(Target, Range("f16:l34"))
If Not i Is Nothing Then
Select Case Target
Case 1 To lowspec: newcolor = 3
Case highspec + 1 To 1000: newcolor = 3
End Select
Target.Interior.ColorIndex = newcolor
End If
End Sub
当您在一个操作中更改多个单元时, Target
代表整个范围,因此Select Case Target
将是一个问题。
这是您需要为此编码的方式:
- 始终假设
Target
可能不止一个单元格 - 获得目标与您的兴趣范围之间的相交,在该Intersect范围上进行操作:如果您只检查是否存在任何相交并继续在
Target
上操作,则可能仍然包括单元格在您的兴趣范围之外。 - 如果需要,请在该相交的相交,逐个细胞上执行所有操作。
类似:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lowSpec As Double, highSpec As Double, newcolor
Dim i As Range, c As Range, v
lowSpec = Me.Range("i6")
highSpec = Me.Range("m6")
Set i = Intersect(Target, Me.Range("f16:l34"))
If Not i Is Nothing Then
For Each c In i.Cells
v = c.Value
If Len(v) > 0 Then
Select Case v
Case 1 To lowSpec: newcolor = 3
Case highSpec + 1 To 1000: newcolor = 3
End Select
Else
newcolor = xlNone
End If
c.Interior.ColorIndex = newcolor
Next c
End If
End Sub