更改单元格,如果其他单元格包含文本vba

我曾经有以下代码,它曾经工作,但由于某种原因,它不再起作用。

Private Sub Worksheet_Change(ByVal Target As Range) Dim test As Range Dim KeyCells As Range Dim i As String Set KeyCells = Range("AF3:AF5000") test = Target.Rows.Count If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then For i = Target.Row To (Target.Row + (Target.Rows.Count - 1)) If Not ActiveSheet.Cells(i, 32) = "" Then ActiveSheet.Cells(i, 20).Value = "Closed" End If Next End If End sub 

基本上,如果列AF中的任何单元格中存在数据,则单元格与列T中的信息alignment将标记为“closures”。 例如,如果AF65 <>“”那么T65.value =“closures”

任何想法,为什么它不再有效,或者如果有macros观的另一种可能性?

摆脱冗余代码和非特定的工作表引用。 例如,当工作表不是Activesheet时,可以触发一个Worksheet_Change; 当不需要的时候放入Activesheet只会混淆问题。

你也不是禁用事件,所以你的子将尝试运行在本身之上。

这应该更接近你正在尝试执行。

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("AF3:AF5000"), Target.Parent.UsedRange) Is Nothing Then On Error GoTo safe_exit Application.EnableEvents = False Dim trgt As Range For Each trgt In Intersect(Target, Range("AF3:AF5000"), Target.Parent.UsedRange) If CBool(Len(trgt.Value2)) Then trgt.Offset(0, -12) = "Closed" Else trgt.Offset(0, -12) = vbNullString End If Next trgt End If safe_exit: Application.EnableEvents = True End Sub 

如果您的原始子只是“停止工作”,然后把Application.EnableEvents = True到VBE的立即窗口,并点击[enter]。 您的较早代码可能会在事件处理被禁用的情况下崩溃。