在Excel 2003 vba中插入新行非常慢

Daz*_*sed 4 excel vba excel-2003 excel-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
Run Code Online (Sandbox Code Playgroud)

麻烦的是,它会在日志表上轻弹半秒钟,然后需要很长时间才能写入.

我把它写到日志的顶行的原因是我在前面的表格中总结了使用100个varlook的vlookup(要查找100个不同的标记),它们找到了第一个(即顶部)条目在日志表中.

如果速度更快,我可以写到日志表的底部,但是我需要一个代码来替换100个vlookups,这些代码可能会在成千上万行中查找最后一个令牌,并且会快速运行!

提前致谢!

Sid*_*out 10

我相信你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
Run Code Online (Sandbox Code Playgroud)

  • 虽然这不太可能失败,但最好在更改应用程序设置时使用错误处理程序.(是的我知道你知道!) (2认同)