4

我是 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 个不同的令牌要查找)在前面板上汇总了数据,这些数据找到了第一个(即顶部)条目在日志表中。

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

提前致谢!

4

1 回答 1

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
于 2012-04-25T14:32:03.243 回答