Интернет-журнал "Домашняя лаборатория", 2007 №7
Шрифт:
Подавляющее большинство свойств (для стандартных элементов управления — все), задаваемых в Окне свойств, можно изменять и из программы. Например, команда TextBox1.Enabled=True даст возможность пользователю ввести текст в поле ввода TextBox1, а команда CheckBox1.Value=False уберет галку из флажка с именем CheckBox1. Эта возможность делает формы Visual Basic for Applications динамическими — то есть содержимое форм может меняться немедленно в ответ на действия пользователя без выгрузки и повторной загрузки формы. Форма может работать как обычное диалоговое окно программы для Windows — например, выбор пользователем значения из списка может каждый раз выводить в форму какой-либо текст, разный для разных значений.
Наиболее часто возможность создания динамических
Для просмотра формы в режиме выполнения (то есть так, как она будет выглядеть в готовой программе) надо нажать клавишу F5 — ту же, что и для запуска на выполнение обычной программы. Все средства отладки, описанные выше, работают и при отладке форм.
Для вызова формы из программы следует поместить в ее текст команду ИмяФормы. Show.
Стоит иметь в виду, что после выгрузки формы из памяти (командой Unload Me в одном из обработчиков событий формы) все переменные, описанные в программе реакции формы на события, обнуляются. Поэтому после выгрузки формы получить от нее какие-либо данные уже нельзя. Если в результате работы формы в основную программу должны передаваться какие-либо данные, то нужно в основной программе объявить несколько переменных с помощью инструкции Public, а затем в программе реакции формы на события записать в них всю необходимую информацию, полученную от пользователя, и использовать значения этих переменных в основной программе.
Форму можно убрать с экрана и методом Hide (командой ИмяФормы. Hide или Me.Hide в одном из обработчиков событий формы). При этом значения всех переменных формы сохраняются, и к ним можно обращаться из программы согласно правилам объектно-ориентированного языка. Например, для получения значения окна ввода текста скрытой формы используется примерно такая команда: "a=UserForml.TextBox1.Value".
В соответствии с правилами объектно-ориентированного языка можно обращаться и к элементам формы для задания их параметров или, наоборот, их считывания, до загрузки формы в память. При задании таким образом параметров формы при ее отображении будут использоваться именно они, а не те, которые заданы при создании формы в Окне Свойств. Однако после окончания работы программы эти изменения параметров будут потеряны, и в следующий раз форма и ее элементы будут иметь те же параметры, что и заданные в Окне Свойств изначально при их разработке, — то есть программно изменить значения параметров элементов формы, заданные в Окне Свойств при ее создании вручную, нельзя.
Программа реакции формы на события представляет собой полноценный модуль проекта за одним исключением: процедуры из него могут быть вызваны только из другой программы. Вызов формы на исполнение с помощью кнопки, строки меню или сочетания клавиш невозможен. Поэтому для вызова формы необходимо в основной программе (если все необходимые функции реализованы в процедурах программы реакции формы на события, то основную программу все равно необходимо создать, хотя бы только для вызова этой формы) надо указать команду ИмяФормы. Show, а кнопки и сочетания клавиш назначать именно этой основной программе.
Формы, так же как и модули, могут быть сохранены в отдельных файлах путем экспортирования функцией "Экспорт файла" своего контекстного меню правой кнопки мыши в Менеджере проектов или путем перетаскивания ее названия из Менеджера проектов в Explorer. Но, в отличие от модулей, при сохранении форм получается два файла, в одном из которых содержится текст программы реакции формы на события, а в другом — информация о расположении элементов на форме, их свойствах, а также рисунки и фон формы. Поэтому при импортировании формы необходимо, чтобы оба этих файла были в одной папке.
* * *
В принципе всего вышеизложенного вполне хватит для того, чтобы начать создавать первые
программы. Именно этому и будут посвящены две следующие главы.СОЗДАНИЕ ПЕРВОЙ ПРОГРАММЫ
В предыдущих главах рассказывалось об основных средствах Microsoft Office, позволяющих создавать программы, работающие в среде этого пакета, — о Редакторе VBA, его возможностях и компонентах, о языке Visual Basic for Applications и принципах программирования. Здесь же на наглядном примере будет показан процесс создания простой макрокоманды для Microsoft Word и подробно объяснены все шаги этого процесса. Описание каждого более-менее значимого шага снабжено иллюстрацией, так что вы можете изучать эту главу даже в том случае, если под рукой компьютера у вас нет.
Основной упор в данной главе сделан не столько на непосредственное достижение нужного результата, сколько на демонстрацию процесса самостоятельного изучения неизвестного ранее языка программирования, освоение принципов которого может помочь вам впоследствии быстро осваивать новые средства разработки без учебников и руководств или с минимальным их использованием.
Напомню, что Microsoft Word в качестве основы для обучения программированию выбран потому, что именно эта программа из всех компонентов Microsoft Office является наиболее частоиспользуемой, и надобность в расширении его возможностей возникает чаще, чем необходимость дополнения остальных программ из пакета. В качестве основной среды разработки выбрана версия Microsoft Office 97, так как, во-первых, программы, написанные в ней, будут работать и в более старших версиях Microsoft Office[231], а, во-вторых, в русской версии Microsoft Office 97 справочная система по Visual Basic for Applications частично русифицирована, что может серьезно помочь в самостоятельном освоении этого языка.
* * *
У программы Microsoft Word есть огромное количество возможностей по работе с текстом. И огромные возможности по замене и поиску, и средства помещения в документ графики, не уступающие многим современным издательским системам, и средства оформления документов красивыми шрифтами и границами… Казалось бы — что еще надо, все необходимые возможности уже учтены создателями Word? Однако иногда перед пользователями встают такие задачи, разрешить которые с помощью стандартных средств Word очень трудно, а то и вовсе невозможно. Но для этого в Word, как, впрочем, и во всех компонентах пакета Microsoft Office, есть очень мощное средство разрешения подобных проблем: встроенный язык программирования — создания макросов.
Вот наглядный пример, когда именно написание макроса — единственный более-менее достойный выход из проблемы.
Все документы на моем компьютере оформлены приблизительно одинаково — для удобства редактирования, переноса текста из одного документа в другой и др.
Можно даже сказать, в чем заключаются эти мои предпочтения — шрифт Times New Roman, 12 пунктов, выделения — жирным и курсивом, выравнивание по ширине, все отступы абзацев равны нулю, а табуляция — 1 см. Именно в таком "формате" я держу все свои документы Word. Кроме того, я очень люблю формат Rtf и стараюсь, по возможности, делать копии своих документов в этом формате. Но вот из Internet'а я скачал 20 файлов с интересующей меня информацией — скажем, рефератов по актуальным вопросам кардиологии. И все они были набраны разными людьми в соответствии с предпочтениями каждого: везде разный шрифт,
разные размеры шрифта, отступы абзацев — все вкривь и вкось, выравнивание — то влево, то по ширине. В общем, работы по приведению в одинаковый вид — куча. (Для тех, кто является решительным противником однообразия оформления своих документов, приведу другую ситуацию: вы являетесь организатором конференции, на которую все заинтересованные лица прислали свои доклады, и Вам надо привести их в однообразный вид для помещения в Internet, например, или для последующей отдельной распечатки каждого доклада.)