如果范围内的任何单元格被更改,则此代码非常简单,它应将日期和时间放在该行的col A中。
对于较大的范围,这需要太长时间我试图在IF语句之后退出sub但是它变慢并且EXCEL停止响应直到它完成代码
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range
Dim m As Long
For Each Cel In Range("B2:Z104857")
If Not Intersect(Target, Cel) Is Nothing Then
m = Cel.Row
With ActiveSheet.Range("A" & m)
.Value = Date & " " & Time
.NumberFormat = "dd/mm/yyyy hh:mm AM/PM "
End With
Exit Sub
End If
Next Cel
End Sub
答案 0 :(得分:2)
我的猜测是Target
小于Range("B2:Z104857")
(巨大的范围)
所以如果你换掉这行:
For Each Cel In Range("B2:Z104857")
通过
For Each Cel In Target
你应该获得惊人的加速。
此外 - 放置
会造成伤害Application.ScreenUpdating = False
在您的潜艇开头和
Application.ScreenUpdating = True
最后。
On Edit:@CharlesWilliams指出,在子点的开头添加行Application.EnableEvents=False
并在结尾添加Appication.EnableEvents=True
也是一个好主意。这是因为事件处理程序有时会导致级联行为,事件处理程序会进行更改,从而触发其他事件处理程序(可能还会触发其他事件处理程序......)。
答案 1 :(得分:1)
你能检查一下你的约束中的target.column,与行相同,然后是单元格(target.Row,1).value = now?
If (target.column>=2 and target.column<=26) and (target.row>=2 and target.row<=10000) then cells(target.Row,1).value =now