我曾经拥有以下代码并且它曾经工作但由于某种原因它不再有效。
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中的信息对齐将标记为已关闭。例如,如果AF65<>“”则T65.value =“Closed”
知道为什么它不再有用或者是否有其他宏的可能性?
答案 0 :(得分:2)
删除冗余代码和非特定工作表引用。例如,当工作表不是活动表时,可以触发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的立即窗口,然后点击[输入]。您的早期代码可能会因禁用事件处理而崩溃。