【发布时间】:2021-02-17 10:08:10
【问题描述】:
我正在使用下面的 Excel 宏,它突出显示整行黄色,并且在进行更改时单元格变为红色。还设置了如果在同一行上更改了其他单元格,则该行保持黄色,第一个更改的单元格保持红色,第二个更改的单元格也变为红色。当您手动更改单元格或复制和粘贴另一个单元格时,宏会起作用。
问题是当我将多个单元格复制并粘贴到一行时,这些突出显示功能不起作用。有谁知道我如何修改下面的宏以突出显示黄色行并使所有单元格复制并粘贴为红色?我仍然想要这样的功能,即如果我更改同一行上的另一个单元格,它将使该行上所有先前更改的单元格保持黄色和红色。提前致谢!
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
【问题讨论】:
-
If .CountLarge = 1 Then表示此功能仅在Target为一个单元格时才有效。 -
也许首先将其更改为
If .Rows.Count = 1 Then应该可以。 -
你的逻辑要么有缺陷,要么解释不充分。 (1) 如果要标记更改的单元格,则需要单独捕获每个单元格的更改。你的代码就是这样做的。 (2) 如果您粘贴多个单元格,all 粘贴的单元格会被更改,即使它们的新值与以前相同。在该动作中,所有单元格都会变成红色。因此,如果要粘贴多个单元格,则需要保留现有解决方案并获取另一个宏来响应该操作。
-
一个允许您粘贴然后标记更改的宏需要在粘贴操作之前记录现有值,然后比较新旧,最后标记更改。如果要粘贴单行,则可以使用 Selection_Change 事件来保留现有值的副本作为比较的基础。但是考虑改变你的工作流程。您复制的数据必须在相同版本的 Excel 中。不能用别的方法转,比如选择源,然后运行宏转吗?