2017-04-02 88 views
1

我曾经有以下代码,它曾经工作但由于某种原因它不再有效。更改单元格,如果其他单元格包含文本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的信息对准将标志着关闭。例如,如果AF65 <>“”那么T65.value =“关闭”

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

+0

我收集这是工作表的私人代码表中的Worksheet_Change事件子。这可能包括一些东西。 – Jeeped

+0

嗨,是的,你是对的,我会在代码中添加。 –

+0

它在什么时候起作用,什么时候起作用时发生了什么变化?例如你是否将代码复制到另一个工作簿(并将其放在错误的地方),你是否运行了其他一些禁用了“EnableEvents”的事件,并且您还没有可渲染的事件?你是否开始研究一个新的工作表(即不是那个有Change事件的工作表)?等等等等。 – YowE3K

回答

2

摆脱冗余代码和非特定工作表引用。例如,当该工作表不是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的立即窗口,然后点击[确定]。您的较早代码可能会因事件处理被禁用而崩溃。

+0

真棒!这完美地工作@Jeeped。非常感谢:-)祝你有个美好的一天 –

+1

我很好奇'交叉(目标,范围(“AF3:AF5000”),Target.Parent.UsedRange)' - 是否真的有任何方式,“目标”(即改变的单元格)不能成为'Target.Parent.UsedRange'的一部分? (例如,更改列的颜色是否触发更改事件?)(您可以告诉我不经常使用事件!) – YowE3K

+0

@ YowE3K - 删除完整列或整行可以将Worksheet_Change丢到没有它的内容中。使用.UsedRange,至少您可以将Target内的单元格数量限制为工作表的.UsedRange。我在UDF中使用了一个类似的方法,以便可以在不处理每个单元格的情况下将完整的列引用传递到UDF中。 – Jeeped

相关问题