将参数添加到工作表事件

我find了一个能很好地突出显示与选定单元格相对应的整行的macros(无论您select哪个单元格,macros是否运行,并且所有行均高亮显示)。 这个当前的迭代有一些缺点,我似乎无法find一个方法来制定参数,我想限制突出显示到特定数量的行。 有任何想法吗?

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Const cnNUMCOLS As Long = 512 Const cnHIGHLIGHTCOLOR As Long = 6 'default lt. yellow Static rOld As Range Static nColorIndices(1 To cnNUMCOLS) As Long Dim i As Long If Not rOld Is Nothing Then 'Restore color indices With rOld.Cells If .Row = ActiveCell.Row Then Exit Sub 'same row, don't restore For i = 1 To cnNUMCOLS .Item(i).Interior.ColorIndex = nColorIndices(i) Next i End With End If Set rOld = Cells(ActiveCell.Row, 1).Resize(1, cnNUMCOLS) With rOld For i = 1 To cnNUMCOLS nColorIndices(i) = .Item(i).Interior.ColorIndex Next i .Interior.ColorIndex = cnHIGHLIGHTCOLOR End With End Sub 

试试这个:

 Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Const cnNUMCOLS As Long = 512 Const cnHIGHLIGHTCOLOR As Long = 6 'default lt. yellow Static rOld As Range Static nColorIndices(1 To cnNUMCOLS) As Long Dim i As Long, bClear as Boolean, bInRange as Boolean bInRange = Not Application.Intersect(Me.Range("11:54"), Target) Is Nothing bClear = Not Application.Intersect(Me.Range("A6"), Target) Is Nothing 'exit if selection is not in the first ten rows or A6 If Not (bClear Or bInRange) Then Exit Sub If Not rOld Is Nothing Then 'Restore color indices With rOld.Cells If .Row = ActiveCell.Row Then Exit Sub 'same row, don't restore For i = 1 To cnNUMCOLS .Item(i).Interior.ColorIndex = nColorIndices(i) Next i End With End If If Not bInRange Then Set rOld = Nothing Exit Sub ' Exit if we're in A6 End If Set rOld = Cells(ActiveCell.Row, 1).Resize(1, cnNUMCOLS) With rOld For i = 1 To cnNUMCOLS nColorIndices(i) = .Item(i).Interior.ColorIndex Next i .Interior.ColorIndex = cnHIGHLIGHTCOLOR End With End Sub 

注意:您的代码假设只select了一个单元格 – 如果用户select了多于一行的多个单元格,则行为可能不如预期