2017-04-02 93 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

相關問題