如何加速这段代码VBA

时间:2016-01-17 16:02:01

标签: excel vba excel-vba

enter image description here

如果范围内的任何单元格被更改,则此代码非常简单,它应将日期和时间放在该行的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

2 个答案:

答案 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