【问题标题】:Excel VBA - Highlight Selected CellExcel VBA - 突出显示选定的单元格
【发布时间】:2019-06-10 05:36:09
【问题描述】:

我正在使用此代码突出显示选定的单元格,它工作正常。但是,我想知道是否有更好的方法可以在不使用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 个范围相交且不为空白,此子项的目标是突出显示所选单元格吗?
  • 我认为它只会在第一次选择时出错,因为xLastRng 什么都不是,所以测试一下:If Not xLastRng is Nothing then xLastRng.Interior.ColorIndex = xlColorIndexNone
  • 我的目标是突出显示这三个范围中任何一个范围内的选定单元格,并取消突出显示先前选择的单元格

标签: excel vba


【解决方案1】:

这是另一种方法,因为现在您输入的是填充颜色而不是条件格式。这样做可能会破坏其他单元格的格式。

例如,我所做的是在 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 部分。

【讨论】:

    【解决方案2】:

    试试这个:

    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
    

    如果新选择超出您检查的范围,您是否要清除任何以前的突出显示,从您的问题中不清楚。

    【讨论】:

      【解决方案3】:

      我喜欢这个!!

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

      只需指向 Excel 插件并运行它。

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

      【讨论】:

        猜你喜欢
        • 2017-10-29
        • 2014-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多