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

4
我是一名新手,对vba不熟悉——我只有三天的经验。
无论如何,我有几个表格,用于从用户那里获取一些数据,然后写入到一个单独的“日志”工作表的顶行。我正在使用以下代码:
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

问题在于,它会在日志表上闪烁半秒钟,然后需要很长时间才能写入。
我让它写入日志的顶行,是因为我在前面的工作表中使用了100个varToken的vlookup数据汇总(有100个不同的token要查找),这些vlookup会在日志表中查找第一个(即顶部)条目。
如果可以更快地写入日志表底部,但是我需要一段代码来替换100个vlookup,该代码将在潜在的成千上万行中查找令牌的最后一次提及,并且运行速度快!
提前感谢!
1个回答

10

我认为你的Vlookup在每次写入单元格时都重新计算,这会减慢进程。试试这个方法:

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

2
虽然这很少会失败,但在更改应用程序设置时使用错误处理程序是一个好的实践。(是的,我知道你知道!) - assylias
+1 @assylias:是的,始终处理错误是一个好习惯。 :) - Siddharth Rout
太棒了 - 谢谢!问题解决了。我可以问一下assylias关于错误处理程序的意思吗? - Dazed and Confused
@DazedandConfused:当然可以 :) 请查看此链接http://www.cpearson.com/excel/errorhandling.htm - Siddharth Rout

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接