【问题标题】:How to highlight a line in Exel yellow and the cells red when making changes (with more than one change)进行更改时如何以黄色突出显示 Excel 中的一行和红色的单元格(进行多次更改)
【发布时间】:2021-01-17 18:57:56
【问题描述】:

在更改单元格时,我使用以下公式突出显示黄色行和红色单元格。问题是有时我们想要对一行进行多次更改,并希望所有发生更改的单元格保持红色,但是当更改行中的第二个单元格时,此公式会清除第一个红色单元格。是否可以添加一些例外来防止在进行第二次更改时已经红色的单元格变为黄色?

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
    Target.EntireRow.Interior.Color = vbYellow
    Target.Interior.Color = vbRed
End Sub

【问题讨论】:

  • 您要编程的逻辑是突出显示黄色除非它已经是黄色。测试一个不会改变的单元格的颜色。
  • 不,如果已经是红色,我不想突出显示黄色的单元格。

标签: excel row cell highlight


【解决方案1】:

请试试这个代码。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    Dim Cl      As Long                 ' last used column

    With Target
        If .CountLarge = 1 Then
            ' change .Row to longest used row number
            ' if your rows aren't of uniform length
            If Sh.Cells(.Row, "A").Interior.Color <> vbYellow And _
               Sh.Cells(.Row, "A").Interior.Color <> vbRed Then
                Cl = Sh.Cells(.Row, Columns.Count).End(xlToLeft).Column
                Sh.Range(Sh.Cells(.Row, 1), Sh.Cells(.Row, Cl)).Interior.Color = vbYellow
            End If
            .Interior.Color = vbRed
        End If
    End With
End Sub

上述过程未经测试。事实上,我想知道您为什么使用 Workbook 事件。但是,我确实测试了下面的函数,也许这就是你所需要的。

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Cl      As Long                 ' last used column

    With Target
        If .CountLarge = 1 Then
            ' change .Row to longest used row number
            ' if your rows aren't of uniform length
            If Cells(.Row, "A").Interior.Color <> vbYellow And _
               Cells(.Row, "A").Interior.Color <> vbRed Then
                Cl = Cells(.Row, Columns.Count).End(xlToLeft).Column
                Range(Cells(.Row, 1), Cells(.Row, Cl)).Interior.Color = vbYellow
            End If
            .Interior.Color = vbRed
        End If
    End With
End Sub

【讨论】:

  • 太棒了!请将答案标记为已选择,以便其他人可以从您的测试工作中受益。
  • 如何将其标记为选中?另外,还有一个问题也许您可以提供帮助。当我复制一个单元格并将其粘贴到另一个单元格时,它会突出显示整行黄色和红色单元格并允许一行中有多个红色单元格,这是我喜欢的,但是如果我复制多个单元格并将其粘贴到另一个区域,它确实使已更改的单元格变为红色,但行未以黄色突出显示。你知道我怎么做吗?我试过了,失败了。
  • 答案左上角有一个勾勒勾号,您可以单击以选择答案。查看代码行If .CountLarge = 1 Then。这意味着当您粘贴多个单元格时,以下代码将不会运行。因此红色被复制,未应用,黄色未应用,因为代码没有运行。考虑将Else 添加到现有的If 并告诉代码要做什么。您不能只删除If,因为这样所有粘贴的单元格都会变成红色。
  • 嗨 Variatus,你能帮我写下子吗?我不知道在哪里放 Else 和放什么。
  • 我已经写了一个子,你说它对你有用。我认为这改变了条件。最好将您的要求放入一个新问题中。
猜你喜欢
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 2017-03-24
相关资源
最近更新 更多