Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

Глава 25. Разработка пользовательских приложений

761

ModMain— модуль VBA, который содержит процедуру, отображающую основ­ ное диалоговое окно UserForm;

ThisW orkbook — в этом модуле кода находятся процедуры обработки событий Open и Be f o r e c lo s e объекта Workbook, позволяющие создавать и удалять не­ обходимые меню.

Также файл рабочей книги содержит простой XML-код RibbonX, который на ленте создает кнопку Loan Amortization Wizard (Мастер расчета займа).

Как это работает

Мастер расчета займа представляет собой надстройку, для установки которой исполь­ зуется диалоговое окно Надстройки (Add-Ins). Для отображения этого диалогового окна выберите команду Файл^Параметры Ехсе^Надстройки (File^Excel Options^Add-Ins). В диалоговом окне Параметры Excel (Excel Options) в списке Управление (Manage) выберите пункт Надстройки Excel (Excel Add-Ins) и щелкните на кнопке Перейти (Go). Для поиска файла надстройки щелкните на кнопке Обзор (Browse). После установки надстройка будет доступной между сеансами Excel. Надстройка также будет работать, если она открыта с помощью команды Файл^Открыть (File^Open).

С о зд ан и е м астер а расчета зай м а

Приложение мастера расчета займа, которое в свое время начиналось с простой концепции, стало достаточно сложным проектом. Основной его целью была демонст­ рация максимального количества методов разработки приложений. При этом нужно было разработать программу, от которой была бы реальная отдача. Конечный результат можно было увидеть еще до начала разработки приложения, но основной целью было создание конечного приложения, а не получение расчетных данных.

Главная цель приложения традиционно очень проста. Необходимо создать прило­ жение, которое собирает от пользователя информацию и создает рабочий лист. Но в процессе разработки возникли идеи по расширению возможностей приложения. В ре­ зультате рабочий процесс несколько раз заходил в тупик. Кто-то может назвать эти эксперименты напрасной тратой времени, но они являются неотъемлемой частью про­ цесса разработки приложения.

Разработка проекта была завершена в течение одного дня. Еще несколько часов бы­ ло потрачено на доводку и тестирование приложения. В версию приложения, включен­ ного в это издание книги, были добавлены дополнительные улучшения.

И зм енение пользовательского интерф ейса

Для созданной надстройки следует определить способ доступа. Для этого использует­ ся простой код RibbonX, с помощью которого добавляется кнопка в новую группу на вкладке Вставка (Insert), как показано на рис. 25.7. После щелчка на этой кнопке вызы­ вается процедура S ta rtA m o rtiz a tio n W iz a rd , которая отображает пользовательское диалоговое окно FormMain.

Ниже представлен код RibbonX, который создает кнопку на ленте.

<customUI xm ln s= "h t t p : //s c h e m a s .m ic ro s o ft. c o m /o ffic e /2 0 0 6 / _ 01/c u s to m u i">

<ribb on > <tabs>

<tab id M s o = "T a b In s e rt">

<group id = " g p U tils " la b e l="Loan A m o rtiz a tio n " >

Глава 25. Разработка пользовательских приложений

763

P riv a te Sub O K B u tto n _ C lic k ()

 

 

I f

cbMessage Then

"D e fa u lts " ,

"ShowMessage",

"No"

 

S a ve S e ttin g

APPNAME,

E lse

 

 

 

 

 

S a v e S e ttin g

APPNAME,

" D e fa u lts ",

"ShowMessage",

"Yes"

End

I f

 

 

 

 

U nload Me

End Sub

Если в пользовательском диалоговом окне устанавливается соответствующий фла­ жок, настройка реестра получит значение “No” (Нет), и пользовательское диалоговое ок­ но не будет отображаться Повторно.

Инициализация диалогового окна FormMain

Процедура U s e r F o r m _ I n itia liz e для диалогового окна FormMain выполняет достаточно большой объем работы.

Значение свойства S ty le элемента управления M u ltiP age устанавливается рав­ ным fm TabStyleNone. Вкладки, представленные в окне Visual Basic Editor, об­

легчают редактирование пользовательского диалогового окна.

Значение свойства V alue элемента управления M ultiP age устанавливается рав­

ным 0. Это обеспечивает отображение первой страницы элемента управления M u ltiP age, независимо от того, когда рабочая книга сохранялась в последний раз.

Добавляются опции к раскрывающимся спискам трех элементов управления ComboBox, которые находятся в диалоговом окне.

Вызывается процедура G e tD e fa u lts для установки значений, которые исполь­ зовались в последний раз и хранятся в системном реестре (информация об этом приведена в разделе “Сохранение и получение значений по умолчанию”).

Проверяется активность рабочей книги. Если книга неактивна, то отключается элемент управления O ptionB utton, который позволяет пользователю создать новый рабочий лист в активной рабочей книге.

Если рабочая книга активна, то в результате дополнительной проверки определя­ ется защищенность структуры рабочей книги. Если это так, то процедура отклю­ чает элемент управления O ptionB utton, который позволяет создавать новый рабочий лист в активной рабочей книге.

Обработка собы тий в п р о ц е ссе отображ ения диалогового окна U serF orm

Модуль кода для диалогового окна FormMain содержит несколько процедур обра­ ботки событий C l i c k и Change для элементов управления, которые находятся в диало­ говом окне UserForm.

П ерекрестная ссы лка

Щелчок на кнопках Назад и Далее определяет, какая из страниц элемента управления M ultiP age будет отображена следующей. Процедура M u ltiP a g e i_ Change изменяет заголовок диалогового окна UserForm, а также включа­ ет/отключает кнопки Назад и Далее в зависимости от того, какая страница элемента управления отображается в данный момент. Дополнительные све­ дения о программировании мастеров можно найти в главе 15.

766

Часть VI. Разработка приложений

13.Далее процедура меняет ширину столбцов, блокирует заголовки и защищает форму­ лы, а также несколько ключевых ячеек, значения в которых нельзя редактировать. По­ сле этого рабочий лист считается защищенным, хотя пароль не используется.

14.Если при выполнении пятого пункта этого списка установлен флажок Защита листа (Protect Sheet), лист будет защищен (но без применения пароля).

15.Наконец, процедура S a v e D e fa u lts сохраняет сведения о состоянии элементов управления диалогового окна U se rF o rm в системном реестре. Эти значения бу­ дут использоваться по умолчанию в следующий раз, когда пользователь примется за создание расписания погашения займа (дополнительная информация приведе­ на в следующем разделе).

Сохранение и получение значений по ум олчанию

Если запустить это приложение, то можно заметить, что диалоговое окно U serForm , в котором определяются параметры кредита (Form M ain), всегда отображает значения, ко­ торые использовались в последний раз. Другими словами, диалоговое окно “запоминает” последние данные и применяет их в качестве новых значений по умолчанию. Таким об­ разом упрощается создание нескольких сценариев “что-если” для расчета погашения кредита, которые отличаются только одним параметром. Подобный эффект достигается благодаря хранению значений в системном реестре и получению этих данных на этапе инициализации диалогового окна U serF orm . Когда приложение запускается в первый раз, системный реестр не содержит значений, поэтому используются значения, принятые по умолчанию в элементах управления диалогового окна U serF orm .

Следующая процедура, которая называется G e tD e fa u lts , циклически просматри­ вает элементы управления в диалоговом окне U serF orm . Если элемент управления име­ ет тип T e x tB o x , ComboBox, O p tio n B u tto n , C heckB ox или S p in B u tto n , то проце­ дура вызывает функцию V B A G e tS e ttin g и считывает значения из системного реест­ ра. Обратите внимание на то, что третий аргумент функции G e tS e ttin g представляет значение, которое используется в том случае, если в системном реестре не найдено тре­ буемых параметров. В результате применяется значение, которое указывается для эле­ мента управления на этапе проектирования. APPNAME является глобальной константой, содержащей название приложения.

Sub G e tD e fa u lts ()

' Чтение заданных по умолчанию н астр о е к из р еес тр а

Dim

c t l

As C o n tro l

Dim

C trlT y p e

As

S trin g

For

Each

c t l

In

M e .C o n tro ls

C trlT y p e =

TypeN am e(ctl)

Or

_

I f C trlT y p e

=

"T extB ox"

C trlT y p e

=

"ComboBox"

Or

_

C trlT y p e

=

"O p tio n B u tto n " Or _

C trlT y p e

=

"CheckBox"

Or

_

C trlT y p e

=

"S p in B u tto n "

Then

c tl.V a lu e =

G e tS e ttin g _

ctl.N a m e , c tl.V a lu e )

(APPNAME,

" D e fa u lts " ,

End I f

 

 

N ext c t l

 

 

End Sub