Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Мнимое зависание Excel - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Мнимое зависание Excel (Макросы/Sub)
Мнимое зависание Excel
TD_MElec Дата: Вторник, 27.10.2020, 13:51 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Доброго дня.
Для визуализации процесса обработки добавил код вызывающий юзерформу и отображающий своеобразный статус бар.
Иногда это отрабатывает отлично, а иногда вроде "зависает", но процесс идет все равно (всё ищется, считается и складывается)
Пример зависания:


Код визуализации:


Как нибудь можно это исправить?

PS Опечатку в окошке исправил :)
 
Ответить
СообщениеДоброго дня.
Для визуализации процесса обработки добавил код вызывающий юзерформу и отображающий своеобразный статус бар.
Иногда это отрабатывает отлично, а иногда вроде "зависает", но процесс идет все равно (всё ищется, считается и складывается)
Пример зависания:


Код визуализации:


Как нибудь можно это исправить?

PS Опечатку в окошке исправил :)

Автор - TD_MElec
Дата добавления - 27.10.2020 в 13:51
Alex_ST Дата: Вторник, 27.10.2020, 16:52 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3116
Репутация: 591 ±
Замечаний: 0% ±

2003
Попробуйте вместо формы выводить состояние процесса в Application.StatusBar
А по окончании восстанавливайте нормальный статусбар командой Application.StatusBar = False



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеПопробуйте вместо формы выводить состояние процесса в Application.StatusBar
А по окончании восстанавливайте нормальный статусбар командой Application.StatusBar = False

Автор - Alex_ST
Дата добавления - 27.10.2020 в 16:52
TD_MElec Дата: Вторник, 27.10.2020, 18:13 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Alex_ST,
Спасибо, за совет. Попробовал, провел небольшой опрос. в статус бар вообще никто не смотрит (из 5 чел 0) - это во первых, а во вторых, опять же при избранных запросах произошла такая же ерунда, что вроде завис, но не завис.
Но статус бар оставил), дублирую и в нем ход работы.

Думал возможно как-то "замедлить", пусть это будет на пару секунд дольше, но из-за постоянного изменения на экране картинки, пользователь не будет думать, что всё повисло.
 
Ответить
СообщениеAlex_ST,
Спасибо, за совет. Попробовал, провел небольшой опрос. в статус бар вообще никто не смотрит (из 5 чел 0) - это во первых, а во вторых, опять же при избранных запросах произошла такая же ерунда, что вроде завис, но не завис.
Но статус бар оставил), дублирую и в нем ход работы.

Думал возможно как-то "замедлить", пусть это будет на пару секунд дольше, но из-за постоянного изменения на экране картинки, пользователь не будет думать, что всё повисло.

Автор - TD_MElec
Дата добавления - 27.10.2020 в 18:13
Alex_ST Дата: Вторник, 27.10.2020, 22:11 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3116
Репутация: 591 ±
Замечаний: 0% ±

2003
К стати, а Вы ускорители в коде перед началом циклов используете?
Перед началом расчёта запретите все тормозящие события:[vba]
Код
With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: .Calculation = xlManual: End With
[/vba] а после окончания опять их разрешите:[vba]
Код
With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: .Calculation = xlAutomatic: End With
[/vba]
У Вас, возможно, именно вывод на форму тормозит.
А в статусбаре информация отображается несмотря на Application.ScreenUpdating = False
Попробуйте включить таймер и один и тот же массив данных обработать своим ЦИКЛом с выводом прогресса на форму и без него.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Вторник, 27.10.2020, 22:21
 
Ответить
СообщениеК стати, а Вы ускорители в коде перед началом циклов используете?
Перед началом расчёта запретите все тормозящие события:[vba]
Код
With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: .Calculation = xlManual: End With
[/vba] а после окончания опять их разрешите:[vba]
Код
With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: .Calculation = xlAutomatic: End With
[/vba]
У Вас, возможно, именно вывод на форму тормозит.
А в статусбаре информация отображается несмотря на Application.ScreenUpdating = False
Попробуйте включить таймер и один и тот же массив данных обработать своим ЦИКЛом с выводом прогресса на форму и без него.

Автор - Alex_ST
Дата добавления - 27.10.2020 в 22:11
Alex_ST Дата: Вторник, 27.10.2020, 22:20 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3116
Репутация: 591 ±
Замечаний: 0% ±

2003
И, к стати, для тех, кто не смотрит в статусбар, можно просто скрывать в начале цикла рабочий лист и вместо него показывать лист-"транспарант" с крупной надписью типа "Идёт обработка данных. Подождите, пожалуйста. Прогресс процесса показан в статусбаре внизу экрана"



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеИ, к стати, для тех, кто не смотрит в статусбар, можно просто скрывать в начале цикла рабочий лист и вместо него показывать лист-"транспарант" с крупной надписью типа "Идёт обработка данных. Подождите, пожалуйста. Прогресс процесса показан в статусбаре внизу экрана"

Автор - Alex_ST
Дата добавления - 27.10.2020 в 22:20
boa Дата: Среда, 28.10.2020, 10:56 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 499
Репутация: 148 ±
Замечаний: 0% ±

2013, 365
Здравствуйте,
попробуйте в конце цикла после перерисовки формы добавить
[vba]
Код
VBA.DoEvents
[/vba]


 
Ответить
СообщениеЗдравствуйте,
попробуйте в конце цикла после перерисовки формы добавить
[vba]
Код
VBA.DoEvents
[/vba]

Автор - boa
Дата добавления - 28.10.2020 в 10:56
TD_MElec Дата: Четверг, 29.10.2020, 12:31 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
boa,
Спасибо!
Это работает)). Только я так и не разобрался почему, но работает))
 
Ответить
Сообщениеboa,
Спасибо!
Это работает)). Только я так и не разобрался почему, но работает))

Автор - TD_MElec
Дата добавления - 29.10.2020 в 12:31
boa Дата: Четверг, 29.10.2020, 13:36 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 499
Репутация: 148 ±
Замечаний: 0% ±

2013, 365
TD_MElec,
Функция DoEvents передает управление операционной системе. Управление возвращается, когда операционная система завершает обработку событий в очереди


 
Ответить
СообщениеTD_MElec,
Функция DoEvents передает управление операционной системе. Управление возвращается, когда операционная система завершает обработку событий в очереди

Автор - boa
Дата добавления - 29.10.2020 в 13:36
TD_MElec Дата: Четверг, 29.10.2020, 22:41 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 39
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Спасибо всем.
Изменил цикл с перебора на матч. Раньше каждая из 250 срок бегала по массиву в 50 000 тыс строк и это занимало около 42,5 сек. (с тем самым подвисанием после 23 - 25 секунд, что на скриншоте) .
Теперь весь цикл укладывается в о,8 секунды. Окно визуализации не успевает открыться :-(, а оно мне так нравилось...
 
Ответить
СообщениеСпасибо всем.
Изменил цикл с перебора на матч. Раньше каждая из 250 срок бегала по массиву в 50 000 тыс строк и это занимало около 42,5 сек. (с тем самым подвисанием после 23 - 25 секунд, что на скриншоте) .
Теперь весь цикл укладывается в о,8 секунды. Окно визуализации не успевает открыться :-(, а оно мне так нравилось...

Автор - TD_MElec
Дата добавления - 29.10.2020 в 22:41
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Мнимое зависание Excel (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

jooble Яндекс цитирования
© 2010-2020 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!