在Excel 2003 vba中插入新行很慢

我是vba的新手 – 我从字面上来说只做了3天。

无论如何,我有几个表单从用户那里获取一些数据,然后我把它们写到一个单独的“日志”表的最上面一行。 我正在使用这个:

With Worksheets("Log") .Unprotect .Range("A2").EntireRow.Insert Shift:=xlDown .Range("A2") = varToken .Range("B2") = varAction .Range("C2") = varLocation .Range("D2") = varTracking .Range("E2") = Date .Range("F2") = Time .Range("G2") = varPerson .Range("H2") = varOverride .Protect End With 

麻烦的是,它在日志表中弹了半秒钟,然后花费很长时间来写。

我把它写到日志的最上面一行的原因是,我使用varToken的100个vlookup(有100个不同的标记来查找)在前面的表格中汇总了数据,它们查找第一个(即top)条目在日志表中。

如果更快,我可以写入日志表的底部,但是之后我需要一个代码来replace100个将查找最后一个令牌的代码,这个代码可能会在成千上万的行中出现,并且会很快运行!

提前致谢!

我相信你的Vlookups正在减慢这个过程,因为每次你写入一个单元格的时候,它们都会被重新计算。 尝试这个

 With Application .ScreenUpdating = False .Calculation = xlCalculationManual End With With Worksheets("Log") .Unprotect .Range("A2").EntireRow.Insert Shift:=xlDown .Range("A2") = varToken .Range("B2") = varAction .Range("C2") = varLocation .Range("D2") = varTracking .Range("E2") = Date .Range("F2") = Time .Range("G2") = varPerson .Range("H2") = varOverride .Protect End With With Application .ScreenUpdating = True .Calculation = xlCalculationAutomatic End With