Страницы: 1 2 След.
RSS
Создание форм (UserForm)
 
Формы можно "рисовать" в редакторе. Формы можно создавать в коде.  
Мысли - форма рисованная весит больше формы в коде; форма в коде медленнее.  
Прав ли я?  
Преимущества/недостатки одной или другой?  
Попробовал бы сам проверить, но на мелких формах вряд ли можно разницу увидеть, а что-то покрупнее сочинять в коде при моих теперешних познаниях VBA...  
 
Попутный вопрос. Появилась "хотелка" сворачивать форму: Me.Hide и готово.  
Можно ли на "рисованной" форме добавить кнопку сворачивания, как на стандартных окнах?
 
Ничего, кроме заморочек с формой, созданной программно, я не вижу.
 
vikttur, по поводу кнопки сворачивания формы см. файл.  
 
P.S. Если отобразить форму в Модальном режиме, то даже свернув формы вы не сможете менять ничего на листе Excel. Поэтому возможно есть резон открывать форму немодальном режиме (vbModeless)
 
Я как-то хотел сделать такеи функции (оформленные в виде класса), которые используют динамическое создание форм.  
Было бы удобно - не приходилось ты таскать форму вместе с модулем класса.  
 
Но тут вспомнил про один нюанс - и навсегда забыл об этой идее...  
Чтобы динамически создать форму, нужно, чтобы был разрешён доступ к Visual Basic Project в настройках Excel.  
А эта галочка по умолчанию не установлена - отсюда вывод: на большинстве компьютеров код не сработает.
 
Спасибо за советы. О модальном режиме знаю. Хотелось другого.  
Формы в проекте используются для того, чтобы ручонки не творили чудес на листе. При модальном заходи и бери, что хочешь :)  
В процессе работы необходимо открыть другой документ. Форма прячется обратно в память (Me.Hide), документ с проектом сворачивается, можно смотреть другие. При активации проекта форма разворачивается, не давая возможности ковыряться в файле.  
Хотелось разместить в заголовке привычную пользователям кнопочку, но подвесить на нее свой макрос.  
В примере Somebody кнопки добавляются Declare Function, но как это работает и можно ли переиначить кнопку "под себя"?
 
Виктор, не проще ли защитить лист паролем, например, так:  
 
Sub PwdOn()  
ActiveSheet.Protect Password = "123", UserInterfaceOnly:=True  
End Sub  
 
И тогда из формы посредством VBA можно редактировать лист, как будто он без пароля, а вручную без снятия пароля  в лист ничего не впишешь.  
 
Обращаю внимание на то, что после Password я намеренно написал не два знака := а один знак =  
Это чтобы немного запутать того, кто вдруг заглянет в Ваш код - попробуйте сами вручную снять такой пароль :-)
 
ZVI, +1 за идею с паролем)  
 
Я бы сам порядком помучился, прежде чем заметил отсутствие двоеточия...
 
Владимир, у меня пишет    
 
Compile error. Variable not defined! и указывает на Password, т.к включено "Option Explicit" ))
 
эээ, народ)) как снять пароль? ))) Пытаюсь ввести Password = "123" не помогает ))
 
Аа, вот, получилось  
 
Sub PwdOn2222()  
   ActiveSheet.Unprotect Password = "123"  
End Sub
 
По основному вопросу - программное добавление элементов управления (контролов) на форму вызывает утечки памяти, т.е. под такие контролы резервируются свободные участки памяти, которые не освобождаются до закрытия приложения Excel. При многократном открытии формы с программно создаваемыми контролами резервируются очередные участки памяти, а предыдущие не освобождаются.  
 
Но если ожидается, что форма будет открываться (создаваться) лишь несколько раз за сеанс Excel, то программное создание контролов безопасно, так как утечки памяти будут незначительны.    
 
Иногда вместо программного добавления, например текстбоксов лучше заранее разместить этих текстбоксов с запасом и манипулировать их видимостью с помощью свойства Visible
 
Для снятия вручную пароль: FALSE
 
{quote}{login=ZVI}{date=05.07.2010 04:30}{thema=}{post} ZVI Microsoft MVP - Excel :-) {/post}{/quote}  
 
Владимир, Вы только недавно получили?  
Microsoft Most Valuable Professional — признание от Microsoft волонтёрам за техническую поддержку пользователей.    
или просто только написали:)))  
Поздравляю Вас!!!
 
{quote}{login=Igor67}{date=05.07.2010 09:59}{thema=Re: }{post}Владимир, Вы только недавно получили?  
Microsoft Most Valuable Professional — признание от Microsoft волонтёрам за техническую поддержку пользователей.    
или просто только написали:)))  
Поздравляю Вас!!!{/post}{/quote}Спасибо, Игорь!  
Получил недавно, с легкой подачи Кирилла (KL).  
Честно говоря, сомневался, нужно ли светиться целый год среди легендарных MVP-имён. Тем более, что для меня это всего лишь хобби. Но решил побороться со скромностью, так как дело уже не только во мне.  
Ответственности теперь побольше, впрочем, требований особых и не предъявляется.  
Есть доступ к техподдержке, хотя мне пока привычнее разбираться самому.  
В остальном всё останется по-прежнему, включая право на ошибки и любую критику моих советов :-)
 
Владимир, мои искренние поздравления!
 
{quote}{login=Юрий М}{date=05.07.2010 11:35}{thema=}{post}Владимир, мои искренние поздравления!{/post}{/quote}Юрий, спасибо!    
Заранее благодарю всех присоединившихся, но все же предлагаю здесь ограничиться ответами по теме, а то зазнаюсь :-)  
В общем-то, виноваты все понемногу: особенно те, кто задавал самые неимоверные вопросы и/или выкладывал файлы со странностями, а также те, кто предлагал неожиданные решения и делился своими наработками. Поэтому всем заранее спасибо, надеюсь, что проехали эту тему :-)  
На форуме много талантов, и то, что здесь не принято давать различные внутренние статусы - очень демократично.
 
{quote}{login=Igor67}{date=}{thema=Microsoft Most Valuable Professional — признание от Microsoft волонтёрам за техническую поддержку пользователей.  }{post}  
Владимир, Вы только недавно получили?  
Поздравляю Вас!!!{/post}{/quote}Владимир, так это отдельную тему надо было создавать :-)  
 
ПОЗДРАВЛЯЮ!!!
 
Владимир, поздравляю!  
 
P.S. Предлагаю девиз: "Чтобы каждый из нас стал Microsoft MVP - Excel" ))
 
{quote}{login=Serge 007}{date=06.07.2010 12:20}{thema=ZVI Microsoft MVP - Excel}{post}Владимир, так это отдельную тему надо было создавать :-)  
 
ПОЗДРАВЛЯЮ!!!{/post}{/quote}Да, понимаю, что наливать уже нужно каждому по-полной :-) Спасибо, Сергей!
 
{quote}{login=Somebody}{date=06.07.2010 12:22}{thema=}{post}Владимир, поздравляю!  
 
P.S. Предлагаю девиз: "Чтобы каждый из нас стал Microsoft MVP - Excel" )){/post}{/quote}Павел(?), это уже не девиз, а тост! Ваше здоровье!
 
<Заранее благодарю всех присоединившихся, но все же предлагаю здесь ограничиться ответами по теме, а то зазнаюсь :-)>  
Владимир, чтобы не зазнался, я промолчу. Но многозначительно. Заодно, как присоединившийся, получаю благодарность :)  
<Да, понимаю, что наливать уже нужно каждому по-полной>  
Поспешил я с Балаклавой :(  
Еще бы на недельку задержался на Золотом, глядишь, еще кружечку крымского отведал бы :)  
 
Чтобы не оффтоп (боюсь модераторов).  
<не проще ли защитить лист паролем>  
Листы в нужный момент защищены. Проблема в другом - при открытой форме нельзя работать с другим файлом. А нужно :)  
Есть форма корректировки. Из базы по нужным критериям отбираются строки, данные которых нужно корректировать. После корректировки можно сформировать документ и вывести на печать. Т.к. возможны ошибки, предусмотрен возврат на корректировку, поэтому форма не закрывается полностью (Hide) - для возврата в ту же точку.  
Но есть еще необходимость просмотреть другой файл, не закрывая полностью форму.  
Не проблема поцепить на форму элемент с назначенным кодом с тем же .Hide.  
Но пользователь попросил "кнопочку в уголочке возле крестика", поэтому и возник такой вопрос.
 
Да, Владимир. Это я, Павел (который 55) ) ну, тост, так тост))  
За твоё здоровье! Молодец! Успехов тебе! [далее идёт звон бокалов] ))
 
{quote}{login=Somebody}{date=06.07.2010 02:30}{thema=}{post}Это я, Павел (который 55) {/post}{/quote}  
Не узнал. А почему ник другой? Следят? :)
 
Потому, что из-за нехватки времени, я перешёл из разряда "помогающих" в разряд "читающих" форум. А чтобы люди, которым я помогал не ждали ответом от меня (т.к. я не могу много времени уделять форуму), пришлось сменить ник.  
 
P.S. Вот уволюсь с работы, будет больше свободного времени... )
 
{quote}{login=Somebody}{date=06.07.2010 09:08}{thema=}{post} А чтобы люди, которым я помогал не ждали ответов от меня ....{post}{/quote}  
Мы в ответе за тех кого приручили:) (с)
 

vikttur, возможно я не внимательно прочитал всю тему, но если я правильно понял, есть решение Вашей задачи: http://msoffice.nm.ru/faq/macros/winapi.htm#faq439 Сделал форму и по примеру добавил чудо-кнопку, стало очень удобно :)

<FONT COLOR="CadetBlue">
 
Спасибо, Дмитрий. Этот вариант показал Somebody, на недостатки указал ZVI.  
Но ссылку сохраню.
 
Виктор, немножко не соглашусь, примеры разные.  
 
В моем примере не нужно форму запускать в немодальном режиме, а также она отображается на панели как обычный файл Excel.  
 
Хотя я не специалист VBA, могу и ошибаться :)  
 
P.S. хотя программа Дмитрия (The_Prist) все равно будет необходима.
<FONT COLOR="CadetBlue">
 
Забыл добавить...  
"...В процессе работы необходимо открыть другой документ..." - в приведенном мною примере, форма позволит Вам спокойно открыть другой файл без всяких "UseForm.Hide".
<FONT COLOR="CadetBlue">
 
{quote}{login=Дмитрий Д}{date=08.07.2010 11:53}{thema=}{post}Виктор, немножко не соглашусь, примеры разные.{/post}{/quote}  
Я говорил о том, что "программное добавление элементов управления (контролов) на форму вызывает утечки памяти" (ZVI).
Страницы: 1 2 След.
Читают тему
Наверх
Loading...