2017-07-14 30 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错误。 –