Цитата |
---|
написал: 3. В вашем коде есть несколько нюансов: он вывалится в ошибку на большом количестве областей (только видимые из отфильтрованного диапазона, например) + вы принудительно в конце выставляете автопересчёт, хотя у пользователя может стоять ручной. |
Ну, во первых, вываливаться в ошибку код в принципе не может ввиду включения в самом начале обработчика ошибок
Во-вторых, несмотря на то, что код чаще всего работает с большим количеством диапазонов, определяемых директивой
Код |
---|
ActiveWindow.RangeSelection.SpecialCells(xlCellTypeConstants).Select |
за более чем 10-летнее достаточно активное использование процедуры как мной лично, так и сотрудниками, с которыми я им поделился, нареканий к её работе не возникало.
В-третьих, вставка сразу всех процедур-ускорителей одной строкой типа
Код |
---|
With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual: End With
…
With Application: .ScreenUpdating = True: .EnableEvents = True: .Calculation = xlAutomatic: End With |
у меня подвешена на горячие клавиши Punto Switcher' а и я не разу не имел с этим проблем.
Более того, за всё своё, наверное 30-летнее активное использование Excel я ещё не встречал пользователей, у которых был осознанно включен ручной пересчёт формул. Но при желании никто не мешает Вам убрать соответствующие директивы из кода.
Самое же главное, "изюминка", в коде - восстановление работы формата циклом не по ячейкам, а по циклом диапазонам способом
Код |
---|
rArea.FormulaLocal = rArea.FormulaLocal |
Это намного быстрее. Идея точно не моя. Обсуждалось здесь на Планете очень давно. Сейчас где-то в архове. Предложил, кажется, Слэн или Hugo , но не уверен.