Методические указания. Рекомендую скачать по ссылке книгу по работе с 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