当另一个单元格最近被编辑时,改变一个单元格的样式(坏)

我正在试图制作一个可以使用的傻瓜工具。

例; 当有人编辑单元格H2(即使他们不改变它,只要他们开始编辑阶段),我希望单元格H3立即改变它的风格坏(红色)。 同样编辑H30; 改变H31,H58改变H59,H86改变H87。

这是通过VBA或条件格式?

只需testingWorksheet_Change事件中的更改即可。 把这样的东西放在适当的工作表的代码模块中:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim addr As String addr = Target.Address Select Case addr Case "$H$2", "$H$30", "$H$58", "$H$86" Target.Offset(1).Style = "Bad" End Select End Sub 

你也可以使用:

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("H2, H30, H58, H$86")) Is Nothing Then Target.Offset(1).Style = "Bad" End Sub 

此外,您可能希望在用户进入任何禁用单元时通过应用“Alert”风格警告用户,如果不经修改就将其删除

在这种情况下,你可以试试这个代码:

 Option Explicit Const forbiddenRngAddr As String = "H2, H30, H58, H$86" Dim oldRng As Range Dim oldValue As Variant Dim oldStyle As String Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range(forbiddenRngAddr)) Is Nothing Then Target.Offset(1).style = "Bad" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not oldRng Is Nothing Then If Not Intersect(oldRng, Range(forbiddenRngAddr)) Is Nothing Then If oldValue = oldRng.Value Then oldRng.Offset(1).style = oldStyle End If End If With Target If Not Intersect(.Cells, Range(forbiddenRngAddr)) Is Nothing Then oldStyle = .Offset(1).style .Offset(1).style = "Alert" End If Set oldRng = .Cells oldValue = .Value End With End Sub 

最后,如果您在处理任何用户修改后,可能需要更清晰的代码,然后才可能在单元格中漫游

在这里,我使用注释来存储不正确地更改的旧单元格的旧值和样式,以供后续用户input检索和检查

 Option Explicit Const forbiddenRngAddr As String = "H2, H30, H58, H$86" Dim oldRng As Range Dim oldValue As Variant Dim oldStyle As String Private Sub Worksheet_Change(ByVal Target As Range) With Target If Not Intersect(.Cells, Range(forbiddenRngAddr)) Is Nothing Then If .Comment Is Nothing Then .Offset(1).style = "Bad" With .AddComment .Visible = False .Text oldValue & "|" & Target.style End With Else If .Text = Split(.Comment.Text, "|")(0) Then .Offset(1).style = Split(.Comment.Text, "|")(1) .Comment.Delete Else .Offset(1).style = "Bad" End If End If End If End With End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not oldRng Is Nothing Then If Not Intersect(oldRng, Range(forbiddenRngAddr)) Is Nothing Then If oldValue = oldRng.Value Then oldRng.Offset(1).style = oldStyle End If End If With Target If Not Intersect(.Cells, Range(forbiddenRngAddr)) Is Nothing Then oldStyle = .Offset(1).style .Offset(1).style = "Alert" End If Set oldRng = .Cells oldValue = .Value End With End Sub