Страницы: 1
RSS
Обновление информации в статус баре
 
Проблема такая  
Имеется один долгосчитаемый макрос, по ходу выполнения инфу о ходе выполнения показывает в статус баре  
Application.StatusBar = "Глубина " & glubina  
Если Эксель во время выполнения не трогать -  досчитается до конца.  
Если во время выполнения перейти в другие программы, то информация о ходе выполнения перестает обновляться в статус баре, но при этом считается до конца корректно  
Как сделать так, чтоб в такие моменты эксель не "выпадал из жизни" , а продолжал обновлять инфу в статус баре на каждом шаге????  
Application.ScreenUpdating стоит на true, но это не помогает, висят часы-курсор и счетчик не обновляется  
В общем если какая-то команда, которая заставляет эксель обновить экран в заданный момент выполнения программы???  
Надеюсь понятно написала...
 
Application.ScreenUpdating на статусбар не влияет, скорее наоборот - из-за того, что Эксель стремится обновить экран, на статусбар ресурсов не хватает.  
Если glubina меняется часто (и на каждом шаге цикла выводится статусбар), есть смысл выводить только каждое десятое значение, или даже реже, например 100-е (с помощью mod 100):  
If glubina Mod 100 = 0 Then Application.StatusBar =  "Глубина " & glubina
 
{quote}{login=Hugo}{date=08.06.2011 10:04}{thema=}{post}Application.ScreenUpdating на статусбар не влияет, скорее наоборот - из-за того, что Эксель стремится обновить экран, на статусбар ресурсов не хватает.  
Если glubina меняется часто (и на каждом шаге цикла выводится статусбар), есть смысл выводить только каждое десятое значение, или даже реже, например 100-е (с помощью mod 100):  
If glubina Mod 100 = 0 Then Application.StatusBar =  "Глубина " & glubina{/post}{/quote}  
Вообще, если с момента запуска макроса эксель остается активным  -все показывается нормально, но стоит переключиться в другое приложение -  обновление информации о текущем значении счетчика глубин останавливается.  
Одна глубина считается примерно минуту, выводить 10-ю сотую... к сожалению не вариант...-((
 
Если значение глубины меняется редко - тогда мод 100 конечно не нужно.  
Вообще при переключении на другое приложение макрос работает медленнее, я тоже замечал. Возможно, поможет DoEvents в цикле, точно не знаю, не задавался вопросом...
 
позволю себе немного расшифровать: оператор mod - деление по модулю (возвращает остаток от деления) и у него, как мне пришлось выяснить однажды ^_^, есть предел - Long или от -2147483648 до 2147483647. Числа меньше или больше вызовут ошибку переполнения (Overflow)  
 
т.е. числа используемые при делении по модулю должны быть меньше. Иначе возникнет переполнение (Overflow)  
 
как оказалось тут все просто Long (VBA) - SDWORD двойное слово со знаком (Asm) 32 бита в памяти ;)  
 
*Речь идет о VBA 6.5
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=nerv}{date=08.06.2011 12:25}{thema=}{post}т.е. числа используемые при делении по модулю должны быть меньше. Иначе возникнет переполнение (Overflow){/post}{/quote}  
 
хлам от копипаста. Лишнее : )
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Nerv, с учетом упомянутой 1 минуты на проход в цикле, Long-а хватит на 4083 года, думаете автору темы уже нужно начинать нервничать? :-)
 
Попробуйте  
 
Application.StatusBar = "Глубина " & glubina  
DoEvents  
 
У меня cработало (Excel 2000).
 
Коллеги, объясните плиз, для чего и в какое место кода должна помещаться эта функция.  
Читаю в Справочнике В. И. Король, VBA for Application:  
"Передаёт управление операционной системе для обработки событий и сообщений,  
ждущих в системной очереди.  После обработки ... ... управление возвращается приложению." ...  
Ничего не понял :-(
 
Саша, если VBA макрос выполняет что-то в цикле или просто долго вычисляет, то приходится ждать завершения работы макроса, чтобы начать что-то делать в приложении Excel, ну хотя бы чтобы перевести курсор мышки или активировать другую ячейку. Это потому, что VBA пожирает все ресурсы, выделенные операционной системой для Excel-я. Но если в макросе периодически будет выполняться DoEvents, то на какие-то короткие промежутки времени (миллисекунды) VBA будет приостанавливать работу и передавать ресурсы Excel-ю, позволяя, например, двигать курсор мышки, выделять ячейки, удалять, фоматировать и т.п.  
Если в момент действия DoEvents начать вводить данные в ячейку, то пока редактирование не закончится, макрос будет ждать, отдав все ресурсы Excel-.ю.  
Так можно имитировать многозадачность при выполнении макросов. Расплата за такую роскошь – снижение быстродействия, поэтому DoEvents лучше выполнять не в каждом походе цикла, если проход быстрый.
 
Пока Vikttur не обнаружил что-то про походы: походе = проходе :-)
 
Подскажите, пожалуйста, можно ли использовать StatusBar для нециклического макроса? У меня большой макрос, формирующий сводные таблицы и копирующий получившиеся данные на разные листы. Нашла много информации как внедрить SB в макрос с циклом, но как в мой внедрить не понимаю( Буду очень благодарна за помощь!
 
{quote}{login=KetRiN2011}{date=22.07.2011 04:32}{thema=StatusBar для макроса  без цикла}{post}Подскажите, пожалуйста, можно ли использовать StatusBar для нециклического макроса? У меня большой макрос, формирующий сводные таблицы и копирующий получившиеся данные на разные листы. Нашла много информации как внедрить SB в макрос с циклом, но как в мой внедрить не понимаю( Буду очень благодарна за помощь!{/post}{/quote}покажите Ваш макрос
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
nerv, мой макрос во вложении. Не судите строго, мое 2е творение)
 
Если не ошибаюсь, в этом файле СтатусБар не задействовается вообще...
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Вообще то совсем неплохо всего для второго макроса:)    
Может попробуем убрать все селекты и активэйты, отключим пересчет экрана и не нужен будет статус бар?  
Сегодня точно заниматься не буду, но при Вашем желании завтра можно посмотреть
 
{quote}{login=Igor67}{date=22.07.2011 08:40}{thema=}{post}Вообще то совсем неплохо всего для второго макроса:)    
Может попробуем убрать все селекты и активэйты, отключим пересчет экрана и не нужен будет статус бар?  
Сегодня точно заниматься не буду, но при Вашем желании завтра можно посмотреть{/post}{/quote}  
 
 
Спасибо! Была бы очень благодарна за помощь!
 
Посмотрите пример. Насколько смог поправил. Кажется результат такой же как у Вас.
 
Что бы макрос Shapka() не отображался в меню выбора сделайте Private Sub
 
Igor67, Спасибо! Макрос стал работать быстрее. Возьму на вооружение вынесение повторяющихся операций в отдельный макрос ) а StatusBar, как я понимаю, для данного кода нельзя применить?
 
KetRiN2011, это не моя философия:) По мне - вообще отключить статус бар и хоть миллисекунду, но сэкономить. Кажется основное время затрачивается на удаление не нужных строк. Ваш код был не оптимален, мой  - только что бы работал, но на больших объемах лучше использовать другие решения.  
Вы опишите в чем проблема, желательно в новой теме, и может найдется решение которое не потребует развешивания "рюшечек".
Страницы: 1
Читают тему
Наверх