vba 条件格式 - 运行 清除数据时出现时间错误 13
vba Conditional Formatting - Run Time Error 13 when clearing Data
我的代码大部分工作,但是当我清除新条目的数据范围时,我得到 运行-time error 13 并且必须结束当前的宏才能重新启动我的数据条目。最重要的是,之前突出显示的单元格仍然突出显示。知道如何防止这种情况吗?
enter image description here
我的代码是:
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
可能不止一个单元格
- 获取Target和你感兴趣的区间的交集,对该区间进行操作:如果你只是检查是否有交集,然后继续操作
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
我的代码大部分工作,但是当我清除新条目的数据范围时,我得到 运行-time error 13 并且必须结束当前的宏才能重新启动我的数据条目。最重要的是,之前突出显示的单元格仍然突出显示。知道如何防止这种情况吗? enter image description here
我的代码是:
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
可能不止一个单元格 - 获取Target和你感兴趣的区间的交集,对该区间进行操作:如果你只是检查是否有交集,然后继续操作
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