我需要帮助宏来通知我(通过将单元格背景颜色更改为红色),当值(总是数字格式)在行中的任何单元格中发生更改时。如果单元格F3:AN3中的任何值从其当前值更改,我希望单元格E3的背景变为红色。
单元格F3:AN3中的数字将手动输入或通过复制和粘贴行输入,并且不会有任何公式。同样,如果单元格F4:AN4中的任何值发生变化,我希望单元格E4更改为红色背景,依此类推图表中的每一行。并非所有行都将始终具有值,因此我将寻找从“”到任何#,或从一个#到另一个#或从任何#到“”的更改。理想情况下,这将是一个不必手动运行的事件宏。
以下是我开始使用的代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("F3:AN3")) Is Nothing Then KeyCellsChanged
End Sub
Private Sub KeyCellsChanged()
Dim Cell As Object
For Each Cell In Range("E3")
Cell.Interior.ColorIndex = 3
Next Cell
End Sub
然而,无论单元格中的数字是否发生变化,这个宏似乎都会运行,只要按下输入它就会将E3高亮显示为红色。
非常感谢任何帮助!
答案 0 :(得分:3)
根据您在评论中对我的问题的回答,此代码可能会更改。将其粘贴到相关的工作表代码区域中。要使其正常工作,请导航到任何其他工作表,然后导航回原始工作表。
Option Explicit
Dim PrevVal As Variant
Private Sub Worksheet_Activate()
If Selection.Rows.Count = 1 And Selection.Columns.Count = 1 Then
PrevVal = Selection.Value
Else
PrevVal = Selection
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo ExitGraceFully
If Selection.Rows.Count = 1 And Selection.Columns.Count = 1 Then
PrevVal = Selection.Value
Else
PrevVal = Selection
End If
ExitGraceFully:
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.WorksheetFunction.CountA(Target) = 0 Then Exit Sub
Dim aCell As Range, i As Long, j As Long
On Error GoTo Whoa
Application.EnableEvents = False
If Not Intersect(Target, Columns("F:AN")) Is Nothing Then
If Target.Rows.Count = 1 And Target.Columns.Count >= 1 Then
Range("E" & Target.Row).Interior.ColorIndex = 3
ElseIf Target.Rows.Count > 1 And Target.Columns.Count = 1 Then
i = 1
For Each aCell In Target
If aCell.Value <> PrevVal(i, 1) Then
Range("E" & aCell.Row).Interior.ColorIndex = 3
End If
i = i + 1
Next
ElseIf Target.Rows.Count > 1 And Target.Columns.Count > 1 Then
Dim pRow As Long
i = 1: j = 1
pRow = Target.Cells(1, 1).Row
For Each aCell In Target
If aCell.Row <> pRow Then
i = i + 1: pRow = aCell.Row
j = 1
End If
If aCell.Value <> PrevVal(i, j) Then
Range("E" & aCell.Row).Interior.ColorIndex = 3
End If
j = j + 1
Next
End If
End If
LetsContinue:
Application.EnableEvents = True
Exit Sub
Whoa:
Resume LetsContinue
End Sub
<强>快照强>
按预期工作当您在单元格中键入值时。当您复制1个Cell并将其粘贴到多个单元格中时,它也可以工作。当你复制一个单元格块并进行粘贴时,它不工作(我还在努力)
注意:这未经过广泛测试。
答案 1 :(得分:2)
以下是我最喜欢的检测Excel VBA应用程序更改的方法:
我喜欢这种方法: