Разработка пользовательского интерфейса информационных

advertisement
Методические указания.
Рекомендую скачать по ссылке книгу по работе с VBA
http://allbuy.in.ua/download/programmirovanie_v_ms_office.pdf
Разработка пользовательского интерфейса информационных систем средствами VBA Excel.
Создание компьютерных информационных систем, оказывающих помощь лицам, принимающим решения,
является важной и актуальной задачей. Такие системы должны быть гибкими, уметь быстро
приспосабливаться к изменяющимся условиям и предоставлять наиболее оперативную и важную
информацию. Способность быстро обрабатывать исходные данные и получать полезную для бизнеса
информацию даёт возможность принять лучшее решение, и это приводит, в конечном счёте, к увеличению
доходов. В крупных фирмах имеется, как правило, множество исходных данных: сведения о покупателях,
рынках, продуктах, демографии, финансах, конкурентах и т. д. Однако, ценность этой информации
заключается не в её количестве, а в возможности выбирать из неё наиболее важную, и своевременно подавать
эту информацию лицам, принимающим решения. Следует отметить, что разработать достаточно
универсальные приложения для этих целей просто невозможно, так как потребности лиц, принимающих
решения, постоянно изменяются. Становится очевидным, что использование таких мощных средств
программирования как, например С++ или Delphi не даёт ожидаемого эффекта из-за сложности алгоритмов и
больших сроков разработки проектов, а идеальное средство информационных систем на базе ПК должно
объединять вычислительные возможности электронных таблиц и современных визуальных средств
разработки программ.
Microsoft Excel является наиболее мощным средством разработки информационных систем, совмещающее в
себе преимущества как табличного процессора, та и средств визуального программирования - встроенного
языка Visual Basic for Applications (VBA) [1,2]. С помощью VBA разработчики могут объединять более 100
объектов и около 400 других встроенных приложений (функций, надстроек и т.п.), что позволяет создавать
гибкие и развитые информационные системы. В Exсel можно также объединять части систем, разработанные
в интерактивном режиме, и с помощью программного кода, легко интегрировать их с другими офисными
приложениями. Exсel может быть использован для любой информационной системы, содержащей анализ
данных, так как включает набор объектов обработки данных, являющийся наиболее передовым. В настоящее
время на базе инструментальных средств Exсel уже созданы тысячи информационных систем, которые
успешно используются во всём мире. Учитывая указанные преимущества следует ожидать, что потребность в
информационных системах, созданных на основе Exсel и VBA , значительно возрастёт в ближайшее время и
всё большее число компаний придут к пониманию того, что используя Exсel, они смогут создавать
информационные системы с меньшими затратами времени и денежных средств.
1 Основные типы пользовательского интерфейса.
Интерфейс пользователя является неотъемлемой частью любой информационной системы, определяющей все
возможные пути и удобства доступа к её отдельным компонентам. Рассмотрим некоторые возможные типы
интерфейса пользователя, реализуемого средствами VBA Exсel.
1.1 Кнопочный интерфейс рабочего листа.
Разработчик информационной системы заполняет рабочую книгу Exсel нужным количеством листов, после
чего каждый рабочий лист преобразуется в диалоговую форму. Первый лист обычно служит для вывода на
экран заставки информационной системы, второй лист используется для отображения основной управляющей
формы (основного меню), из которого осуществляется вызов основных компонентов информационной
системы, расположенных на остальных рабочих листах. Все необходимые компоненты, в основном, можно
создавать средствами Exсel в интерактивном режиме работы без программирования на VBA. Эти рабочие
листы, как правило, содержат тексты, таблицы, диаграммы, карты, а также на них наносятся простейшие
элементы управления – кнопки возврата в основное меню. Помимо кнопок могут использоваться и другие
элементы управления, содержащиеся на панелях инструментов Формы и Элементы управления, которые
обычно носят вспомогательные функции и не связываются с доступом к остальным компонентам и основному
меню информационной системы. Этот тип интерфейса является самым простым для реализации и достаточно
наглядным. Уместно отметить, что механизм гиперссылок в Internet, присутствующий на сотнях миллионов
Web-страниц, представляет собой разновидность кнопочного интерфейса, что говорит о его практичности и
широком распространении. К недостаткам интерфейса рабочего листа следует отнести сложность
представления рабочих листов в надстройках Exсel, что несколько снижает защиту информации в системе.
1.2 Интерфейс пользовательских форм.
Этот тип интерфейса использует диалоговые окна, когда от пользователя требуется внести исходную
информацию для выполнения приложением различных задач, алгоритмы решения которых обычно скрыты от
1
пользователя и реализуются программным путём в надстройках. Результаты решения обычно выводятся на
рабочие листы, как это выполнено, например, в программе “Поиск решения” в Exсel. Преимуществом
интерфейса пользовательских форм является улучшенная защита программ и более профессиональный вид
приложения. Диалоговые окна создаются на основе пользовательских форм (UserForm), разрабатываемых в
редакторе VBA и отображаемых затем на рабочих листах. Пользовательские формы могут содержать такие
же элементы управления, как и рабочие листы и некоторые другие, такие как выделение диапазона (RefEdit) и
набор страниц (MultiPage), обусловленные спецификой этого типа интерфейса. Одной из разновидностей
рассматриваемого интерфейса является возможность создания набора взаимосвязанных окон (Мастера) для
поэтапного задания большого количества исходных данных. К недостаткам интерфейса пользовательских
форм следует отнести сравнительную сложность разработки и необходимость выполнения пользователем
дополнительных операций по открытию и закрытию диалоговых окон, что затрудняет эксплуатацию системы.
1.3 Интерфейс панелей команд рабочего листа.
Этот тип интерфейса позволяет располагать на рабочих листах кнопки и пункты меню в виде линеек на
пользовательских панелях команд. Кнопки связываются с процедурами, а пункты меню объединяют группы
кнопок. В отличие от кнопочного интерфейса рабочего листа использование панелей команд позволяет
достичь большей структурированности и упорядочения элементов управления на рабочем листе, в
особенности для случаев, когда отдельные компоненты информационной системы достаточно сложные и их
невозможно представить на отдельном листе или пользовательской форме. Лучшим примером данного типа
интерфейса является сам табличный процессор Exсel, в котором используется основное меню с вложенными
меню и кнопками, вызывающими отдельные процедуры обработки или пользовательские формы для задания
исходных параметров вычислений. В Exсel также представлен широкий набор панелей инструментов, которые
являются разновидностями интерфейса панелей команд рабочего листа. Всего используется более 200
разновидностей пользовательских форм, вызываемых для задания исходных данных. Разработчиками Exсel
предусмотрены два режима создания панелей команд: программный и интерактивный (без
программирования). При программном режиме панели команд, отдельные вложенные меню и кнопки
разрабатываются путём составления программы на языке VBA. Это наиболее общий способ создания
интерфейса, в котором можно предусмотреть как построение, так и управление отдельными элементами
панелей команд, в частности их запрещение, удаление, восстановление и скрытие. Для создания менее
сложных информационных систем предусмотрен интерактивный режим, в котором легко создать
структурированный интерфейс меню и панелей инструментов, в который, в частности, можно добавлять
элементы самого Exсel, однако этими элементами невозможно управлять в процессе выполнения приложения
без программирования.
Таким образом, из всех перечисленных разновидностей, интерфейс панелей команд рабочего листа является
наиболее профессиональным, так как позволяет создавать и управлять интерфейсными элементами в любых
частях приложения и создавать требуемые интерфейсные структуры любой сложности. Однако, из данного
утверждения не следует что его необходимо применять повсеместно для всех без исключения
информационных систем.
1.4 Общие требования к интерфейсу, созданному средствами VBA Exсel.
Кроме выбора типа и структуры интерфейса, а также создания управляющих элементов, имеются также и
другие вопросы, требующие обязательного решения для любого типа интерфейса, что связано в первую
очередь с необходимостью установки и восстановления свойств среды Exсel.
Программа, работающая под управлением VBA, не является законченным приложением и не может быть
представлена в виде исполняемого (*.exe) файла. Это приложение работает всегда внутри самого Exсel, а это
значит, что её разработчик при проектировании должен предусмотреть средства удаления признаков Exсel из
приложения, чтобы у пользователя создавалось впечатление, что работает не Exсel, а законченная программа,
которая выполняет строго определённые действия. Речь идёт о таких элементах, как: вертикальная и
горизонтальная линейки прокрутки, строка формул, строка состояния, панели инструментов, основное меню
Exсel, ярлычки рабочих листов, сетка, системное меню, название рабочей книги и окна а также сообщения
Exсel, выводимые в диалоговых окнах.
Следует отметить, что некоторые из этих элементов могут быть удалены интерактивно, однако наиболее
общим подходом является программный способ. Удаление всех элементов следует производить при загрузке
рабочей книги из оперативной памяти, тогда сразу же после загрузки Exсel, будут установлены интерфейсные
элементы приложения. Естественно, чтобы не нарушить работу и настройку среды самого Exсel, для работы с
другими приложениями, следует позаботиться о восстановлении всех изменённых параметров среды при
закрытии рабочей книги в конце работы приложения. Следует также преобразовать программный код VBA
приложения в отдельную надстройку и защитить надстройку и листы рабочей книги от
несанкционированного доступа. Все эти вопросы обязательно следует предусмотреть в профессионально
2
выполненных приложениях. Эта работа по своей сложности не уступает реализации управляющих элементов
информационной системы.
2 Использование функций InputBox, MsgBox и объектов панели инструментов Формы.
2.1 Функция InputBox
Функция InputBox служит для того, чтобы пользователь мог ввести одно значение, необходимое для
выполнения макроса. Упрощенный вариант синтаксиса функции имеет вид
InputBox ( promt [ , title])
где promt – текст, отображаемый в окне ввода,
title -- текст, отображаемый в заголовке окна.
Пример.
Rate =InputBox (“Введите ставку комиссионных”, “Расчет комиссионных”)
Переменной Rate будет присвоено значение, введенное пользователем окна после нажатия кнопки ОК.
Функция InputBox всегда возвращает строку. Для преобразования строки в число можно использовать
функцию Val ( ).
2.2 Функция MsgBox
Функция MsgBox - это очень удобное средство для того, чтобы отобразить на экране информацию и
попросить пользователя сделать выбор, щелкнув одной из предложенных кнопок. Упрощенный вариант
синтаксиса функции имеет вид
MsgBox ( promt [,buttons] [ , title]),
где promt – текст, отображаемый в окне сообщения,
buttons – коды кнопок, которые будут появляться в окне сообщений,
title – текст, отображаемый в заголовке окна.
Аргументы функции MsgBox можно задавать, как в виде литералов так и в виде переменных. Если
используются литералы, то аргументы не заключаются в круглые скобки, например
Sub MsgBoxDemo ( )
MsgBox “Для продолжения щелкните по кнопке ОК”
End Sub
С помощью функции MsgBox легко организовать диалоговое разветвление вычислительного процесса,
например
Sub GetAnser ( )
Ans = MsgBox ( “Продолжить”, vbYesNo)
Select Case Ans
Case vbYes
‘ операторы, выполняющиеся, когда пользователь
‘ щелкнул по кнопке Да.
Case vbNo
‘ операторы, выполняющиеся, когда пользователь
‘ щелкнул по кнопке Нет.
End Select
End Sub
2.3 Работа с элементом Кнопка панели инструментов Формы.
Для создания кнопки на рабочем листе выделите этот элемент мышью на панели инструментов Формы и
переместите курсор в нужное место рабочего листа. При отпускании кнопки фиксируется левая верхняя точка
расположения кнопки. Перемещая указатель мыши вправо и вниз, задайте величину кнопки. При отпускании
кнопки, автоматически открывается окно для задания имени макроса, обрабатывающего событие нажатия
кнопки. Целесообразно имя этого макроса выбирать аналогичным имени самой кнопки, например, имя Старт
может быть присвоено как самой кнопке (путем щелчка по названию), так и макросу обработки события. Этот
макрос при работе с элементами панели инструментов Формы помещается в модуль, созданный в редакторе
VBA. В начале в этом модуле следует создать процедуру, для чего выполнить команду Вставка/Процедуры
(Insert/Procedure…), в открывшемся окне ввести имя процедуры, например, Старт, и ее тип (не
обязательно), например, Sub и Pablic. После этого будет сгенерированы операторные скобки
Pablic Sub Старт( )
End Sub
Внутрь операторных скобок следует вставить текст программы обработки события. Например, текст
Worksheets ( “Лист 2” ). Activate
вызовет переход к Листу 2 рабочей книги Excel, на котором может быть размещено главное меню или
таблицы и диаграммы Excel, а текст
3
ActiveWorkBook.Close
вызовет закрытие приложения. Такой текст обычно присваивается процедуре обработки события нажатия
кнопки Выход. Например, для выполнения обычных установок рабочего пространства Листа1 необходимо
выполнить программу
Sub ResetWorkSpace ()
Worksheets (1). Select
With ActiveWindow
WindowState = xlMaximized
DisplayGridlines = True
DisplayHeddings = True
Caption = ThisWorkbook. Name
DisplayHorizontalScrollBar = True
DisplayVerticalScrollBar = True
DisplayWorkbookTabs = True
End With
With Worksheets (1)
Range ("A1:Z100").Clear
Shapes (1). Delete
End With
End Sub
2.4 Автоматический запуск макроса
Чтобы при открытии книги автоматически выполнялся содержащийся в ней макрос, достаточно присвоить
макросу имя WorkBook_Open, например, программа
Pablic Sub WorkBook_Open ( )
Worksheets ( “Лист 1” ). Activate
End Sub
активизирует Лист 1 при загрузке файла рабочей книги. На Листе 1, например, может быть помещена заставка
информационной системы.
Чтобы макрос запускался при закрытии книги, достаточно присвоить ему имя WorkBookBefore_Close. Такие
макросы обычно используются для восстановления свойств среды Excel после работы с информационной
системой.
3 Работа с элементами управления на рабочих листах.
Для создания элементов управления используется панель инструментов Элементы управления (или старая
панель Формы). Она содержит элементы управления: Флажок, Поле, Кнопка, Переключатель, Список,
Поле со списком, Выключатель, Счетчик, Полоса прокрутки, Надпись, Рисунок, Дополнительные
элементы, а также кнопки, предназначенные для управления этими элементами: Режим конструктора,
Свойства, Исходный текст.
Кнопка Режим конструктора предназначена для реализации возможности форматирования элементов
управления, в котором можно устанавливать свойства вручную во время разработки.
Кнопка Свойства выводит на экран одноименное окно, содержащее свойства элемента управления, в
котором можно устанавливать свойства вручную во время разработки.
Кнопка Исходный текст активизирует редактор VBA, в котором появляются модуль, связанный с рабочим
листом, в котором содержатся шаблоны для создания процедур обработчиков событий. Все элементы
управления имеют общие свойства и события и уникальные для каждого элемента.
3.1 Общие свойства элементов управления.
Name – имя элемента управления, по которому на него будет производиться ссылка в коде.
AutoSize – если установлено в True, элемент управления будет иметь наименьший размер, необходимый для
отображения его содержимого. Не применяется для списков, полос прокрутки и счетчиков.
Enabled – если установлено в True, пользователь может взаимодействовать с элементом управления, если
False – элемент управления защищен и не может находиться в фокусе.
Font – название шрифта, его размеры и стиль для отображения текста в элементе управления. Не используется
для полос прокрутки и счетчиков.
Left, Top, Width Height – позиция и размеры элемента управления в пунктах.
Locked – если установлено в True в режиме защиты рабочего листа, то пользователь не может редактировать
элемент при разработке.
Placement – применяется только для рабочих листов. Может принимать значения:
xlMoveAndSize – объект перемещается и изменяет размер вместе с ячейками, располагающимися под ним.
4
xlMove -- объект перемещается, но не изменяет размер.
xlFreeFloating -- объект не перемещается и не изменяет размер.
PrintObject -- если установлено в True, то объект печатается вместе с листом.
Visible -- если установлено в True, объект отображается во время выполнения.
3.2 Общие события элементов управления.
Click – происходит, когда пользователь нажимает и отпускает кнопку мыши на элементе управления. (щелчок
мыши).
DblClick -- происходит, когда пользователь делает двойной щелчок мыши.
KeyPress – происходит при нажатии любой клавиши на клавиатуре, когда объект находится в фокусе (кроме
клавиш управления).
MousePown, MouseMove и MouseUp -- происходит при нажатии кнопки мыши, перемещении указателя и
отпускании кнопки, соответственно.
Error – произошла ошибка, относящаяся к элементу управления.
3.3 Свойства и события элемента управления Кнопка (Command Button).
Кнопка (Command Button) предназначена для перехода к программе после щелчка мыши по кнопке. Свойства
этого элемента управления:
Caption –отображение текста на кнопке.
Picture -- отображение картинки на кнопке.
TakeFocusOnClick – обычно устанавливается в False. Кнопка не принимает фокуса, т. к. другие объекты
будут недоступны, пока кнопка имеет фокус. Основное событие этого элемента управления - Click
используется для ответа на щелчок мыши.
Пример процедуры обработки события.
Sub CommandButton_Click ( )
Worksheets (“Лист2”). Activate
End Sub
3.4 Свойства и события элемента управления Флажок (CheckBox).
Этот элемент управления применяется для предоставления пользователю возможности выбора. Флажки, как
правило, имеют два возможных состояния (установлен и сброшен), которые соответствуют значениям True и
False, но могут быть настроены для выбора из трех состояний (установлен, сброшен и не определен).Свойства
этого элемента управления:
Caption – текст отображается рядом с элементами управления.
TripleState -- если установлено в True, флажок может принимать три состояния True, False и Null, если False –
то два состояния.
Value – устанавливает и возвращает состояние флажка True – установлен, False – сброшен, Null – не
определен.
LinkedCell – позволяет автоматически помещать значение свойства Value в ячейку. Каждый раз, когда
изменяется состояние флажка, изменяется значение в ячейке и наоборот. Свойство является текстовой
строкой, содержащей ссылку на ячейку, либо адрес ячейки, например, B5 или имя диапазона.
Основное событие элемента управления Флажок - Click используется для отклика на щелчок мыши на
флажке. Для флажков, отображающих свои значения в связанных ячейках, кода обработчика событий нет, а
значение флажка помещается в ячейку, указываемую свойством LinkedCell.
Примерs процедур обработки событий
Private Sub CheckBox1_Click ( )
MsgBox “Значение флажка N1=” & CheckBox1. Value
End Sub
Private Sub CheckBox2_Click ( )
MsgBox “Значение флажка N2=” & CheckBox2. Value
End Sub
3.5 Свойства и события элементы управления Переключатель (OptionButton)
Переключатель в отличие от флажка позволяет пользователю выделять один из нескольких
взаимоисключающих параметров. Когда выделен один из переключателей, с других выделение автоматически
сбрасывается. По умолчанию все переключатели объединены в одну группу, но с помощью свойства
GroupName их можно объединять в несколько групп, например, Group1 и Group2, после чего пользователь
имеет возможность выделять один из переключателей в каждой группе.
Свойства OptionButton_ аналогичны свойствам флажка, кроме TripleState, которое не используются.
5
События элемента OptionButton также включает лишь событие Click для организации отклика на щелчок
мыши, например
Private Sub СommandButton1_Click ( )
‘ при нажатии кнопки выдается информация
‘ об активном переключателе
Select Case True
Case OptionButton1. Value=True
MsgBox “Выделен переключатель №1”
Case OptionButton1. Value=True
MsgBox “Выделен переключатель №2”
Case OptionButton1. Value=True
MsgBox “Выделен переключатель №3”
End Select
End Sub
3.6 Свойства и события элемента управления Выключатель (ToggleButton)
Выключатель по своим возможностям аналогичен элементу управления Флажок, но индикация состояния
производится несколько другим способом. Когда используются два состояния, элемент управления выглядит
либо как нажатая, либо как не нажатая кнопка. Когда используются три состояния, выключатель может иметь
значение Null и иметь вид недоступной кнопки.
Свойства этого элемента управления:
Caption – текст, отображаемый на выключателе.
TripleState -- если установлено в True, выключатель может принимать три состояния True, False и Null, если
False – то два состояния.
Value – устанавливает и возвращает состояние выключателя. True – нажат, False – не нажат, Null – не
определен.
LinkedCell – позволяет автоматически помещать значение свойства Value в ячейку каждый раз, когда
происходит изменение состояния выключателя.
Основное событие элемента управления - Click используется для отклика на щелчок мыши по Выключателю.
Пример процедуры обработки события
Private Sub ToggleButton1 _Click ( )
MsgBox “Значение выключателя=” ToggleButton1. Value
End Sub
3.7 Свойства, методы и события элемента управления Список (ListBox).
Список позволяет выделять один или несколько элементов из заданной их совокупности. В списке можно
изменять размер окна и регулировать число одновременно отображаемых элементов, а также использовать
полосу прокрутки. Так как объект ListBox может содержать данные, он несколько отличается от ранее
рассмотренных элементов управления. В Excel имеются три способа заполнения списка

установка значения свойства List,

вызов метода AddItem,

установка свойства ListFillRange.
Элемент управления ListBox имеет следующие свойства:
List – массив строк, которые представляют список. Свойства не используются для диапазона на рабочем
листе. В отличии от списка панели инструментов Формы, элементы массива строк не сохраняются при
сохранении файла и их нужно вводить в процедуре Open рабочей книги.
ListCount – количество элементов в списке.
ListFillRange – диапазон рабочего листа, с которым связано содержимое списка.
LinkedCell – диапазон на рабочем листе, с которым связано свойство Value для единичного выделения
(MultiSelect=0). Используется совместно с List и ListFillRange.
ListIndex – индекс выделенного элемента списка, используется для единичного выделения.
ListStyle – стиль отображения списка.
fmListStylePlain – обычный стиль
fmListStyleOption – отображается столбец флажков или переключателей с левой стороны списка.
MatchEntry – определяет тип автоматического перемещения по элементам списка при вводе с клавиатуры.
fm MatchEntryFirstLetter – подбирает каждому введенному символу первое слово в списке, начинающемуся с
этого символа.
fmMatchEntryComplete – подбирает слово, содержащее все введенные символы.
6
fmMatchEntryNone – отличает возможность подбора.
MultiSelect – способ выделени яэлементов.
fm MultiSelectSingle – выделение единственного элемента.
fm MultiSelectSingleMulti – множественное выделение щелчком мыши на элементе.
fm MultiSelectSingleExtended – расширенное множественное выделение (только при нажатии клавиш CTRL
или SHIFT). Следует отметить, что свойства LinkedCell, ListIndex и Value используются только для
единичного выделения.
Selected – массив булевских (True и False) значений, каждый элемент которого отображает состояние
выделения соответствующего элемента списка.
Value – содержит текст, выделенный в списке в данный момоент.
Для добавления или удаления данных из списка программным путем используется три метода объекта
ListBox.
AddItem – добавляет один элемент в список. Имеет два аргумента
pvargText – строка текста элемента.
pvargIndex – индекс элемента, после которого вставляется элемент.
Clear – удаляет все элементы из списка.
RemoveItem – удаляет один или несколько элементов из списка. Имеет один аргумент pvargIndex – индекс
первого удаляемого элемента списка. Строки нумеруются начиная с 0.
Событие Click – используется для отклика на выделение элемента щелчком мыши.
Пример
Private Sub CheckBox1_Click () ' Флажок "Стиль"
If CheckBox1. Value Then
ListBox1. ListStyle = fmListStyleOption ' альтернативный ‘стиль
Else
ListBox1. ListStyle = fmListStylePlaine ' обычный стиль
End If
End Sub
Private Sub CommandButton1_Click () ' кнопка "Заполнить список"
With ListBox1
.Clear
.AddItem "Значение 1"
.AddItem " Значение 2"
.AddItem " Значение 3"
.AddItem " Значение 4"
.AddItem " Значение 5"
.AddItem " Значение6"
.AddItem " Значение 7"
.AddItem " Значение 8"
End With
End Sub
Private Sub CommandButton2_Click () ' кнопка "Очистить список"
ListBox1.Clear
End Sub
Private Sub CommandButton3_Click () ' кнопка "Получить выборку"
Dim ListFlag As Boolean
Dim x As Integer
With ListBox1
If . MultiSelect = fmMultiSelectSingle Then 'если ‘одиночный выбор
If IsNull (. Value) Then ' анализ выделенного текста
MsgBox "Выборка отсутствует" ' выделений нет
Else
‘ одиночное
MsgBox . Value ' выделение есть
End If
Else ' множественное выделение
For x = 0 To . ListCount – 1 ' цикл для всех элементов ‘списка
If . Selected (x) Then
MsgBox . List (x) ' вывод выделенных ‘элементов
7
End If
Next x
End If
End With
End Sub
‘Множественный выбор
Private Sub OptionButton1_Click () ' переключатель обычный
ListBox1. MultiSelect = fmMultiSelectSingle
End Sub
Private Sub OptionButton2_Click () ' переключатель множественный
ListBox1. MultiSelect = fmMultiSelectMulti
End Sub
Private Sub OptionButton3_Click () ' переключатель расширенный
ListBox1. MultiSelect = fmMultiSelectExtendedi
End Sub
3.8 Элемент управления Поле со списком (ComboBox).
Объект ComboBox отражает в каждый момент только один выделенный элемент и всегда является списком с
единичным выделением, т. е. в нем нельзя выделить несколько элементов. Находящаяся справа
раскрывающая кнопка может быть изображена в одном из четырех видов: пустая, со стрелкой внизу, с
многоточием или в виде символа точки. Щелчок на раскрывающей кнопке приводит к появлению списка
элементов под полем и пользователь может выделить свой элемент из этого списка. После этого список
исчезает, и поле вновь отображает только выделенный элемент. Существует два стиля ComboBox,
определяемые свойством Style:
fmStyleDropDownList – поле со списком без возможности ввода значения.
fmStyleDropDownCombo -- поле со списком с возможностью ввода значения, (раскрывающееся поле),
введенное значение при этом присваивается свойству Value.
Многие свойства и методы объекта ComboBox аналогичны ListBox, однако имеется и одно уникальное
свойство ListRows, принимающее целое значение, соответствующее количеству элементов, отображаемое в
списке после нажатия раскрывающейся кнопки
Private Sub ComboBox1_Change () ' раскрывающийся список
MsgBox ComboBox1. Value
End Sub
Private Sub ComboBox2_Change () ' раскрывающееся поле с ‘возможным вводом значений
MsgBox ComboBox2. Value
End Sub
Private Sub ComboBox3_DropButtonClick ()
MsgBox "Щелчок на раскрывающей кнопке" ‘раскрывающаяся ‘кнопка с многоточием
End Sub
‘Кнопка Заполнить список
Private Sub CommandButton1_Click () ' эллипсовидный стиль ‘раскрывающейся кнопки
Dim x As Integer
ComboBox1. Clear
ComboBox2. Clear
ComboBox3. Clear
For x = 1 To 10
ComboBox1. AddItem "Элемент " & x ‘ заполнение ‘списков
ComboBox2. AddItem "Элемент " & x
ComboBox3. AddItem "Элемент " & x
Next x
End Sub
3.9 Свойства и события элементов управления Полоса прокрутки (ScrollBar) и Cчетчик (SpinButton).
Оба эти элемента представляют графический интерфейс для установки числовых значений. Пользователь
может изменять значение полосы прокрутки двумя способами: щелчком на стрелках, щелчком внутри полосы
8
прокрутки и перемещением ползунка. Значение счетчика изменяется только щелчком на стрелках счетчика.
Основные свойства этих элементов управления:
Max -наибольшее значение полосы прокрутки или счетчика, должно быть неотрицательным.
Min -наименьшее значение полосы прокрутки или счетчика, должно быть неотрицательным и меньшим, чем
значение Max.
SmallChange – положительное или отрицательное целое значение, определяющее величину изменения при
щелчке по одной из стрелок.
LargeChange -- положительное или отрицательное целое значение, определяющее величину изменения
полосы прокрутки при щелчке внутри полосы прокрутки.
Value – содержит текущее значение полосы прокрутки или счетчика.
LinkedCell – диапазон, с которым связано значение свойства Value элемента управления.
Основное собатие этих элементов управления – Change, оно происходит при изменении значения элемента
управления.
Пример.
Private Sub ScrollBar2_ Change.
MsgBox "Значение полосы прокрутки" ScrollBar2. Value
End Sub
3.10 Элемент управления Поле (Text Box)
Поле дает возможность пользователю вводить текст в указанную область. Поля могут применяться для ввода
простых однострочных значений или для использования в виде простейшего многострочного текстового
редактора с возможностью переноса слов. Свойства этого элемента управления следующие:
Text - устанавливает или возвращает текст, содержащийся в элементе управления.
MultiLine - если установлено в True, элемент управления будет отображать многострочный текст.
MaxLength целое значение, используемое для установки наибольшего количества символов, которое можно
ввести в один элемент.
PasswordChar - символ, отображаемый при вводе пароля. Если свойство определено, этот символ будет
отображаться вместо действительного текста, содержащегося в элементе управления.
LinkedCell. Позволяет автоматически помещать свойство Text в указанную ячейку каждый раз при изменении
текста и наоборот.
Private Sub CheckBox1_Click ()
' Флажок
TextBox2.AutoWordSelect = CheckBox1.Value ' автоматическое ‘выделение
End Sub
‘Поле
Private Sub CheckBox2_Click ()
' Флажок
TextBox2. WordWrap = CheckBox2.Value ' перенос слов
End Sub
Private Sub CheckBox3_Click ()
' Флажок
TextBox2. SelectionMargin= CheckBox3.Value ' отступ
End Sub
Private Sub CheckBox4_Click ()
' Флаг
TextBox2. SelectionMargin= CheckBox3.Value ‘многострочность
End Sub
Private Sub OptionButton1_Click ()' переключатель, значения клавиши ‘Enter
TextBox2. EnterKeyBehavior = True ' перенести на следующую ‘строку
End Sub
Private Sub OptionButton2_Click () ' переключатель, значения ‘клавиши Enter
TextBox2. EnterKeyBehavior = False ' отсутствует значение
End Sub
Private Sub SpinButton1_Change ()
' счетчик "max. длина"
On Error Resume Next
TextBox3. Value = SpinButton1. Value
9
End Sub
Private Sub TextBox3_ Change ()
'обработка события поля
On Error Resume Next
SpinButton1.Value = TextBox3.Value ' счетчик
TextBox2.MaxLength = TextBox3.Value ‘max. длина текста
End Sub
3.11 Элементы управления Надпись (Label), Рисунок (Image) и Рамка (Frame).
Наиболее важным свойством элемента управления Label является Caption, которое используется для
отображения текста. Элемент управления Image используется для отображения графики (растровых рисунков,
значков и т. д.). Элемент управления Frame используется для группировки элементов управления.
3.12 Применение дополнительных элементов управления
С помощью этих объектов можно использовать для создания самых разнообразных и сложных приложений,
которые расширяют возможности среды VBA, их называют ActiveX.
Дополнительный элемент управления -- ‘это многократно используемый компонент, который является
самостоятельным объектом.
Для добавления элементов управления в набор инструментов можно
выполнить команду
Сервис/Дополнительные элементы (Tools/Additional Controls) или в контекстном меню панели инструментов
выбрать команду Дополнительные элементы (Tools/Additional Controls).
Чтобы разместить в панели инструментов новый объект нужно: установить флажок напротив выбранного
элемента, для удаления элемента нужно сбросить этот флажок.
3.13 Элемент управления Календарь
Этот объект позволяет реализовать удобный интерфейс для ввода даты. Для добавления этого элемента к
панели инструментов элементы управления, нужно установить флажок Календарь в окне Дополнительные
элементы. Нажмите кнопку Календарь и перетащите его на Форму или на рабочий лист.
Свойства и методы элемента управления Календарь:
Name -- имя (не более 255 символов).
ControlTipText – текст выплывающей подсказки, если курсор мыши на календаре.
Day – установка или чтение выбранного дня.
Month -- установка и чтение порядкового номера месяца, например, март – 3.
Year -- установка или чтение выбранного года.
MsgBox – Календарь. Month & “/” & Календарь. Day -- & “/” & Rigth ( Календарь. Years, z)
DayLenght – формат вывода названий дней 0 – короткий П, 1 – средний Пн 2 – длинный Понедельник.
FirstDay -- установка или чтение дня недели, который отображается в первом столбце элемента Календарь.
1 – Вс ,2 – Пн ,3 - Вт
MonthLength -- установка или чтение формата месяца 0 – короткий Янв, 1 – длинный Январь
Value -- установка или чтение выбранной в элементе Календарь даты.
Height, Width, TitleFont, GridFont, GridLinesColor – свойства для изменения внешнего вида калькулятора.
NextDay – для увеличения текущего значения на один день. Календарь.
Имеются также аналогичные свойства для увеличения текущих месяца и года NextMonth и NextYear, а также
для уменьшения текущих дня, месяца и года PreviousDay, PreviousWeek и PreviousYear.
Refresh – если календарем управляет, например, поле, то Refresh используется для вывода внесенных другим
объектом изменений.
Today – установка текущей даты. Можно создать в форме кнопку “Сегодня’ и связать с ней макрос,
содержащий метод Today.
Пример. Занесение даты в ячейку
Sub InsertDate_Click()
Worksheets(“Лист1”). Range (“B7”). Value = Календарь.Value
EndSub
4 Создание пользовательских диалоговых окон.
Приложения используют диалоговые окна, когда от пользователя требуется внести информацию для
выполнения приложением различных задач. Диалоговое окно можно создать на основе пользовательской
формы UserForm, разрабатываемое в редакторе VBA. Пользовательские формы могут содержать такие же
элементы управления, которые рассмотрены ранее, и некоторые другие, не применяемые на рабочих листах.
4.1 Создание пользовательской формы.
10
В редакторе VBA выполните команду Вставка/UserForm (Insert/UserForm), на экране появится пустая
пользовательская форма и Панель инструментов, похожая на панель Элементы управления, окно Свойства
содержит свойства пользовательской формы и оно добавляется в список окна проекта.
Помещать элементы управления на пользовательскую форму можно щелчком мыши по элементу и
перетаскиванием его в окно пользовательской формы в нужное место. Для изменения свойств элемента
управления необходимо его выделить и в окне Свойства выполнить необходимые изменения свойств. В
любой момент форму можно открыть, нажав кнопку Запуск подпрограммы/ UserForm на панели
инструментов.
4.2 Отображение и закрытие формы.
Для отображения формы из подпрограммы VBA вызывается метод Show пользовательской формы. В
приведенном примере форма UserForm1 отображена на экране и проверяется нажатие кнопок ОК и Отмена с
помощью свойства Tag пользовательской формы.
Sub Отображение_формы ()
UserForm1. Show
If UserForm1. Tag = vbOK Then
MsgBox "Нажата кнопка ОК"
Else
MsgBox "Нажата кнопка Отмена"
End If
End Sub
Для закрытия пользовательской формы вызывается метод Hide элемента управления. То есть форма может
быть закрыта с помощью кода, связанного с кнопкой на форме, содержащего вызов метода Hide. Для
отображения модуля кода формы UserForm1 необходимо выделить ее в окне проекта и выполнить команду
Вид/Программа (View/Code) или с помощью двойного щелчка мышью по модулю UserForm1, или щелчка
правой кнопкой на форме или элементе управления.
В модуле кода формы UserForm1 находятся обработчики события Click для каждой из двух кнопок. В
каждом обработчике вызывается метод Hide и в обработчике события кнопки OK свойство Tag
устанавливается в vbOK, а в обработчике событий кнопка Отмена в vbCansel. Это делается для того, чтобы
после закрытия диалогового окна можно было определить, какая кнопка была нажата при закрытии.
Private Sub CommandButton1_Click ()
Me. Hide
Me. Tag = vbOK
End Sub
Private Sub CommandButton2_Click ()
Me. Hide
Me. Tag = vbCansel
End Sub
Ключевое слово Me. Является ссылкой на объект, содержащий выполняемый код, в данном случае на форму
UserForm1. Можно было написать UserForm1. Hide, но Me - короче, и избавляет от необходимости менять
код при изменении имени формы.
Свойство Tag используется для сохранения информации о форме и ее элементах (которые также имеют это
свойство). Пусть на форме имеется такие элементы: Поле (для ввода имени), три переключателя для ввода
диапазонов и две кнопки OK и Отмена.
Sub Имя_и_возраст ()
Dim msg As String
With UserForm1
. TextBox1.Text = “”
. OptionButton2. Value = True
. Show
If . Tag = vbOK Then
Msg = “:” “&. TextBox1.Text & Chr (13)
If. OptionButton2. Value Then
Msg = msg & “:” &. OptionButton2.Caption
ElseIf. OptionButton2.Value
Then
Msg = msg & ”:” &. OptionButton2. Cahtion
Else
11
Msg = msg & “:” &. OptionButton3. Caption
End If
MsgBox msg
EndIf
EndWith
EndSub
4.3 Свойства, методы и события пользовательской формы.
Свойства:
Name CodeName. Имя, используемое при ссылке на пользовательскую форму в коде. Может быть
установлено только вручную во время разработки.
BackColor. Цвет фона пользовательской формы.
Caption Текст, отображаемый в строке заголовка.
Picture Указывает рисунок, отображаемый как фон пользщвательской формы.
StartUpPosition Применяется для автоматического центрирования.
Методы:
Show Модельно отображает пользовательскую форму.
Hide Закрывает пользовательскую форму.
PrintForm Печатает изображение пользовательскую форму.
События:
QueryClose Происходит перед закрытием пользовательской формы.
Initialize Происходит при отображении.
Terminate
Происходит
после
закрытия.
4.4 Элементы управления в пользовательских формах.
В пользовательских формах могут применяться дополнительные элементы управления Набор страниц
(MultiPage) и Выделение диапазона (RefEdit). Некоторые элементы, например, Кнопка (CommandButton)
имеют дополнительные свойства:
Default. Установка в True делает элемент кнопкой по умолчанию, т. е. нажатие Enter активизирует кнопку.
используются для кнопок ОК;
Cancel. Установка в True делает элемент отменяющей кнопкой, т. е. нажатие Esc активизирует кнопку.
Используется для кнопок Отмена.
Элементы Переключатель (OptionButton) на пользовательской форме, помещенные внутрь Рамки (Frame)
всегда выполняют функции группы вне зависимости от установки свойства GroupName. При перемещении
рамки. Все элементы управления, расположенные внутри нее, тоже будут перемещаться.
4.4.1 Элемент управления Набор страниц (MultiPage)
Этот элемент используется для реализации многостраничных диалоговых окон. На каждую страницу можно
поместить элементы управления таким образом, что при щелчке на соответствующем ярлыке будут
отображаться элементы, связанные с этой страницей. Во время разработки можно редактировать страницы с
помощью правог щелчка мыши.
Sub Demo_MultiPage ()
UserForm2. Show
End Sub
4.4.2 Элемент управления Выделение диапазона (RefEdit)
Этот элемент управления позволяет указывать ячейки в модельном диалоговом окне для выделения
диапазона. Имеется также возможность временно скрыть диалоговое окно с помощью специальной кнопки.
Нажатие кнопки приводит к запуску процедуры Demo_RefEdit
Sub CommandButton1_Click ()
Demo_RefEdit
End Sub
Sub Demo_RefEdit ()
On Error Resume Next
With UserForm3
. RefEdit1. Text = Selection. Address
. Show
If. Tag = vbOK Then
Range (. RefEdin1.Text) = . TextBox1.Text
End With
12
End Sub
4.4.3 Связывание элементов управления с ячейками рабочего листа.
Элементы управления на пользовательских формах, которые дают возможность пользователю вводить или
устанавливать значения, имеют свойство ControlSource, в котором может быть задана ссылка на диапазон
Excel или имя одной ячейки. При использовании связывания исключается возможность отмены изменений,
связанных в диалоговом окне, перед внесением их в ячейки.
4.4.4 Установка последовательности перехода.
Последовательность перехода называется порядок, в котором элементы диалогового окна будут
активизироваться при нажатии клавиши <Tab>. Для установки последовательности перехода необходимо в
редакторе VBA выполнить команду Вид/Последовательность перехода (View/Tab Order). После этого
появится диалоговое окно с текущим установленным порядком. Необходимо выбрать нужный элемент
управления и перемещать его с помощью кнопок Вверх и Вниз.
4.4.5 Отображение встроенных диалоговых окон Excel.
Excel позволяет программно отображать из подпрограмм VBA не только пользовательские диалоговые окна,
но и собственные встроенные диалоговые окна. Для этого используется семейство Dialogs. Каждое
встроенное окно имеет связанную с ним константу, которая используется как индекс для доступа к
содержимому семейства.
Пример демонстрирует диалоговое окно Печать
Sub Demo_DisplayPrint ()
Application. Dialogs (xlDialogPrint). Show
End Sub
Наиболее быстрым способом определения нужной константы является средство VBA Список компонентов,
доступное на вкладке Редактор диалогового окна Сервис/Параметры (Tools/Options). Если эта возможность
включена, то при вводе слова Dialog в коде автоматически появляется список констант. Если эта возможность
отключена, можно использовать команду Правка/Список констант (Edit/List Constants).
Пример демонстрирует диалоговое окно Открытие документа с содержащимися в нем файлами в текущем
каталоге.
Sub Demo_DisplayOpen ()
Application. Dialogs (xlDialogOpen). Show "*.*"
End Sub
4.5 Создание Мастера
Мастера применяются для последовательного задания большого числа параметров в отдельных диалоговых
окнах. Рассмотрим пример создания мастера, собирающего информацию о туристической поездке за четыре
шага.
На первом шаге в диалоговом окне Шаг 1 из 4 с помощью элемента управления TextBox (Поле) задается имя
туриста.
На втором шаге в диалоговом окне Шаг 3 из 4 с помощью трех элементов управления OptionButton
(Переключатель) выбирается континент – Африка, Америка или Европа.
На третьем шаге в диалоговом окне Шаг 3 из 4 с помощью двух элементов управления CheckBox (Флажок)
выбирается дополнительные услуги – Гостинница и Питание.
На последнем шаге в диалоговом окне Шаг 4 из 4 с помощью элемента управления ListBox (Список) задается
способ передвижения - на самолете, на поезде или на теплоходе.
Каждое диалоговое окно имеет также четыре кнопки Отмена, Назад, Далее и Готово. Вся информация,
собранная мастером, выводится в окне сообщения по завершению его работы.
В начале в редакторе VBA необходимо открыть пользовательскую форму WizartForm. Каждая панель
Мастера является элементом управления Frame (Рамка). Эти рамки имеют названия Frame1 – Frame 4 и они
сложены одна на другую. Чтобы сделать эти рамки временно невидимыми используются свойства.
Caption - Пустая строка
Border - fmBorderStyleNone
SpecialEffect - fmSpecialEffectFlat
Каждая рамка содержит элементы управления, которые она отображает. Рамку можно сделать видимой,
выбрав ее в раскрывающемся списке объектов (Odject Selection) окна Свойства в момент, когда
пользовательская форма выделена, или с помощью правого щелчка на окантовке рамки и выбора команды
Переместить вперед (DringForward) в контекстном меню.
Рассмотрим как осуществляется перемещение между панелями Мастера. В модуле кода формы WizardForm
объявляется переменная CurrentPanel и две константы FirstPanel и LastPanel.
Dim CurrentPanel As Integer
13
Cont FirstPanel = 1
Cont LastPane = 4
Подпрограмма ShowPanel отображает панель с номером, указанным в переменной CurrentPanel и выводит
заголовок текущей панели.
Sub ShowPanel ()
Frame1. Visible = False
Frame2. Visible = False
Frame3. Visible = False
Frame4. Visible = False
Select Case CurrentPanel
Case1
Frame1. Visible = True
Case2
Frame2. Visible = True
Case3
Frame3. Visible = True
Case4
Frame1. Visible = True
End Select
Me. Caption = "Мастер - шаг" & &_"из" & LastPanel
End Sub
Перед вызовом процедуры ShowPanel необходимо присвоить нужное значение переменной CurrentPanel. В
рассматриваемом примере эти действия выполняются три раза. В первый раз – для отображения первой
панели Мастера в обработчике события и инициализации пользовательской формы.
Sub UserForm_Initialize ()
CarrentPanel = 1
ShowPanel
With cboTransportation
. AddItem "На самолете" '
добавление
. AddItem "На поезде" '
элементов в
. AddItem "На теплоходе" '
список
End With
End Sub
В двух других случаях переменная CurrentPanel изменяется в обработчиках события Click для кнопок Назад
и Далее. В этих процедурах проверяется также, является ли отображаемая панель первой или последней, и,
при необходимости отключаются соответствующие кнопки
Sub cmdNext_Click () ' Кнопка Далее
CurrentPanel = CurrentPanel+1 ' номер панели
ShowPanel ' отображение текущей панели
cmdPrevious. Enabled = True ' Кнопка Назад разрешена
If CurrentPanel = Last_Panel Then ' последняя панель
cmdNext. Enabled = False ' Кнопка Далее запрещена
Else
cmdNext. Enabled = True ' Кнопка Далее разрешена
End If
End Sub
Sub cmdPrevious_Click () ' кнопка Назад
CurrentPanel = CurrentPanel -1 ' номер панели
ShowPanel ' отображение текущей панели
cmdNext. Enabled = True ' Кнопка Назад разрешена
If CurrentPanel = First_Panel Then ' первая панель
cmdPrevious. Enabled = False ' Кнопка Назад запрещена
Else
cmdPrevious. Enabled = True ' Кнопка Назад разрешена
End If
End Sub
14
Кнопки Готово и Отмена используют код для установки свойства Tag и закрытия формы.
Sub cmdFinish_Click () ' Кнопка Готово
Me. Hide
' закрытие формы
Me. Tag = vbOK ' установка свойства Tag
End Sub
Sub cmdCansel_Click () ' Кнопка Отмена
Me. Tag = vbCanse ' установка свойства Tag
Me. Hide
' закрытие формы
End Sub
Подпрограмма Demo_Wizard отображает Мастер и возвращает значения элементов управления после его
закрытия.
Sub Demo_Wizard ()
Dim msg As String
With WizardForm
. Show
If.Tag = vbOK Then
msg = ":" &. txtName.Text & Shr (13)
msg = msg & "Континент"
If . OptAfrica. Value Then
msg = msg & "Африка" & Chr (13)
ElseIf. OptAmerica.Value Then
msg = msg & "Америка" & Chr (13)
Else
msg = msg & "Дополнительные услуги"
If.chkHotel.Value Then
msg = msg & "Гостинница"
End If
If.chkMeals.Value Then
msg = msg & "Питание"
End If
msg = msg & Chr (13)
msg = msg "Способ путешествия:" & _ .cvoTransportation.Value
MsgBox msg
End If
End With
End Sub
5 Создание пользовательских меню и панелей инструментов
Меню Еxcel могут передвигаться по экрану и «вставать» в определенные места, подобно панелям
инструментов. Они могут содержать кнопки и текстовые элементы. Обобщением панелей инструментов и
меню являются панели команд, реализованные на основе объекта CommandBar. Для настройки большинства
элементов панелей команд можно использовать команду Сервис/Настройка. Остальные элементы
настраиваются программно с помощью объекта CommandBar.
Каждый объект CommandBar содержит семейство объектов CommandBarControl. Каждый объект
CommandBarControl может быть одним из трех типов.
CommandBarButton – кнопка или элемент меню, выполняющие команду или вызов подпрограммы.
CommandBarComboBox – поле ввода, раскрывающийся список или поле со списком.
CommandBarPopUp – отображает меню и вложенные меню.
Подпрограмма просматривает семейство объектов CommandBar и выводит в диалоговом окне имя
каждого видимого объекта.
Sub Demo_ ListVisibleCommandBars()
Dim CB As CommandBar
For Each CB In Application.Commandbars
If CB.Visible Then ’видимый, явный
MsgBox CB.Name
End If
Next CB
15
End Sub
5.1 Семейство объектов CommandBars
Для создания панели команд с помощью кода VBA можно использовать метод Add семейства
объектов CommandBars. Метод Add имеет следующие аргументы:
name - имя новой панели команд. Может использоваться как индекс в семействе CommandBars,
position - положение на экране, в которое будет помещена панель команд см. справку о VBA список констант
с этим аргументом,
menuBar - значение типа Boolean. Если True панель команд заменяет активную строку меню, если False
панель команд добавляется как панель инструментов.
temporary значение типа Boolean. Если True панель команд удаляется при закрытии Excel.
5.2 Объект CommandBar
Имеет много свойств и методов. Наиболее часто используются следующие:
Visible. Если True, то панель команд является видимой. Если False – скрытой
Position. Константа, описывающая положение панели команд на экране (см. справку ).
Controls. Возвращает семейство объектов CommandBarControls, элементы которого содержатся в панели
команд.
Методы объекта CommandBar
Delete. Удаляет панель команд. Для встроенных панелей команд использоваться не может
Reset. Восстанавливает в исходное (по умолчанию) состояние встроенную панель команд
ShowPopUp. Отображает конкретную панель команд.
5.3 Семейство объектов CommandBarControls
Для создания нового объекта CommandBarControl с помощью кода можно использовать метод Add
семейства объектов CommandBarControls. Метод Add имеет следующие аргументы
Type - тип добавляемого объекта CommandBarControls:
msoControlButton кнопка или элемент меню,
msoControlComboBox поле со списком,
msoControlDropdown раскрывающийся список,
msoControlEdit поле ввода,
msoControlPopUp вложенное меню.
temporary - значение True удаляет элемент управления при закрытии Excel.
5.4 Объект CommandBarControls
Свойства объекта
Caption. Текстовая сторона, отображенная в заголовке. Для создания клавиши быстрого вызова используется
символ &.
CommandBar. (только для CommandBarPopUp). Объект является меню или вложенным меню элемента
управления.
Enabled. Если принимает значение True, то элемент управления может быть выделен пользователем, если
False элемент управления становится недоступным и не может быть выделен.
FaceId. Число, являющееся идентификатором стандартного встроенного рисунка, который отображается на
элементе управления.
OnAction. Имя подпрограммы VBA, которая будет выполняться при активизации элемента управления.
Style. (только для CommandBarButton). Определяет, что будет отображаться на кнопке: текст, рисунок или
их комбинация.
ToolTipText. Текст, отображаемый в окошке всплывающей подсказки элемента управления.
Visible. Если True, то элемент управления видим, если False – спрятан.
5.5 Пример создания панели инструментов.
Sub AddToolBar()
With Application.CommandBars.Add (“Панель инструментов”, False,_ True)
.Visible = True 'видим элемент управления
.Position = msoBarLeft 'по левому краю
With.Controls 'объект CommandBarControls
With.Add(msoControlButton)
.Caption = “кнопка 1”
.faceId = 12
.OnAction = “Proc”
End With
16
With.Add(msoControlButton)
.Caption = “кнопка 2”
.faceId = 13
.OnAction = “Proc”
End With
With.Add(msoControlButton)
.Caption = “кнопка 3”
.faceId = 14
.beginGroup = True 'новая группа
.OnAction = “Proc”
End With
End With
End With
End Sub
5.6 Пример создания пользовательского меню.
Sub Demo_AddMenu()
On Error Resume Next
With Application.CommandBars.Add (“Новое меню”, ,True, True)
.Visible = True 'видимое меню
With.Controls 'семейство объектов CommandControls
With.Add( msoControlPopUp) 'вложенное меню
.Caption = “&Меню1” 'название пункта
With.Controls
With.Add(msoControlButton) 'элементы меню
.Caption = “кнопка&1” 'команда меню1
.OnAction = “Proc” 'вызываемая программа
End With
With.Add(msoControlPopUp) 'вложенное меню
.Caption = “меню&3”
With.Add(msoControlButton) 'элемент меню
.Caption = “кнопка&5”
.OnAction = “Proc” 'вызываемая программа
End With
With.Add(msoControlButton) 'элемент меню
.Caption = “кнопка&6”
.OnAction = “Proc” 'вызываемая программа
End With
End With
End With
With.Add(msoControlPopUp) 'вложенное меню
.Caption = “м&еню2”
With.Controls
With.Add(msoControlButton) 'элемент меню
.Caption = “кнопка&3”
.OnAction = “Proc”
End With
With.Add(msoControlButton) 'элемент меню
.Caption = “кнопка&4”
.OnAction = “Proc”
End With
End With
End With
End With
End With
End With
End Sub
17
Sub Proc()
MsgBox 'Подпрограмма вызвана
End Sub
5.7 Управление объектами CommandBar
Подпрограмма демонстрирует запрещение, скрытие и удаление элементов управления, а также
восстановление меню.
Sub Manipulate ( )
Dim CBControl As CommandBarControl
On Error Resume Next
With Application.CommandBars(“Пользовательское меню”)
.Vsible = False
.Delete
End With
With Application.CommandBars(“Worksheet Menu Bar”)
With.Controls(“&Сервис”)
.Enabled = False
.Visible = True
DoEvents
MsgBox “Меню Сервис запрещено”
.Enabled = True
.Visible = False
MsgBox “Меню Сервис скрыто”
End With
For Each CBControl In.Controls
CBControl.Delete
DoEvents
Next CBControl
MsgBox “Удалены все меню”
.Reset
MsgBox “Строка меню восстановлена”
End With
End Sub
5.8 Создание и изменение панелей команд вручную.
В Excel существуют команды интерфейса пользователя, которые позволяют создавать и изменять
панели команд без написания кода. Для этого применяется команда Сервис/Настройка, которая активизирует
диалоговое окно Настройка. На вкладке Панели инструментов этого диалогового окна можно создавать
новые панели команд, удалять уже созданные и восстанавливать их в обычное состояние. После нажатия
кнопки Создать и ввода имени новой панели появится пустая панель. Вкладка Команды позволяет
перемещать как встроенные, так и пользовательские команды на панель. Категория Макросы предоставляет
выбор между Настраиваемой командой меню и Настраиваемой кнопкой, которые можно поместить на
панель и определить для них подпрограмму, выполняемую при выборе этого элемента.
После перетаскивания настраиваемой команды меню на новую панель и нажатия правой кнопки мыши
появляется контекстное меню, в котором можно задать имя, рисунок и стиль кнопки. Выбор команды
Назначить макрос в этом меню приводит к открытию диалогового окна Назначить макрос, в котором можно
установить связь между кнопкой и программой VBA. Лучше устанавливать связь с подпрограммами,
находящимися в модуле Эта книга.
Разработанную панель команд можно подключать к рабочей книге, таким образом, она будет доступна
при распространении созданного приложения. Для этого необходимо нажать кнопку Вложить на вкладке
Панели инструментов диалогового окна Настройка, что приведет к появлению диалогового окна Управление
панелями инструментов, в котором с помощью кнопки Копировать можно скопировать выделенную панель
инструментов в левом списке окна в область активной рабочей книги, отображаемую в правом списке.
Подключенную и сохраненную вместе с рабочей книгой панель команд можно в любое время удалить
из рабочего пространства Excel, но с сохранением ее подключения к рабочей книге. Тогда пользователь будет
иметь доступ к пользовательской панели команд при загрузке файла в оперативную память рабочей книги,
содержащего разработанное приложение VBA, однако после закрытия рабочей книги пользовательская
панель команд становится недоступной для пользователя.
18
Пользовательскую панель команд можно вставлять в разрабатываемое приложение и отображать ее
при запуске приложения или скрыть ее и использовать код, для ее отображения в нужный момент.
ThisWorkbook.CommandBars(“Имя панели команд”).Visible = True
Пример.
Sub HideAllCommandBars()
'-----------------------------------'скрытие всех панелей команд
'hides all command bars
'-----------------------------------Dim objCommandBar As CommandBar
On Error Resume Next
For Each objCommandBar In Application.CommandBars
objCommandBar.Visible = False
Next objCommandBar
End Sub
Sub CreateCommandBar()
'-----------------------------------'создание пользовательской панели команд этого приложения
'creates this application’s custom commandbar
'-----------------------------------Dim MenuBarBool As Boolean
If ReportDisplayed Then
MenuBarBool = False
Else
MenuBarBool = True
End If
End Sub
'-----------------------------------'Создание пользовательского меню
'-----------------------------------Sub Bar1()
'-----------------------------------'Скрытие панелей инструментов
'-----------------------------------Dim objCommandBar As CommandBar
'определение имени объекта
On Error Resume Next
For Each objCommandBar In Application.CommandBars
'для каждого объекта в семействе
objCommandBar.Visible = False
'сделать его невидимым
Next objCommandBar
'----------------------------------------------------'вызов процедуры
'удаление пользовательской панели команд этого приложения
'----------------------------------------------------DeleteCommandBar
'---------------------------------------------------------'Добавление панели меню Настраиваемая1, третий аргумент
' Application.CommandBars.Add(“Настраиваемая1”, msoBarTop, True, True)
'установлен в истина для того, чтобы вновь созданное меню добавлялось
'вместо стандартного если ложь будет добавляться в виде ПИ
'---------------------------------------------------------With Application.CommandBars.Add(“Настраиваемая1”, msoBarTop, True, True)
.Visible = True 'видимое меню
.Position = msoBarTop
19
'уже указан в Add, здесь можно не указывать
.Protection = msoBarNoChangeVisible + msoBarNoCustomise
'защита меню, можно снять
'-------------------------------------'добавляется пункт меню
'-------------------------------------With.Controls
With.Add(msoControlButton) 'элемент меню кнопка
.Caption = “Главная” 'название пункта меню (кнопка)
.Style = msoButtonIconAndCaption
'комбинация текста и рисунка на кнопке
.FaceId = 41 'рисунок к пункту меню (на кнопке)
.OnAction = “Кнопка1”
'указывается имя макроса назначенного пункту меню, лучше Proc1
End With
With.Add(msoControlButton)
'вторая кнопка
.Caption = “Таблица” 'название второй кнопки
. Style = msoButtonIconAndCaption 'текст и рисунок на кнопке
.FaceId = 457 'номер рисунка на кнопке
.OnAction = “Кнопка2”
'лучше Proc2, процедура, вызываемая при нажатии кнопки
End With
With.Add(msoControlButton)
'третья кнопка
.Caption = “Диаграмма” 'название диаграмм
.Style = msoButtonIconAndCaption 'текст и рисунок на кнопке
.FaceId = 436 'номер рисунка на кнопке
.OnAction = “Кнопка3” 'вызываемая процедура, Proc3
End With
End With
End With
With Application
.DisplayFormulaBar = False
'удаляется строка формул
.DisplayStatusBar = False
'удаляется строка состояния
'.DisplayFullScreen = True '
n = .Caption 'запоминание названия «Настраиваемая1»
.Caption = “Наше приложение”
'другое название
ActiveWorkbook.ProtectWindows: = True
'убрать системное меню
End With
With ActiveWindow
.DisplayVerticalScrollBar = False 'удаляется вертикальная полоса прокрутки
.DisplayHorizontalScrollBar = False
'удаляется горизонтальная полоса прокрутки
.DisplayWorkbookTabs = False 'удаляются ярлычки листов
.DisplayGridlines = False 'линия сетки
.DisplayHeadings = False 'заголовок экрана
End With
End Sub
Sub DeleteCommandBar()
'-------------------------------------'удаление пользовательской панели команд этого приложения
'deletes this application’s custom commandbar
'-------------------------------------On Error Resume Next
Application.CommandBars(“Настраиваемая1”).Delete
End Sub
20
'Option Explicit
Public VisibleCommandBars ( ) As String
Public AppWindowState As Variant
'Public
'Public
Public Sub SetEnvironment ( )
Dim CBar As CommandBar
Dim Counter As Integer
Application.ScreenUpdating = False
Counter = 0
For Each CBar In Application.CommandBars
If CBar.Visible And CBar.Type < > msoBarTypeMenuBar Then
ReDim Preserve VisibleCommandBars (Counter)
VisibleCommandBars (Counter) = CBar . Name
CBar.Visible = False
Counter = Counter + 1
End If
Next
With Application
If Ucase (Left (.OperatingSystem, 3) ) < > “MAC” Then
AppWindowState = .WindowState 'запоминание окна
.WindowState = xlMaximized
'разворачиваем окно
.Caption = “Название приложения” 'название окна Excel
ActiveWindow.Caption = “ ”
'убрать название окна внутр.
Else
ActiveWindow.Caption = “Название приложения”
AppFormulaBar =.DisplayFormulaBar 'запоминает строку формул
AppStatusBar = .DisplayStatusBar 'запоминает строку состояния
.DisplayFormulaBar = False
'не отображает
.DisplayStatusBar = False
'не отображает
End With
With ActiveWindow
.DisplayHorizontalScrollBar = False 'удаляется полоса прокрутки
.DisplayVerticalScrollBar = False 'удаляется полоса прокрутки
.DisplayWorkbookTabs = False 'удаляются ярлычки листов
.DisplayGridlines = False
.DisplayHeadings = False
End With
End Sub
Public Sub RestoreEnvironment ( )
Dim CBar As Variant
With Application
.ScreenUpdating = False
If Ucase (Left (.OperatingSystem, 3) ) < > “MAC” Then
.WindowState = AppWindowState
.Caption = Empty
End If
ActiveWindow.Caption = ActiveWorkbook.Name
.DisplayFormulaBar = AppFormulaBar
.DisplayStatusBar = AppStatusBar
.CommandBars (“Worksheet Menu Bar”) .Reset
.CommandBars (“Chart Menu Bar”) .Reset
End With
With ActiveWindow
.DisplayHorizontalScrollBar = True
.DisplayVerticalScrollBar = True
21
.DisplayWorkbookTabs = True
.DisplayGridlines = True
.DisplayHeadings = True
End With
For each CBar In VisibleCommandBars
Application.CommandBars (CBar) .Visible = True
Next
End Sub
6 Интерфейсные элементы объектов Excel
Внешний вид среды Excel, который можно изменять, представлен свойствами и методами объекта Application.
Установки среды не сохраняются вместе с файлом рабочей книги, содержащим приложение, поэтому
внешний вид среды Excel необходимо задавать программой во время выполнения приложения. Это легко
сделать с помощью обработчика события Open объекта Workbook, которое происходит при каждом открытии
рабочей книги.
6.1 Свойства и методы объекта Application.
Caption - заголовок, отображаемый в стороне заголовка Excel. При развернутом активном окне свойство
Caption объекта Application и свойство Caption объекта Window, одновременно появляются в строках
заголовков приложения. Установка свойства в Emply возвращает заголовок в значение по умолчанию –
Microsoft Excel.
DisplayAlerts - если false – встроенные предупреждения Excel не отображается во время выполнения
подпрограммы. При завершении работы подпрограммы это свойство автоматически устанавливается в True,
поэтому его установка в False должна осуществляться в каждой подпрограмме.
DisplayFormulaBar - если false , строка формул не отображается.
DisplayStatusBar - если false, строка состояния не отображается.
Height, Width, Left, Top - высота, ширина, расстояние от левой границы окна до левой границы экрана, и от
верхней границы окна до верхней границы экрана, соответственно, в пунктах.
StatusBar - Текст, который отображается в строке состояния Excel
ScreenUpdating - если false, то изображение на экране не обновляется при выполнении подпрограммы
WindowState - Состояние окна приложения:
xlNormal –определенных размеров,
xlMaximized – окно развернуто,
xlMinimized – окно свернуто.
Метод Quit - закрывает Excel, создавая впечатление, что выполняется автономное приложение. Если свойство
DisplayAlerts установлено в false, Excel закроется без сохранения изменений в файле.Можно вызвать метод
Save объекта Workbook для сохранения изменений
Sub SetApplication Properties ( )
Worksheens (1). Activate
With Application
.Caption = “Пользовательское приложение”
.DisplayFormulaBar = False ‘ отклключение строки формул
.Display StaturBar = False ‘откл. строки состояния
.Display Status Bar =True ‘вкл. строки состояния
.Status Bar = “Сообщение строки состояния”
.ScreenUpdating = False ‘изображение не обновляется
.WindowState = xlNormal ‘окно опр. размерами
.Height = zoo ‘размеры
.Width = zoo ‘окна
.Top = 100 ‘примечания
.Left =100
.ScreenUpdating = True ‘разрешить обновление изобр.
.WindowState = xlMaximired ‘окно развернуто
.Caption = Emply ‘восстановление названия окна
.DisplayFormula Bar = True ‘восстановление строки формул
.StatusBar = False ‘возвращениев Excel управления
‘строкой состояния
.DisplayAlerts = False ‘ не отображать встроение ‘предупреждений
.Quit ‘закрыть Excel
End with
22
End sub
6.2 Свойства и методы и события oбъектa Workbook.
Объект Wordbook представляет собой рабочую книгу, свойства, методы и события которой требуется
использовать в программе.
ActivеSheet - ссылка на активный лист в рабочей книге
Activatе– активирующая рабочая книга
Open – событие, возникающее при открытии рабочей книги. Процедура обработки этого события имеет имя
Workbook _ Open ( )
BeforeClose – событие возникает при закрытии рабочей книги до вывода запроса на сохранение изменений.
Процедура обработки данного события Sub Workbook _ BeforeClose ( )
6.3 Семейство объектов Worksteets
Представляет собой множество всех объектов Worksheet в рабочей книге. Элементы данного семейства
являются подмножеством семейства Sheets, включающего не только рабочие листы, но и листы диаграмм.
Count - хранит число объектов Worksheet в семействе Worksheets.
Метод Add создает новый рабочий лист, например Worksheets.AddBefore:=1, где необязательный параметр
Before указывает на лист, перед которым следует добавить новый. Если требуется разместить рабочий лист
последним в рабочей книге, нужно выполнить инструкцию
Wjrksheets.AddAfter = Worksheets (Worksheets.Count)
6.4 Объект Worksheet.
Name - свойство, задающее имя рабочего листа.
Visible - если True, то рабочий лист виден на экране, значение False скрывает его от пользователя, но его
можно отобразить командой Формат/ Лист/ Отобразить
Delete -удаляет рабочий лист.
Activate -активизирует рабочий лист, аналогично Select
ProtectionMade - если установлено в True, рабочий лист защищен от изменений, производимых
пользователем, а код VBA производит изменения. Если False – рабочий лист защищен от изменений как с
помощью VBA, так и пользователем.
Protect - метод, который защищает рабочий лист и поддерживает целостность формы. Имеет аргументы

password – строка пароля. Если пароль указан, защиту рабочего листа нельзя отменить без пароля .

drawingObjects - если установлен в True, 111111111объекта рабочего листа защищены.

contents - если установлен в True, содержимое ячеек рабочего листа защищены.

scenarios - если установлен в True, сценарии рабочего листа защищены.

userInterfaseOnly - если установлен в True, рабочий лист защищен от изменений, производимых
пользователем, но код VBA по – прежнему можно использовать для изменения. Если False – рабочий лист
защищен от изменений кодом VBA и пользователем.
SetBackroundPicture. У этого метода есть аргумент – filenime – сторона, содержащая путь к графическому
файлу, используемого как подложка рабочего листа.
Unprotect - отменяет защиту рабочего листа. Имеет аргумент – сторону, содержащую пароль, указание пароля
обязательно, если он указывался в методе Protect.
6.5 Объект Window
Этот объект является важным при разработке интерфейса, т. к. имеет свойства, воздействующие на рабочие
листы и рабочие книги. Большинство этих свойств могут задаваться вручную без программирования
командой Сервис / Параметры / Вид. Эти свойства сохраняются с рабочей книгой, задав их один раз, они
будут сохранены.
Свойства, воздействующие на рабочие листы.
DisplayFormulas. Если установлен в True, в ячейках отображаются формулы, если False – значения.
DisplayGridlines. Если установлено в True отображается сетка рабочего листа.
DisplayHeading. Если установлено в True, отображаются заголовки строк и столбцов.
6.6 Свойства, воздействующие на рабочую книгу.
DisplayHorizontalScrollBar. Если установка в True , отображается горизонтальная полоса прокрутки.
DisplayVerticalScrollBar. Если установлено в True, отображается вертикальная полоса прокрутки.
DisplayWorkbookTabs. Если установлено в True, отображаются ярлыки рабочих листов.
Height, Width, Left, Top. Высота, ширина, расстояние от левой границы окна до левой границы рабочего
пространства Excel в пунктах, соответственно.
WindowState. Состояние окна. Может принимать следующие значеня:
xlNormal. Размер окна определяется свойствами Height и Width
23
xlMaximized. Окно развернуто.
xlMinimized. Окно свернуто.
6.7 Использование объекта Range.
Этот объект наиболее часто используется и не входит в семейства. Объектом Range может являться ячейка,
строка, столбец, несколько расположенных рядом или отдельно ячеек. Диапазон может быть задан четырьмя
способами, которые далее обозначают Range – object
1. Как ссылка на ячейки Range ( "G14") или Range ( "B1 : Cb" )
2. Используя имя диапазона Range ("Итоги")
3. Используя объект ActiveCell, указывающий активный фокус.
4. Используя объект Selection – то что выделено на рабочем листе.
Свойства:
Address. В нем хранится расположение диапазона на рабочем листе, например Msgbox "Активной ячейкой
является" & ActiveCellAddress
Cells. Используя для ссылок на ячейки, положение которых известно
Active Calls. Cells (2,2). Activate
Active Call. Value = 100
CurrentRegion. Указывает на объект Renge , включающий диапазон ячеек, границами которого являются
пустые строки и столбцы. В результате выдается число строк текущей таблицы/
Sub Select All ( )
Range ( "A1 "). Activate ‘ первая ячейка
Active Cell. Carrent Region. Select ‘ выделена вся таблица, ‘начинающаяся с А1
Msgbox "число строк равно " & Selection.Rows. Count
End Sub
Formula. Используется для задания или чтения формулы в стиле А1
Range ( "C7 "). Formula = " = Sum (C1 : C6 )"
Name. Для присвоения имени диапазону
Range ( "A1 D1 "). Name = "Title"
Value. Для установки и чтения содержимого ячейки
Методы:
AutoFit - для автоматической настройки ширины столбца и высоты строки диапазона
Range ( A2 ). Activate
ActiveCell. Current Region. Select
Selection. AutoFit
Clear, Clear Comments, Clear Coutents, Clear Formats, Clear Notes - для очистки диапазона, комментариев,
содержимого, форматов и примечаний/
Copy, Cut - для копирования и перемещения в буфер
Объект Copy. Свойство Count в нем хранится число объектов !!!!!!!!!!! используется, когда объект Range
совместно используется с Rows и Columns
Sub countit ()
Dim Counting As String
Active Cell. Current Region. Select
Counting = " Число ячеек = "& Selection. Count
Counting = Counting & Chr (13) & " Число столбцов = " & Selection._ Columns. Count
MsgBox Counting
End Sub
PasteSpecial - метод для вставки объекта из буфера
Range object. Paste Special ‘Удаление меню управления окном
В Excel в окне приложения окне рабочей книги содержится меню управления (системное меню) в виде значка
слева в строке заголовка. Это меню можно удалить из окна рабочей книги с помощью вызова метода Protect
объекта Workbook с указанием аргумента Windows, установленного в True
Active Workbook. Protect Windows: = True
Восстановить меню управления рабочей книги можно с помощью вызова метода Unprotect
6.8 Удаление линеек прокрутки, сетки и ярлычков
Выполняется следующими командами, воздействующими на рабочую книгу и лист
24
With Active Window
DisplayHorizontalScrollBar = False линейная горизонталь в книге
DisplayVerticalScrollBar = False линейная верт. в книге
DisplayWorkbookTabs = False ярлык в книге
DisplayGridlines = False сетка листа
DisplayHeadings = False заголовок строк и столбцов
End With
6.9 Удаление меню управления окном.
В Excel в окне приложения и окне рабочей книги содержится меню управления окном (системное меню) в
виде значка слева в строке заголовка. Это меню можно удалить из окна рабочей книги с помощью вызова
метода Protect объекта Workbook с указанием аргумента Windows, установленного в True
ActiveWorkbook.Protect Windows := True
7. Использование надстроек Excel для создания законченных приложений.
При запуске приложения пользователя, разработанного средствами VBA, требуется, чтобы на машине
пользователя был установлен Excel. Обычно законченные приложения сохраняются и распространяются в
виде надстроек Excel. Надстройка – это рабочая книга, с атрибутами, идеально подходяшими для
распространения приложений. Обычно надстройка совместно используется другими рабочими книгами, как
часть полного приложения. Файл надстройки имеет расширение .xla, в отличие от .xls для файлов Excel. Код
надстройки полностью откомпилирован, что выполняется интерактивно перед сохранением надстройки. В
связи с этим программные модули и модули пользовательских форм защищены от просмотра, если
предварительно был установлен пароль. Окно рабочей книги надстройки невидимо, что позволяет
использовать ее рабочие листы для хранения данных и вычислений, которые нужно скрыть от пользователя.
Использование VBA для отображения рабочих листов xla-файла – весьма трудоемкий процесс, поэтому
следует сохранять рабочие листы в отдельном файле рабочей книги, а программу VBA – в файле надстройки.
Эти два файла целесообразно помещать в одной папке. Для запуска приложения необходимо открыть оба
файла, при этом будет исполняться код надстройки, а пользователь будет работать с файлом рабочей книги.
Если используются диалоговые окна, то этой проблемы в надстройках не существует. В надстройках
невозможно обойти автоматическую обработку событий, например Workbook_Open, и не генерируются
нежелательные для пользователя предупреждения. Скрытые в надстройке процедуры могут запускаться с
помощью диалогового окна Макрос.
7.1 Создание надстройки и защита проекта
Для создания надстройки, которая повышает качество разработанного приложения, необходимо
выполнить следующие действия:
Компиляция
проекта.
Выполняется
командой
Отладка/Компилировать
VBAProject
(Debug/Compile/VBAProject) в меню редактора VBA.
Защита проекта от просмотра. В редакторе VBA необходимо выполнить команду Сервис/Свойства
VBAProject (Tools/VBAProject Properties). В появившемся диалоговом окне выбрать вкладку Защита
(Protection). Установить флажок Блокировать просмотр проекта (Lock Progect For Viewing) и ввести пароль
защиты от просмотра (при этом следует иметь в виду, что символы на различных регистрах считаются
разными). Подтвердить пароль, набрав его повторно. Когда защита установлена, пользователь, не зная пароля,
не сможет просмотреть объекты проекта, но он смодет запустить редактор VBA и узнать имя проекта в окне
проекта. Если пользователь попытается раскрыть папку защищенного проекта, ему необходимо будет ввести
пароль.
7.2 Установка значения свойства IsAddIn рабочей книги в и сохранение рабочей книги с расширением
.xla.
В окне Excel віполнить команду Файл/Сохранть как и в диалоговом окне выберите тип файла Надстройка
Microsoft Excel. При таком методе сохранения автоматически устанавливается значение свойства IsAddIn
равным True, которое активизирует большинство атрибутов надстройки, и сохраняется копия рабочей книги с
расширением .xla, а исходный .xls – файл остается открытым. Его также следует сохранить в той же папке.
7.3 Тестирование и редактирование надстройки.
Для тестирования надстройки сначала необходимо открыть исходную рабочую книгу .xls и затем надстройку
.xla для запуска приложения. Если произойдет ошибка или возникнет необходимость модифицировать код
надстройки, то просмотреть программу можно открыв редактор VBA, выбрав имя проекта в окне проекта и
введя пароль. Для того, чтобы сделать видимой рабочую книгу надстройки, нужно установить свойство
IsAddIn объекта ThisWorkbook в False, используя окно объекта ThisWorkbook. Следует иметь в виду, что
использовать свойство ActiveWorkbook, для ссылки на рабочую книгу надстройки, нельзя. Нужно
25
индексировать по имени рабочую книгу надстройки в семействе объектов Workbooks или использовать
объект ThisWorkbook надстройки.
Для доступа к процедурам и функциям в файлах надстроек необходимо установить ссылку на
надстройку, выбирая в редакторе VBA команду Сервис/Ссылки (Toos/References), и с помощью кнопки Обзор
(Browse), установить местоположение требуемого файла надстройки. При сохранении приложения VBA со
ссылкой на файл надстройки возникает проблема, связанная с тем, что Excel будет искать файл надстройки по
сохраненному пути и в рабочей папке. Если по одному из двух путей файл надстройки будет найден, то Excel
успешно восстановит ссылку. Поэтому файлы надстроек должны сохраняться в той же папке, что и файлы
Excel, которые содержат ссылки.
7.4 Методические рекомендации по разработке интерфейса пользователя информационных систем
средствами VBA Excel.
Перечислим некоторые важные особенности разработки пользовательского интерфейса средствами VBA
Exсel.
Для инициализации информационной системы целесообразно использовать заставку, в качестве которой
может использоваться как пользовательская форма, так и рабочий лист, преобразованный в форму. Заставка
выводится сразу же при запуске приложения. На ней обычно отображается название, назначение приложения,
логотип разработчика и две кнопки Старт и Выход.
Для управления отдельными частями приложения следует использовать основную управляющую форму
(основное меню). Основным меню является форма, в которую пользователь попадает при нажатии кнопки
Старт заставки. На ней обычно отображается название основного меню, например, Основное меню
информационной системы предприятия АВС , и элементы управления, которые позволяют перемещаться к
различным составным частям приложения, из которых, в свою очередь, обязательно должны быть
реализованы переходы назад в основное меню. Из основного меню необходимо предусмотреть переход к
заставке, где имеется кнопка Выход для выхода из приложения. Наиболее эффективным и наглядным для
основного меню является кнопочный интерфейс рабочего листа, или, для более сложных систем, – интерфейс
панелей команд.
Рекомендуется разбивать приложение на основные логические компоненты и создавать для каждого из них
отдельную пользовательскую форму (рабочий лист). При разбиении приложения на логические составные
части оно становится более структурированным. Одна задача должна решаться с помощью одной формы. В
этом случае приложение становится интуитивно понятным, что облегчает его использование. Группировка
нескольких различных задач на одной форме может запутать начинающего пользователя.
Маршрут перемещения по приложению должен быть понятным для пользователя. Он не должен
задумываться, как получить доступ к отдельным компонентам приложения или главному меню, т.е.
интерфейс должен быть разработан таким образом, чтобы данная информация была очевидной. Лучшим
способом достижения этого является доступ к отдельным компонентам через основное меню приложения, а
также использование кнопочного интерфейса рабочих листов. Необходима осторожность при использовании
меню и панелей инструментов для перемещения по приложению, так как элементы меню и кнопки панели
инструментов не так хорошо видны пользователю, как, например, кнопки на рабочем листе. В итоге
пользователь может не заметить некоторого меню, предназначенного для доступа к какой-либо форме.
Рекомендуется применять в приложении по возможности больше графики. Представление информации в
графическом виде позволяет пользователю лучше её воспринимать. Если данные, например о продажах,
представлены в таблице в виде числовых рядов, то целесообразно на этом же рабочем листе отобразить эти
данные графически - на диаграммах или географических картах, что упрощает их восприятие пользователем.
Таблицы и числовые данные рекомендуется форматировать, используя преимущества встроенных
автоформатов Excel, разработанных для облегчения чтения данных и улучшения внешнего вида приложения.
При этом следует по возможности избегать использования программного кода и выполнять форматирование
вручную, когда это возможно. И лишь в случае, если компонент приложения содержит таблицы переменной
длины, следует автоматически генерировать программный код макроса форматирования с последующей его
корректировкой.
Следует избегать большого количества элементов управления на пользовательских формах и рабочих листах.
Формы (в том числе и основное меню) должны содержать не более 10 элементов управления (оптимальное
число 5). Основная управляющая форма – не более 15 элементов управления. Помещение на форму большого
количества элементов управления приводит к беспорядку и обычно запутывает пользователя.
Для подпрограмм, обрабатывающих данные на рабочих листах, рекомендуется использовать элементы
управления на листах. Если на рабочем листе есть таблица данных и написана подпрограмма, которая
некоторым образом обрабатывает эти данные, целесообразно подключить подпрограмму к элементу
управления, расположенному рядом с таблицей данных. Функции этого элемента управления, находящегося
26
рядом с данными на которые он воздейтсвует, становятся более понятными пользователю. В таких ситуациях
использование элемента управления на листе лучше, нежели использование меню или диалогового окна.
В целом можно рекомендовать по возможности больше использовать элементы управления на рабочих
листах. Несколько повторяясь, стоит ещё раз упомянуть о целесообразности их использования
непосредственно на рабочих листах или диагрммах всякий раз, когда это имеет смысл делать. У некоторых
разработчиков есть склонность использовать элементы управления исключительно в диалоговых окнах,
заставляя пользователя выполнять дополнительные действия для отображения и закрытия диалогового окна,
чего можно легко избежать, если распорложить элемент управления непосредственно на рабочем листе или
даиграмме. Диалоговые окна целесообразно использовать только тогда, когда нельзя без них обойтись,
например, для задания диапазона изменения данных (управляющий элемент RefEdit), или для задания
диапазона и некоторых других параметров, как это делается в мастере функций Excel или, например,
надстройках «Подбор параметра» или «Поиск решения». Следует отдавать предпочтение объектам,
расположенным на панели инструментов Элементы управления, а объекты панели инструментов Формы
использовать только когда без них нельзя обойтись, например, для объектов управления на диаграммах.
Использовать меню и панелей инструментов можно рекомендовать лишь в случаях, когда без них нельзя
обойтись, т.е. когда расположение элементов управления на листах и в диалоговых окнах нецелесообразно.
Расположение команд, вызывающих подпрограммы, глубоко в иерархию меню может быть неудобным для
пользователя. Однако существуют ситуации, в которых использование меню более целесообразно, например,
когда разработаны весьма сложные компоненты приложения, которые сами по себе представляют
информационные системы с десятками команд и диалоговых окон.
Применяйте команду Сервис/Настройка для разработки пользовательских панелей команд (меню и панелей
инструментов). Excel предоставляет пользователю удобные средства для их создания в интерактивном режиме
без использования программного кода, и было бы не рациональным писать программу для случая, когда без
неё можно обойтись. Созданные вручную панели команд можно легко подключить к рабочей книге и
распространять вместе с приложением. Далее, во время выполнения приложения, можно использовать
программный код VBA только для управления панелями команд.
Следует как можно шире использовать встроенные средства Excel. Многие разработчики создают мощные
приложения Excel, не прибегая к программированию в среде VBA или его минимальному использованию.
Рабочие листы Excel оснащены огромным объёмом встроенного программного обеспечения. Это сотни
встроенных функций и функций, доступных через разнообразные надстройки. Все эти функции доступны из
любого рабочего листа и выполняются быстрее, чем программы на языке VBA. К встроенным средствам,
кроме функций, относят: формулы, имена, параметры вычислений, средства скрытия и защиты данных,
сценарии, поиск решения, списки, средства сортировки, промежуточные итоги, автофильтр, средства
консолидации данных, перемещение диапазона, проверка правильности ввода данных, печать отчётов и
другие. Всё это представляет собой основные функциональные возможности Excel, которые целесообразно
использовать на рабочих листах без применения программного кода.
На завершающем этапе разработки следует удалить все признаки Excel из приложения. Окончательной целью
является создание у пользователя впечатления, что выполняется приложение пользователя, а не Excel. Если
приложение не требует применения основного меню и панелей инструментов Excel, их необходимо скрыть,
так как отображение меню Excel в верхней части экрана может сбивать с толку пользователя при выполнении
приложения. Также нужно скрыть все кнопки на панелях инструментов Excel и настроить заголовки
приложения и активного окна. Следует избавиться от строки формул, линеек прокрутки, ярлычков рабочих
листов, сетки и удалить значок системного меню Excel из левого верхнего угла экрана. Следует запретить
вывод сообщений Excel при работе приложения. Строку состяния целесообразно оставить, но управлять
выводом сообщений на нее из приложения, а не из Excel.
Следует использовать обработчик события Open объекта Workbook для задания установок среды
приложения при его запуске и обработчик события BeforeClose объекта Workbook для восстановления
установок среды Excel при завершении работы приложения. Это гарантирует возможность для пользователей
по-прежнему работать с Excel как с обычной электронной таблицей без воздействия установок среды,
оставшихся от выполнения приложения.
Пример выполнения индивидуальной работы.
1. Подготовить листы будущей информационной системы и кнопочный интерфейс связей между ними.
Создать форму-заставку с информацией об исполнителе.
27
Названия листов: «Заставка», «Главное меню», «ПИ_прогр», «Меню_прогр», «Заг_пол», «Форма», «Связанные
ЭУ».
На листе «Заставка» должны находится три кнопки:
«Об авторе», вызывающая форму с информацией об авторе ИС.
Пример макроса, описывающего действие по кнопке:
Private Sub CommandButton3_Click()
UserForm1.Show
End Sub
«Вход», активирующая лист «Главное меню»:
Пример макроса, описывающего действие по кнопке:
Private Sub CommandButton1_Click()
Worksheets("Главное меню").Activate
End Sub
и кнопка «Выход», закрывающая ИС(книгу):
Пример макроса, описывающего действие по кнопке:
Private Sub CommandButton2_Click()
ActiveWorkbook.Close
End Sub
Эти три макроса должны находится на листе «Заставка» редактора VBA
Форма, открывающаяся по кнопке «Заставка» должна содержать четыре элемента: 3 элемента Label и кнопка
«ОК»(CommandButton), закрывающая данную форму.
Пример макроса описывающего действие по кнопке «ОК»:
Private Sub CommandButton1_Click()
Me.Hide
Me.Tag = vbOK
End Sub
Этот макрос должен находится на листе кода события кнопки редактора VBA.
Остальные листы, в создаваемой ИС, должны иметь кнопку возврата на лист «Главное меню», а лист «Главное
меню» кнопку возврата на лист «Заставка».
2. На листе «ПИ_прогр» создать два переключателя и назначить им макросы добавляющие и
убирающие новую панель инструментов с количеством кнопок, согласно варианта. Кнопки на ПИ
должны вызывать окна сообщений.
Пример макроса создающего новую ПИ(в примере создается панель с пятью кнопками):
Public Sub CommandBars()
28
DeleteCommandBar
With Application.CommandBars.Add("панель инструментов_2", msoBarTop, False, False)
.Visible = True
.Position = msoBarTop
With .Controls
With .Add(msoControlButton)
.Caption = ""
'Название пункта меню
.Style = msoButtonIconAndCaption
.FaceId = 41
'Рисунок к пункту меню
.OnAction = "ShowHome"
'указывается имя макроса назначенного пункту меню
End With
With .Add(msoControlButton)
.Caption = ""
.Style = msoButtonIconAndCaption
.FaceId = 457
.OnAction = "ShowPivot"
End With
With .Add(msoControlButton)
.Caption = ""
.Style = msoButtonIconAndCaption
.FaceId = 436
.OnAction = "ShowChart"
End With
With .Add(msoControlButton)
.Caption = ""
.Style = msoButtonIconAndCaption
.FaceId = 457
.OnAction = "ShowPivot"
End With
With .Add(msoControlButton)
.Caption = ""
.Style = msoButtonIconAndCaption
.FaceId = 436
.OnAction = "ShowChart"
End With
End With
End With
End Sub
Пример макроса, удаляющего пользовательскую ПИ:
Sub DeleteCommandBar()
On Error Resume Next
Application.CommandBars("панель инструментов_2").Delete
End Sub
Пример макросов, описывающих действия на переключателях:
Удаление (переключатель Vosstanovit):
Private Sub Vosstanovit_Click()
DeleteCommandBar
End Sub
Создание (переключатель Vupolnit):
Private Sub Vupolnit_Click()
CommandBars
End Sub
29
Эти макросы должны находится на листе «ПИ_прогр» редактора VBA.
Пример процедуры, вызывающей окно сообщения для кнопки на панели инструментов:
Sub ShowHome()
MsgBox ("Нажата Главная!")
End Sub
Макрос должен находится в модуле редактора VBA.
3. Создать новую ПИ, не используя программные коды. Кнопки ПИ должны вызывать окна
сообщений.
С помощью пункта меню MS Excel Сервис->Настройка создать новую ПИ (закладка Панель инструментов).
Добавить на созданную панель новые кнопки, согласно варианта (закладка Команды, категория - макросы). С
помощью контекстного меню – пунктов «Выбрать значок для кнопки» и «Назначить макрос» создать рисунок
кнопки и назначить ей макрос, выводящий окно сообщения.
4. На листе «Меню_прогр» создать два переключателя и назначить им макросы, добавляющие и
убирающие Новое меню команд, с количеством пунктов и подменю, согласно варианта. Пункты меню
должны вызывать окна сообщений.
Пример макроса, создающего новую панель меню(в примере создается панель из четырех меню:
1-ое меню содержит пять кнопок, второе меню – 4 кнопки, третье меню – 6 кнопок и одного подменю с двумя
кнопками, четвертое меню – 3 кнопки):
Sub Bar1()
'Скрытие панелей инструментов
Dim objCommandBar As CommandBar
On Error Resume Next
For Each objCommandBar In Application.CommandBars
objCommandBar.Visible = False
Next objCommandBar
'вызов процедуры
'удаление пользовательской панели команд этого приложения
DeleteCommandBar
'Добавление создание панели меню Настраиваемая 1 , третий аргумент
'установлен в истина для того чтобы вновь созданное меню добавлялось
'вместо стандартного если ложь будет добавляться в виде ПИ
With Application.CommandBars.Add("Настраиваемая 1", msoBarTop, True, True)
.Visible = True
.Position = msoBarTop
.Protection = msoBarNoChangeVisible + msoBarNoCustomize
'добавляется пункт меню
With .Controls
With .Add(msoControlPopup)
.Caption = "Меню1" 'Название пункта меню
With .Controls
With .Add(msoControlButton) 'Элемент меню 1
.Caption = "Кнопка&1" 'команда меню 1
.OnAction = "Proc1" 'вызов процедуры
End With
With .Add(msoControlButton) 'Элемент меню 2
.Caption = "Кнопка&2" 'команда меню 2
.OnAction = "Proc2" 'вызов процедуры
End With
With .Add(msoControlButton) 'Элемент меню 3
.Caption = "Кнопка&3" 'команда меню 3
.OnAction = "Proc3" 'вызов процедуры
30
End With
With .Add(msoControlButton) 'Элемент меню 1
.Caption = "Кнопка&4" 'команда меню 1
.OnAction = "Proc4" 'вызов процедуры
End With
With .Add(msoControlButton) 'Элемент меню 2
.Caption = "Кнопка&5" 'команда меню 2
.OnAction = "Proc5" 'вызов процедуры
End With
End With
End With
With .Add(msoControlPopup)
.Caption = "Меню2" 'Название пункта меню
With .Controls
With .Add(msoControlButton) 'Элемент меню 3
.Caption = "Кнопка&6" 'команда меню 3
.OnAction = "Proc6" 'вызов процедуры
End With
With .Add(msoControlButton) 'Элемент меню 1
.Caption = "Кнопка&7" 'команда меню 1
.OnAction = "Proc7" 'вызов процедуры
End With
With .Add(msoControlButton) 'Элемент меню 2
.Caption = "Кнопка&8" 'команда меню 2
.OnAction = "Proc8" 'вызов процедуры
End With
With .Add(msoControlButton) 'Элемент меню 3
.Caption = "Кнопка&9" 'команда меню 3
.OnAction = "Proc9" 'вызов процедуры
End With
End With
End With
With .Add(msoControlPopup)
.Caption = "Меню3" 'Название пункта меню
With .Controls
With .Add(msoControlButton) 'Элемент меню 1
.Caption = "Кнопка&10" 'команда меню 1
.OnAction = "Proc10" 'вызов процедуры
End With
With .Add(msoControlButton) 'Элемент меню 1
.Caption = "Кнопка&11"
.OnAction = "Proc11" 'вызов процедуры
End With
With .Add(msoControlButton) 'Элемент меню 1
.Caption = "Кнопка&12" 'команда меню 1
.OnAction = "Proc12" 'вызов процедуры
End With
With .Add(msoControlButton) 'Элемент меню 1
.Caption = "Кнопка&13" 'команда меню 1
.OnAction = "Proc13" 'вызов процедуры
End With
With .Add(msoControlButton) 'Элемент меню 1
.Caption = "Кнопка&14" 'команда меню 1
.OnAction = "Proc14 'вызов процедуры"
End With
With .Add(msoControlButton) 'Элемент меню 1
.Caption = "Кнопка&15" 'команда меню 1
31
.OnAction = "Proc15" 'вызов процедуры
End With
With .Add(msoControlPopup) 'вложенное меню
.Caption = "М&еню4"
With .Controls
With .Add(msoControlButton) 'Элемент меню
.Caption = "Кнопка&22" 'команда меню 2
.OnAction = "Proc24"
End With
With .Add(msoControlButton) 'Элемент меню
.Caption = "Кнопка&23"
.OnAction = "Proc25"
End With
End With
End With
End With
End With
With .Add(msoControlPopup) 'вложенное меню
.Caption = "М&еню 5"
With .Controls
With .Add(msoControlButton) 'Элемент меню
.Caption = "Кнопка&27" 'команда меню 3
.OnAction = "Proc29"
End With
With .Add(msoControlButton) 'Элемент меню
.Caption = "Кнопка&28"
.OnAction = "Proc30"
End With
With .Add(msoControlButton) 'Элемент меню 1
.Caption = "Кнопка&29" 'команда меню 1
.OnAction = "Proc31" 'вызов процедуры
End With
End With
End With
End With
End With
With Aplication
.DisplayFormulaBar = False 'Удаляется строка формул
.DisplayStatusBar = False 'Удаляется строка состояния
End With
With ActiveWindow
.DisplayVerticalScrollBar = False 'Удаляется вертикальная полоса прокрутки
.DisplayHorizontalScrollBar = False 'Удаляется горизонтальная полоса прокрутки
.DisplayWorkbookTabs = False 'Удаляются ярлычки листов
.DisplayGridlines = False 'Удаляются сетка
.DisplayHeadings = False
End With
End Sub
Пример макроса, удаляющего пользовательскую панель команд:
Sub DeleteCommandBar()
On Error Resume Next
Application.CommandBars("Настраиваемая 1").Delete
End Sub
Макросы, описывающие действия переключателей, создаются по примеру пункта 2.
32
Эти макросы должны находится на листе «Меню» редактора VBA.
Макросы, выводящие окна сообщений на пункты меню, создаются по примеру пункта 2 и должны находится в
модуле редактора VBA.
5. Создать новое меню, с количеством пунктов и подменю, согласно варианта, не используя
программные коды. Пункты меню(кнопки) должны вызывать окна сообщений.
С помощью пункта меню MS Excel Сервис->Параметры создать новую панель инструментов (закладка Панель инструментов). Добавить на созданную панель, соответствующее количество пунктов меню, подменю
и кнопок (закладка – Команды, категория Новое меню). С помощью контекстного меню и пунктов «Имя» и
«Назначить макрос» изменить надпись на кнопке и назначить ей макрос, выводящий окно сообщений.
6. На листе «Заг_пол» создать два переключателя и назначить им макросы: удаляющие элементы
интерфейса – сетку, заголовки строк и столбцов и полосы прокрутки, и восстанавливающие их.
Пример макроса, удаляющего элементы интерфейса(макрос привязан к переключателю Ust_da):
Private Sub Ust_da_Click()
With ActiveWindow
.DisplayVerticalScrollBar = False 'удаляет вертикальную полосу прокрутки
.DisplayHorizontalScrollBar = False 'удаляет горизонтальную полосу прокрутки
.DisplayWorkbookTabs = False
'удаляет ярлычки листов
.DisplayGridlines = False
'удаляет строку меню
.DisplayHeadings = False
'удаляет заголовки ячеек
End With
End Sub
Пример макроса, восстанавливающего элементы интерфейса(макрос привязан к переключателю Ust_net):
Private Sub Ust_net_Click()
With ActiveWindow
.DisplayVerticalScrollBar = True 'востанавливает вертикальную полосу прокрутки
.DisplayHorizontalScrollBar = True 'востанавливает горизонтальную полосу прокрутки
.DisplayWorkbookTabs = True
'востанавливает ярлычки листов
.DisplayGridlines = True
'востанавливает строку меню
.DisplayHeadings = True
'востанавливает заголовки ячеек
End With
End Sub
Эти макросы должны находится на листе «Заг_пол» редактора VBA.
7. На листе «Связанные ЭУ» создать группу из четырех переключателей, отображающих на диаграмме
затраты на продукты питания по соответствующим годам.
- присвоить соответствующим диапазонам ячеек имена (perecluchatel_1, perecluchatel_2, perecluchatel_3,
perecluchatel_4);
- создать четыре переключателя и присвоить им имена (optperecluchatel_1, optperecluchatel_2,
optperecluchatel_3, optperecluchatel_4);
- на основании одного из диапазонов построить диграмму;
- связать созданные элементы макросами.
Пример макроса, перестраивающего диаграмму на основании включенного переключателя:
Sub ChangeChart()
Dim rngData As Range
If Лист10.optperecluchatel_1.Value = True Then
Set rngData = Лист10.Range("perecluchatel_1")
Else
If Лист10.optperecluchatel_2.Value = True Then
Set rngData = Лист10.Range("perecluchatel_2")
33
Else
If Лист10.optperecluchatel_3.Value = True Then
Set rngData = Лист10.Range("perecluchatel_3")
Else
Set rngData = Лист10.Range("perecluchatel_4")
End If
End If
End If
Application.ScreenUpdating = False
With Лист10.ChartObjects(1)
.Activate
.Chart.SetSourceData rngData
End With
ActiveWindow.Visible = False
Лист10.Range("A1").Select
End Sub
Этот макрос должен находится в модуле редактора VBA.
Пример макроса привязанного к переключателю optperecluchatel_1 (для остальных - аналогично):
Private Sub optperecluchatel_1_Click()
ChangeChart
End Sub
Эти макросы должны находится на листе «Связанные ЭУ» редактора VBA.
8. На листе «Форма» создать кнопку, вызывающую форму с элементом RefEdit, позволяющую в ячейки
выбранного диапазона(элемент RefEdit) заносить значения из элемента TextBox.
На форме должны находиться следующие элементы: две метки (Label), элемент RefEdit и элемент TextBox, а
также кнопки «ОК» и «Отмена».
В редакторе VBA создать новую форму и разместить на ней указанные элементы ToolBox. А затем работу
этих элементов описать с помощью макросов.
Пример макроса по заполнению ячеек, выбранного диапазона:
Public Sub Demo_RefEdit()
On Error Resume Next
With UserForm3
.RefEdit1.Text = Selection.Addres
.Show
If .Tag = vbOK Then
Range(.RefEdit1.Text) = .TextBox1.Text
MsgBox "Нажата кнопка ОК"
34
Else
MsgBox "Нажата кнопка Отмена"
End If
End With
End Sub
Этот макрос должен находится на листе «Форма» редактора VBA.
Примеры макросов, описывающих кнопки «ОК» и «Отмена»:
«ОК»
Private Sub CommandButton1_Click()
Me.Hide
Me.Tag = vbOK
End Sub
«Отмена»
Private Sub CommandButton2_Click()
Me.Hide
Me.Tag = vbCancel
End Sub
Эти макросы должны находится на листе кода события кнопок редактора VBA.
9. На листе «Форма» создать кнопку, вызывающую форму с элементом MultiPage, позволяющую
вносить данные в поля формы.
На форме должен находится двухстраничный элемент MultiPage. На первой странице – два текстовых поля
(TextBox). На второй – два текстовых поля(TextBox) и раскрывающийся список (ComboBox). А также кнопка,
закрывающая форму.
Пример макроса, добавляющего элементы в раскрывающийся список:
Private Sub ComboBox1_DropButtonClick()
ComboBox1.AddItem "отлично"
ComboBox1.AddItem "хорошо"
ComboBox1.AddItem "удовлетворительно"
ComboBox1.AddItem "неудовлетворительно"
End Sub
Пример макроса, привязанного к кнопке «Закрыть»:
Private Sub CommandButton1_Click()
Me.Hide
35
End Sub
Эти макросы должны находится на листе кода события кнопок редактора VBA.
10. Назначить макрос на открытие ИС (рабочей книги), который меняет настройки приложения и
открывает форму, созданную в пункте 1.
Пример макроса:
Public Sub SetEnvironment()
Dim CBar As CommandBar
Dim Counter As Integer
Application.ScreenUpdating = False
Counter = 0
For Each CBar In Application.CommandBars
If CBar.Visible And CBar.Type <> msoBarTypeMenuBar Then
CBar.Visible = False
Counter = Counter + 1
End If
Next
With Application
If UCase(Left(.OperatingSystem, 3)) <> "MAC" Then
AppWindowState = .WindowState
.WindowState = xlMaximized
.Caption = "Название приложения"
ActiveWindow.Caption = ""
Else
ActiveWindow.Caption = "Название приложения"
End If
AppFormulaBar = .DisplayFormulaBar
AppStatusBar = .DisplayStatusBar
.DisplayFormulaBar = False
.DisplayStatusBar = False
End With
With ActiveWindow
.DisplayHorizontalScrollBar = False
.DisplayVerticalScrollBar = False
.DisplayWorkbookTabs = False
End With
End Sub
Этот макрос должен находится в модуле редактора VBA.
Вышеуказанный макрос запускается по событию – открытия книги, которое описывается на листе «Эта
книга» редактора VBA:
Private Sub Workbook_Open()
UserForm1.Show
SetEnvironment
End Sub
11. Назначить макрос на закрытие ИС (рабочей книги), который восстанавливает настройки
приложения.
Пример макроса:
Public Sub RestoreEnvironment()
Dim CBar As Variant
With Application
.ScreenUpdating = False
36
If UCase(Left(.OperatingSystem, 3)) <> "MAC" Then
.WindowState = AppWindowState
.Caption = Empty
End If
ActiveWindow.Caption = ActiveWorkbook.Name
.DisplayFormulaBar = AppFormulaBar
.DisplayStatusBar = AppStatusBar
.CommandBars("Worksheet Menu Bar").Reset
.CommandBars("Chart Menu Bar").Reset
End With
With ActiveWindow
.DisplayHorizontalScrollBar = True
.DisplayVerticalScrollBar = True
.DisplayWorkbookTabs = True
End With
For Each CBar In VisibleCommandBars
Application.CommandBars(CBar).Visible = True
Next
End Sub
Этот макрос должен находится в модуле редактора VBA.
Вышеуказанный макрос запускается по событию – закоытия книги, которое описывается на листе «Эта книга»
редактора VBA:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
RestoreEnvironment
End Sub
Индивидуальное задание.
1. Подготовить листы будущей информационной системы и кнопочный интерфейс связей между ними.
Создать форму-заставку с информацией об исполнителе.
2. На листе «ПИ_прогр» создать два переключателя и назначить им макросы добавляющие и
убирающие новую панель инструментов с количеством кнопок, согласно варианта. Кнопки на ПИ
должны вызывать окна сообщений.
3. Создать новую ПИ, не используя программные коды. Кнопки ПИ должны вызывать окна
сообщений.
4. На листе «Меню_прогр» создать два переключателя и назначить им макросы, добавляющие и
убирающие Новое меню команд, с количеством пунктов и подменю, согласно варианта. Пункты меню
должны вызывать окна сообщений.
5. Создать новое меню, с количеством пунктов и подменю, согласно варианта, не используя
программные коды. Пункты меню(кнопки) должны вызывать окна сообщений.
6. На листе «Заг_пол» создать два переключателя и назначить им макросы: удаляющие элементы
интерфейса – сетку, заголовки строк и столбцов и полосы прокрутки, и восстанавливающие их.
7. На листе «Связанные ЭУ» создать группу из четырех переключателей, отображающих на диаграмме
затраты на продукты питания по соответствующим годам.
8. На листе «Форма» создать кнопку, вызывающую форму с элементом RefEdit, позволяющую в ячейки
выбранного диапазона(элемент RefEdit) заносить значения из элемента TextBox.
9. На листе «Форма» создать кнопку, вызывающую форму с элементом MultiPage, позволяющую
вносить данные в поля формы.
37
10. Назначить макрос на открытие ИС (рабочей книги), который меняет настройки приложения и
открывает форму, созданную в пункте 1.
11. Назначить макрос на закрытие ИС (рабочей книги), который восстанавливает настройки
приложения.
Контрольные вопросы.
Литература.
38
Download