如何仅突出显示最后编辑的行?
Posted
技术标签:
【中文标题】如何仅突出显示最后编辑的行?【英文标题】:How to highlight only the last edited row? 【发布时间】:2019-07-11 17:32:56 【问题描述】:我有一个 Excel 中的客户数据表,可以使用 VBA 用户表单添加/编辑。因此,我想突出显示刚刚添加/编辑的行。这是我第一次使用 VBA,所以我搜索并找到了来自 here 的代码:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Value <> "" Then
Target.Interior.ColorIndex = 6
End If
End Sub
效果很好,但以前的编辑/附加组件的亮点仍然存在。我只想突出显示最后一个。
【问题讨论】:
【参考方案1】:使用变量。当您更改颜色时,将范围存储在其中。下次从该范围中删除颜色。
这是你正在尝试的吗?
Dim prevRng As Range
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim aCell As Range
If Not prevRng Is Nothing Then prevRng.Interior.ColorIndex = xlNone
Set prevRng = Target
For Each aCell In Target
If aCell.Value <> "" Then aCell.Interior.ColorIndex = 6
Next aCell
End Sub
这将处理评论中提到的@Pᴇʜ 的多个单元格。
【讨论】:
你需要一个Target
的循环来遍历它的单元格。它可能是一个范围而不是单个单元格,然后 Target.Value <> ""
失败。
真的……会合并……片刻
请问您为什么要添加If
声明?我的意思是循环甚至会在Target
上运行一个单元格。这是性能上的差异吗?还是我错过了什么?
我在办公室,所以目前无法为此投入任何时间。今晚晚些时候会再看这篇文章
@SiddharthRout 如果只是需要处理一个特定的表/工作表,那么您可以将Workbook_SheetChange
切换到特定的Worksheet_Change
事件,您的解决方案将适合(除了节省我描述的效果)。这会将问题简化为一个更简单的问题。【参考方案2】:
这里有一些代码可以为你工作:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Removing old conditional formatting if it exists already
Conditions = ActiveSheet.Cells.FormatConditions.Count
For i = 1 to Conditions
If ActiveSheet.Cells.FormatConditions(i).Type = 2 Then
If ActiveSheet.Cells.FormatConditions(i).Formula1 = "=1" Then ActiveSheet.Cells.FormatConditions(i).Delete
End If
Next i
'Adding new conditional formatting rule to the edited range
Target.EntireRow.FormatConditions.Add Type:=xlExpression, Formula1:="=1"
Target.EntireRow.FormatConditions(1).Interior.ColorIndex = 6
End Sub
目前它将突出显示所有工作表中所有最后编辑的行。不确定这是否是您想要的。
当新范围发生变化时,它会保持工作表中的彩色单元格完好无损。 它将保持其他条件格式规则不变。 它会突出显示最后编辑的范围,即使该范围已被清除!【讨论】:
要么向后运行循环 (For i = Conditions To 1 Step -1
),要么在 If
语句中包含 Exit For
- 否则,当 "=1"
条件不是最后一个时,您将收到错误一。
@Chronocidal,感谢您的提醒。我已经用另一个 if 语句更新了代码,因为向后迭代和 Exit For
策略都起作用并产生了另一个错误。任何理论为什么 And
语句也不起作用?以上是关于如何仅突出显示最后编辑的行?的主要内容,如果未能解决你的问题,请参考以下文章