0

问题是当我用某种颜色突出显示一行时,该行的原始颜色消失了,所以我尝试了这段代码,它再次删除了该行的原始格式和颜色

这是来自http://www.mcgimpsey.com/excel/highlightrow.html的代码

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
        Const cnNUMCOLS As Long = 256
        Const cnHIGHLIGHTCOLOR As Long = 36  '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

那么,这个问题我该怎么办呢?如何保留范围的历史颜色,以便当我取消选择该行时它会正确恢复?

4

2 回答 2

1

用条件格式伪造它。

使用条件格式将单元格设置为所需的颜色。作为条件,使用公式=ROW()=$C$12

然后(在此示例中)更改C12为要突出显示的行。将其设置为范围之外的行以删除突出显示。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Cells(12, 3) = Target.Row
End Sub
于 2012-09-06T19:51:26.520 回答
0

这是一种在每次用户更改选择时都不会清除撤消堆栈的方法。这保留了重要且通常必不可少的正常撤消行为。

定义名称

这不是一个命名范围。它将是一个存储值而不必将其存储在单元格内的名称。我们将使用它来存储活动/选定行的编号。通过将其存储在定义的名称而不是单元格中,我们保留了 Excel 的撤消堆栈。

  1. 转到公式>名称管理器>新建

  2. 设置以下字段值:

    名称: ActiveRow

    范围:工作簿

    指: 1

  3. 单击确定

将 VBA 代码添加到工作表模块

将以下代码添加到要突出显示活动行的工作表模块中。

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    Excel.ThisWorkbook.Names("HighlightRow").Value = Excel.Selection.Row
End Sub

向工作表添加条件格式

  1. 选择整个工作表中的所有单元格。

  2. 转到主页>条件格式>新规则

  3. 在 - 选择规则类型 - 下,单击使用公式确定要格式化的单元格

  4. 单击格式并定义您的格式。

  5. 将公式设置为:

    =ROW()=ActiveRow

    (“ActiveRow”是您之前设置的定义名称。)

而已!

于 2021-12-27T08:54:41.613 回答