2

У меня есть таблица с несколькими макросами. Как правило, при использовании Excel 2007 пользователь нажимает кнопку, и все работает как положено (вычисления, отправка электронной почты и файловый ввод-вывод). Как правило, ожидаемое время выполнения составляет около 90 секунд. Электронная таблица представляет собой файл xlsm, созданный в Excel 2007.

Однако в Excel 2010 тот же пользовательский процесс приводит к тому, что Excel перестает отвечать на запросы и вынуждает нас убивать Excel из диспетчера задач.

Некоторые заметки, которые я собрал до сих пор, пытаясь отладить эту проблему:

  1. При мониторинге использования процессора кажется, что Excel запускает макрос. Загрузка процессора увеличивается, как ожидается, примерно до 47% в течение нескольких секунд. Excel.exe, чем падает до 0% использования, и теперь у меня есть неотвечающий Excel (даже через 1 час).
  2. Если я установлю точки прерывания отладки для модулей и различных функций и пошагово покажу код (после нажатия кнопки), процесс будет работать, как и ожидалось, хотя и намного медленнее. Чтобы добавить, не было никаких исключений.

Я в полной растерянности относительно того, в чем может быть проблема. Сначала я подумал, что это может быть добавление, которое используется, но оно было опровергнуто пунктом 2.

Это кажется очень странной ситуацией. Я могу предоставить больше информации, если потребуется, но я не знаю, какова может быть основная причина. Мне нужна помощь в диагностике и решении этой проблемы.

3 ответа3

0

Спасибо за эту помощь.

Я запускал макрос в разработке и вживую. У меня не было проблем в DEV, но он висел вживую. Он работает на сервере, а не на локальном ПК. Я помню, что когда мы впервые попробовали это вживую, нам пришлось убить задачу, и она зависла при последующих попытках. Как только я добавил строки application.screenupdating = TRUE doevents() doevents()

непосредственно перед application.screenupdating = FALSE

макрос работал как задумано.

0

В дополнение к ранее упомянутым ответам, если ваша таблица Excel содержит довольно большие объемы данных, попробуйте сохранить ее как двоичную книгу Excel (* .xlsb)

Бинарный формат намного быстрее, чем стандартный формат Excel. Надеюсь, ваши макросы смогут работать быстрее.

0

Это может быть не ваш ответ, но я видел ситуацию, которая дает результаты, которые вы описали.

Посмотрите в макросе (ах) следующее утверждение:

Application.ScreenUpdating = False

Это говорит интерфейсу Excel интерфейса не показывать никаких изменений / обновлений / ничего, что происходит. Это может быть желательно во время работы макроса. Тем не менее, вы должны убедиться, что макрос в какой-то момент устанавливает значение true, как это:

Application.ScreenUpdating = True

Если для этого параметра никогда не устанавливается значение «Истина», возникает ситуация, описанная вами.

Сначала найдите в коде установленное свойство ScreenUpdating, удалите его и посмотрите, решит ли это проблему.

Если вы нигде не обнаружите «ScreenUpdating» в коде, у вас есть другая проблема.

Редактировать: похоже, кто-то уже упомянул обновление экрана в комментариях выше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .