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提升事件的变化。