2017-07-14 35 views
2

我是一個新手編碼器,最近正在脫離基於Web的編碼,並且與我的腳本有錯誤。我已經可以看出,這是很糟糕的腳本,並想知道我是否可以得到任何幫助。上次修改後跟蹤的基本IF聲明錯誤

該腳本只是假設在該範圍內的任何單元格發生更改後,將等效偏移單元格設置爲當前時間和日期。我相信我的可憐的腳本要麼導致循環或計算錯誤的信息,因爲事件發生後excel崩潰。

任何幫助將不勝感激。

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Intersect(Target, Range("E5:E100")) Is Nothing Then 
     Target.Offset(0, 3) = Now() 
     Target.Offset(0, -1) = Target.Offset(0, -1).Value + 1 
    Else 
     If Intersect(Target, Range("F5:F100")) Is Nothing Then Exit Sub 
     Target.Offset(0, 2) = Now() 
     Target.Offset(0, -1) = Target.Offset(0, -1).Value + 1 
    End If 
End Sub 

回答

1

使用If Intersect(Target, Range("E5:E100")) Is Nothing爲準則正在檢查目標相交的範圍。我要去承擔,根據你使用你在E欄只有真正感興趣的偏移量和F.

Private Sub Worksheet_Change(ByVal Target As Range) 
Application.EnableEvents = False 'prevent event re-firing based on changes made by the event 
If Not (Intersect(Target, Range("E5:F100")) Is Nothing) Then 
    Target.Offset(0, (7 - Target.Column)) = Now() 
    Target.Offset(0, -(Target.Column - 4)) = Target.Offset(0, -(Target.Column - 4)).Value + 1 
End If 
Application.EnableEvents = True 'allows event to fire again 
End Sub 

所以要澄清,上述查找在列E或F的變化(行5到100),並且是否有人將日期標記寫入列G中的同一行,並將計數器寫入列D.

+0

基本上,我的目標是我有兩列,「E5:E100」和「F5:F100」。每當這些列中的任何一個被更新時。我希望通過更新第三列(在這種情況下的列H)來反映它被修改的當前時間和日期。第二個「Target.Offset(0,-1)= Target.Offset(0,-1).Value + 1」是我在任何時候在「迭代跟蹤器」上的嘗試,這個值會改變。迭代進行一次。 –

+0

哦。問題是Offset(0,-1)如果由於F列的更改而被解僱,將寫入E列 - 這聽起來可能不是您想要的? – CLR

+0

你說得對,當我第一次創建腳本時,我相信這是我的一個疏忽。 –

1

您需要temprorarily情況發生,你正在改變紙張,然後再次引發事件的值停止活動,並繼續循環,直到Excel崩潰。

Application.EnableEvents = False 

起初並確保添加

Application.EnableEvents = True 

在結束時再將其打開。

所以:

Private Sub Worksheet_Change(ByVal Target As Range) 

If Not Intersect(Target, Range("E5:E100")) Is Nothing Then 
    Application.EnableEvents = False 
    Target.Offset(0, 3) = Now() 
    Target.Offset(0, -1) = Target.Offset(0, -1).Value + 1 
    Application.EnableEvents = True 
Else 
If Not Intersect(Target, Range("F5:F100")) Is Nothing Then 
    Application.EnableEvents = False 
    Target.Offset(0, 2) = Now() 
    Target.Offset(0, -1) = Target.Offset(0, -1).Value + 1 
    Application.EnableEvents = True 
    End If 
End Sub 
+0

非常感謝,這非常有幫助。我相信這不是我想要的。謝謝你指出。 –

+0

根據您對CLR @DrewDicenso的評論編輯您想要的內容 –

+0

截至此刻,我已根據您的兩條建議重新編寫了我的代碼。我目前正試圖在第一行中發現Block If錯誤。 –