2012-04-25 2 views
4

Я новичок в vba - я буквально делал это только 3 дня.Вставка новой строки очень медленно в Excel 2003 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 vlookups varToken (для поиска есть 100 разных токенов), которые находят первый (т.е. верхний) вход в лог-лист.

Я могу написать в нижней части логарифма, если быстрее, но тогда мне понадобится код для замены 100 vlookups, которые будут искать последнее упоминание токена в потенциально тысячах и тысячах строк и будут бежать быстро!

Заранее благодарен!

ответ

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 
+2

Хотя это вряд ли сбой, рекомендуется использовать обработчики ошибок при изменении настроек приложения. (Да, я знаю, что вы знаете!) – assylias

+0

+ 1 @assylias: Да, это хороший момент для обработки ошибок всегда. :) –

+0

Блестящий - спасибо! Это отсортировано. Могу ли я спросить, что означает assylias относительно обработчиков ошибок? –

Смежные вопросы