Excel VBA-突出显示所选单元格

时间:2019-06-08 19:10:02

标签: excel vba

我正在使用此代码突出显示选定的单元格,并且工作正常。但是,我想知道是否有一种更好的方法而不使用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

3 个答案:

答案 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

不,您会注意到它不会出现故障:)

enter image description here

如果没有发生毛刺,您可以省去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)

我喜欢这个!!

http://www.cpearson.com/excel/RowLiner.htm

enter image description here

只需指向Excel加载项并运行它即可。

https://trumpexcel.com/excel-add-in/