excel vba – 将值写入单元格时延迟

我有一个子程序,使用vlookup从另一个表中检索出生date,并将其写入当前工作表。 子工作正常,但非常缓慢。 我知道有很多方法可以加速vba,比如避免在vba代码中使用excel命令,但是通过它我发现延迟发生在将date写入单元格的时候。 有什么build议么?

Private Sub Worksheet_Change(ByVal Target As Range) Dim finalrow As Long, DoB As Date ActiveSheet.Unprotect finalrow = ActiveSheet.Cells.Find(What:="*", After:=Cells(1, 1), LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).row If finalrow > 13 Then ActiveSheet.Range(Cells(finalrow - 1, 1), Cells(finalrow - 1, 26)).Locked = True ActiveSheet.Range(Cells(finalrow - 1, 1), Cells(finalrow - 1, 3)).Interior.Color = RGB(200, 200, 200) ActiveSheet.Range(Cells(finalrow, 1), Cells(finalrow, 26)).Locked = False ActiveSheet.Cells(finalrow + 1, 1).Locked = False DoB = Application.WorksheetFunction.VLookup(ActiveSheet.Cells(finalrow, 1).Value, Sheet1.Range("A:B"), 2, False) ActiveSheet.Cells(finalrow, 2).Value = DoB ' this line causes delay Else ActiveSheet.Cells(finalrow + 1, 1).Locked = False End If ActiveSheet.Protect End Sub 

因为这是触发工作表中任何更改事件过程 ,这一行实际上将再次引发事件:

 ActiveSheet.Cells(finalrow, 2).Value = DoB 

你需要的是事件优先的时候内部禁用事件的方法。 幸运的是,有一种方法可以做到这一点,这是应用程序的内置属性:

您可以执行Application.EnableEvents = False (在开始处),然后Application.EnableEvents = True (在结尾处)。

这将防止由于此过程而引起的recursion提升事件的变化。