我正在使用此代码突出显示选定的单元格,并且工作正常。但是,我想知道是否有一种更好的方法而不使用On error resume next
。
此外,如果我使用此语句,是否表示同一事件中的其他错误或该事件调用的过程将不会被捕获?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Union(Me.Range("range_name"), Me.Range("range_name2"), _
Me.Range("range_name3"))) Is Nothing Then
Static xLastRng As Range
On Error Resume Next
Target.Interior.ColorIndex = 6
xLastRng.Interior.ColorIndex = xlColorIndexNone
Set xLastRng = Target
End If
End Sub
答案 0 :(得分:2)
这里是另一种方法,因为现在您正在输入填充颜色而不是条件格式。您可能会破坏其他单元格的格式。
例如,我在C,D和E列上使用了此条件格式设置规则(您还有其他范围,因此请相应地使用它们)。
=AND(ROW()=CELL("ROW"),COLUMN()=CELL("COLUMN"))
仅此一项就可以解决问题,但是屏幕出现某种故障(过快),无法以条件格式正确更新所选单元格。向下滚动和向上滚动可解决此问题,如果选定的单元格在范围内,您将看到该单元格已格式化。
为了解决这个问题,我在工作表中的选择更改上使用了强制等待时间,直到Excel完成计算...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
If Not Application.CalculationState = xlDone Then
DoEvents
End If
Application.ScreenUpdating = True
End Sub
不,您会注意到它不会出现故障:)
如果没有发生毛刺,您可以省去VBA部分。
答案 1 :(得分:0)
尝试一下:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static xLastRng As Range
Dim rng As Range
Set rng = Application.Intersect(Target, Union(Me.Range("range_name"), _
Me.Range("range_name2"), _
Me.Range("range_name3")))
'clear previous range hilite first, since overlap
' between previous & new could occur
If Not xLastRange Is Nothing Then
xLastRng.Interior.ColorIndex = xlColorIndexNone
Set xLastRange = Nothing
End If
If Not rng Is Nothing Then
Target.Interior.ColorIndex = 6
Set xLastRange = rng
End If
End Sub
从您的问题尚不清楚,如果新选择超出了选中的范围,是否要清除以前的突出显示。
答案 2 :(得分:0)