Страницы: 1
RSS
Проблема с отображением UserForm в модальном режиме
 
На время выполнения макроса вывожу на экран простенькую UserForm в модальном режиме с текстом типа «Подождите, работаю..»  
Для вывода формы на экран в начале макроса использую UserForm1.Show (0), в конце макроса использую UserForm1.Hide  
В свойствах UserForm1, в ShowModal стоит значение True.  
В простеньком примере все работает безукоризненно.  
Но когда вставляю эту же UserForm с этими же командами в свои готовые макросы, то UserForm появляется в виде рамки с чистым полем внутри, без надписи. Причем в одних макросах поле Caption активное (синий цвет), а в других – не активное (серый).  
 
Кто-нибудь знает, в чем может быть дело?
 
Когда делал свой прогресс-бар, сталкивался с подобным.  
 
Добавляйте в код строки  
DoEvents  
и  
UserForm1.Repaint  
 
до тех пор, пока не заработает всё как надо :)  
 
Посмотрите пример здесь: http://www.programmersforum.ru/showthread.php?t=28112
 
Виноват, в первом сообщении имелся в виду немодальный режим, чтобы макрос продолжал работать.  
 
EducatedFool,    
Ваш совет помог. Когда после UserForm1.Show (0) добавил UserForm1.Repaint, то этого оказалось достаточно, чтобы текст появился (правда, Titlebar остается не активным). А добавление DoEvents ничего не меняет.  
Так или иначе, текст выводится.  
Спасибо!
 
Мне помогла задержка в 1 секунду перед выполнением макроса.  
 
----------------  
Application.Wait Time:=Now + TimeValue("0:00:01")  
'дальше Ваш код  
----------------
<FONT COLOR="CadetBlue">
 
Спасибо, Дъмитръ, но увы - у меня этот способ не сработал:( (кроме честной задержки на 1 секунду:)))  
Мне иногда помогало отключить и заново включить надстройку Analysis ToolPak - VBA, но сейчас не сработало.    
Никак не пойму, почему в одном макросе все нормально работает, а в другом глючит...
 
Leo037, так Вы задержку поставьте в инициализации или активации Вашей формы или в "Private Sub ...()" формы ;)
<FONT COLOR="CadetBlue">
 
Я в модуле, в тексте макроса ставлю сначала UserForm.Show (0), Wait1.Repaint, а в конце - UserForm1.Hide. Там же, в начале макроса, и добавлял Application.Wait Time:=Now + TimeValue("0:00:01")  
В коде UserForm, где Private Sub UserForm_Click(), у меня ничего не прописано.  
Я что-то неверно делаю?
 
> Причем в одних макросах поле Caption активное (синий цвет), а в других – не активное (серый)  
 
Вы, наверное, в своих макросах используете методы SELECT или ACTIVATE  
Когда научитесь избавляться в коде от этих нехороших слов - тогда и запущенная форма будет постоянно активной (с синей полоской заголовка)  
 
Можете внутри макроса добавить несколько строк UserForm.Show 0  
Тогда полоска всегда будет синей (эта строка активирует форму)
 
И вообще, покажите код своего макроса.  
 
Вместо того, чтобы мудрить с прогрессбаром, проще оптимизировать макрос, чтобы тот выполнялся за доли секунды - тогда и форма не нужна будет.
 
EducatedFool, действительно, у меня там Activate и Select достаточно понатыкано. Но как избавиться от этих нехороших слов? Мне надо обработать данные (в том числе и отсортировать) на двух разных листах.  
Сильно повысить скорость макроса вряд ли возможно - я отключаю обновление экрана и автопересчет, но когда приходится обрабатывать несколько тысяч строк, то время работы макроса уже существенное.  
Впрочем, вод код, макрос на кнопке Этап 1.
Страницы: 1
Читают тему
Наверх
Loading...