Операции со столбцами / строками (вставка, удаление) очень медленные в Excel 2010 - PullRequest
1 голос
/ 22 марта 2011


У меня большие проблемы с макросом VBA, который я написал для Excel 2003. Он импортирует некоторые данные из других файлов. В результате размер файла Excel (количество строк / кол-во) увеличивается с каждым импортированным файлом. В Excel 2003 он работает очень быстро для первых 50 импортированных файлов, а затем замедляется. Но в Excel 2010 это занимает значительное время даже для небольшого количества файлов. Проблема заключается в одном утверждении, которое выполняется много раз:

Sheets("Sheetname").Rows(LastRow).Insert Shift:=xlDown

Эта строка занимает около секунды в Excel 2010, когда размер файла увеличивается. Когда я добавляю строку вручную, я испытываю ту же проблему.

Я делаю обычные вещи, чтобы улучшить производительность:

Application.ScreenUpdating = False  
Application.DisplayStatusBar = False  
Application.Calculation = xlCalculationManual  
Application.EnableEvents = False  
ActiveSheet.DisplayPageBreaks = False  
ActiveSheet.AutoFilterMode = False

Заранее спасибо за помощь. Я почти уверен, что кто-то еще уже имел эту проблему.

Ответы [ 4 ]

2 голосов
/ 23 марта 2011

Проблема была в том, что я применил условное форматирование. Для каждой новой строки, добавленной в отчет, было создано новое правило условного формата, чтобы закрасить ячейку в одном столбце, которая была одинаковой для каждой строки (например, правило форматирования было «если ячейка в столбце A текущей строки содержит» включите, а затем сделайте ячейку зеленой ").
В Excel 2003 условные форматы, по-видимому, не пересчитываются, если Application.Calculation установлен вручную или условные форматы обрабатываются по-другому (я не знаю).
Зная это, я вручную создал правило условного формата для всех столбцов, которые нужно было раскрасить, и удалил код, чтобы закрасить отдельные ячейки в электронной таблице. Теперь все работает быстро в Excel 2010.
Интересно, есть ли возможность подать отчет об ошибке (отключить пересчет условного формата, если для Application.Calculation задано ручное управление).

1 голос
/ 22 марта 2011

Использование вставки является медленным, потому что заставляет Excel выполнять большую работу.Намного быстрее просто записать большой кусок данных непосредственно из варианта на лист.Если вы хотите сохранить некоторые формулы внизу, такие как итоги, то было бы быстрее скопировать блок формул в вариант, записать данные на лист, настроить формулу и затем записать ее в конце.Если у вас есть другие формулы, которые ссылаются на лист, куда добавляются данные, вы можете использовать имена динамических диапазонов для ссылки на данные или обычные имена диапазонов для ссылки на общие формулы.

0 голосов
/ 11 октября 2018

Очень странно .... Вставка строки была быстрой.Затем я отсортировал ряд строк, и он стал мучительно медленным.Я удалил строку после UsedRange, и это снова было хорошо!

0 голосов
/ 14 сентября 2016

Немного опоздал на вечеринку, но сначала импортируйте все данные, затем добавьте форматирование / условное форматирование для диапазона вместо нового условного форматирования для каждой записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...