Ускорение работы макросов

Макросы, если они правильно работают, могут облегчить нашу жизнь. (Если они работают неправильно, жизнь определенно нелегка.) Если у вас есть макрос, который делает за вас много работы, вам может быть интересно попробовать заставить его работать быстрее.

Конечно, первая задача – изучить макрос и посмотреть, насколько эффективны ваши алгоритмы (в том виде, в котором вы решили действовать). Когда вы удовлетворены этим, вы также можете ускорить выполнение макросов, просто поместив несколько операторов в одну строку. Рассмотрим следующий простой макрос, который находит предыдущее вхождение чего-либо в документе:

 Sub PrevFind () With Selection.Find .ClearFormatting .Forward = False .Wrap = wdFindAsk .Execute End WithEnd Sub 

Этот макрос очень прост. Когда вы сохраняете макрос, содержащиеся в нем операторы разбираются до трехбайтовых токенов, которые могут более эффективно выполняться с помощью VBA. (Вы никогда не видите токенов; вы видите только макроязычный эквивалент токенов.) Когда макрос запущен, командный процессор VBA захватывает одну строку за раз и выполняет все токены в этой строке. Таким образом, в вышеизложенном есть восемь строк, которые индивидуально выбираются и выполняются процессором.

Теперь рассмотрим следующую версию того же макроса:

 Sub PrevFind (  ) With Selection.Find .ClearFormatting: .Forward = False: .Wrap = wdFindAsk: .ExecuteEnd With: End Sub 

Эта версия кажется намного короче, потому что отдельные строки были объединены и разделены двоеточием. Это снижает удобочитаемость макроса, но увеличивает скорость его выполнения. Почему? Потому что командный процессор VBA по-прежнему захватывает строку для обработки. В этом случае нужно захватить только четыре строки. Меньшее «время захвата» означает, что выполнение выполняется быстрее. Третья строка этого макроса, которая раньше занимала четыре строки, теперь обрабатывается как одна строка.

Размещение нескольких операторов в одной строке снижает удобочитаемость макроса. Однако, в зависимости от ваших потребностей, это может быть справедливым компромиссом для увеличения скорости, которого вы можете достичь. Вам нужно будет попробовать эту технику в своих макросах, чтобы понять, подходит ли она вам.

Оцените статью
Frestage.ru
Добавить комментарий