какие средства реализации пользовательского интерфейса есть на vba
Интерфейсы (Visual Basic)
Интерфейсы определяют свойства, методы и события, которые можно реализовать в классах. Интерфейсы позволяют определить возможности в виде небольших групп тесно связанных свойств, методов и событий. Это снижает число проблем совместимости, так как можно создавать усовершенствованные реализации интерфейсов без изменения существующего кода. Вы можете добавлять новые функции в любое время с помощью дополнительных интерфейсов и реализаций.
Далее представлены другие причины, из-за которых вам может потребоваться использовать интерфейсы вместо наследования классов.
Интерфейсы более удобны в ситуациях, в которых приложениям требуется множество возможно несвязанных типов объектов для предоставления определенных возможностей.
Интерфейсы более гибкие, чем базовые классы, так как вы можете определить одну реализацию, в которой можно реализовать несколько интерфейсов.
Интерфейсы предпочтительнее в случаях, в которых нет необходимости наследовать реализацию базового класса.
Интерфейсы полезны, когда невозможно использовать наследование класса. Например, структуры не могут наследовать от классов, но они могут реализовывать интерфейсы.
Объявление интерфейсов
Например, в следующем примере кода определяется интерфейс с одной функцией, одним свойством и одним событием.
Реализация интерфейсов
зарезервированное слово Visual Basic Implements используется двумя способами. Оператор Implements означает, что класс или структура реализуют интерфейс. Ключевое слово Implements указывает, что элемент класса или структуры реализует определенный элемент интерфейса.
Оператор Implements
Ключевое слово Implements
Ключевому слову Implements требуется разделенный запятыми список элементов интерфейса, которые необходимо реализовать. Как правило, указывается только один элемент интерфейса, но можно указать несколько элементов. Спецификация элемента интерфейса состоит из имени интерфейса, которое должно быть указано в операторе implements внутри класса, точки и имени реализуемой функции-члена, свойства или события. Имя члена, реализующего член интерфейса, может использовать любой допустимый идентификатор, и оно не ограничивается InterfaceName_MethodName соглашением, используемым в более ранних версиях Visual Basic.
Типы параметров и типы возвращаемого значения элемента реализации должны соответствовать объявлению свойства или элемента в интерфейсе. Наиболее распространенный способ реализации элемента интерфейса — использование элемента с таким же, как у интерфейса, именем, как показано в предыдущем примере.
С помощью Implements можно также написать один метод, который реализует несколько методов, определенных в интерфейсе, как показано в следующем примере:
Закрытый элемент можно использовать для реализации члена интерфейса. Если закрытый член реализует член интерфейса, этот элемент становится доступен через интерфейс, хотя он недоступен напрямую через переменные класса.
Примеры реализации интерфейсов
Классы, реализующие интерфейс, должны реализовать все свойства, методы и события.
Можно реализовать свойство только для чтения со свойством, доступным для чтения и записи (т. е. не нужно объявлять его свойством только для чтения в классе реализации). В реализации интерфейса должны быть по крайней мере реализованы элементы, которые объявляются интерфейсом, но можно обеспечить дополнительные возможности, например разрешить запись свойства.
Создание пользовательского интерфейса с применением макросов в приложении Excel
Цель предлагаемого задания:
Активизировать и интегрировать разрозненные знания по отдельным темам, полученные при изучении электронных таблиц; провести плавное “погружение” учащихся в изучение нового серьезного материала по созданию макросов в приложении Excel и расшифровки команд, полученных с помощью MacroRecordera, и хранящихся в форме программ на языке VBA; ввести понятие объекта и метода и выполнить при этом задание, которое впоследствии может послужить примером для разработки автоматизированной информационной системы.
Прежде чем приступить к изучение объектно-ориентированного языка VBA я предлагаю изучить создание макросов и научиться применять их на следующей задаче.
Предложенную задачу можно представит как объединение 4 задач:
1. Хранение и обработка числовых данных в электронной таблице с применением относительных и абсолютных ссылок, а также математических и логических функций. В своем примере я привожу задачи по работе туристического агенства, отеля, книжного холдинга и фабрики по пошиву верхней одежды.
2. Проведение статистической обработки полученных результатов с использованием специальных встроенных функций. При использовании статистических функций мы их записываем с помощью MacroRecordera, то есть, сохраняем в виде процедуры.
3. Построение диаграмм и графиков по полученным расчетным данным в таблицах.
4. Создание пользовательского интерфейса (Меню), позволяющего объединить все решенные задачи (с применением макросов).
Объектно-ориентированный язык программирования Visual Basic for Application (VBA) является версией языка Visual Basic и предназначен для использования в среде приложений Microsoft Office (Word, Excel, Access и др.)
Существует достаточно простая возможность создания программы (макроса) на языке VBA с использованием MacroRecorder.
MacroRecorder – это транслятор, который переводит все действия пользователя с момента запуска MacroRecorder до окончания записи макроса на язык VBA.
Макрос – это имеющая имя последовательность заданных пользователем команд, хранящаяся в форме программы на языке VBA.
Подготовка листа Excel для дальнейшей работы:
1. В рабочей книге должно быть 5 листов. Переименуйте листы следующим образом:
l Лист5 – “Турагенство”
2. С помощью коллекции WordArt подготовьте на созданном листе “Меню” надписи “Меню” и “4 задания”.
3. Вызовите на экран дополнительную панель “Рисование”.
4. Используя элемент “Автофигура” нарисуйте на листе одну кнопку (всего кнопок будет 4).
5. Используя контекстно-зависимое меню этого объекта, добавьте надпись на кнопке “Турагенство”.
6. Измените, дизайн кнопки, т.е. поменяйте фон кнопки, а также начертание, название шрифта и размер букв надписи на кнопке.
Рис. 1. Так выглядит пользовательский интерфейс “4 задания”
1. Установим курсор на листе “Меню”.
2. Активизируем MacroRecoder с помощью команды Сервис-Макрос-Начать запись.
Появится диалоговое окно “Запись макроса”. Это диалоговое окно позволяет задать параметры макроса.
Рис. 2. Диалоговое окно “Запись макроса”
По умолчанию макросам присваиваются имена Макрос1, Макрос2 и т.д. Чтобы легче было распознать макрос, лучше присвоить ему имя, поясняющее его назначение. Присвоим макросу имя “Турагенство” и нажмем кнопку Ок. Появится плавающая панель инструментов с кнопкой “Остановить запись”. Теперь все производимые нами действия будут записываться до тех пор, пока не будет нажата эта кнопка.
Не выполняйте никаких лишних действий. Все ваши действия фиксируются и записываются. Надо выполнить только одно действие.
l Перейдите на лист “Турагенство”.
Остановите запись макроса, нажав на кнопку “Остановить запись”.
3. Просмотрите записанную программу. Для этого выполните команду Сервис-Макрос-Макросы. Созданная программа записалась в Модуле1.
Рис. 3. Главное окно редактора VBA
Таким образом, MacroRecorder записал нужную нам программу из одной строки:
Sheets(“Турагенство”).Select – выбрать лист “Турагенство”.
1. Для того чтобы эта программа выполнялась, то есть, происходил переход на лист “Турагенство” при нажатии на одноименную кнопку, выполните следующие действия:
l закройте окно редактора VBA;
l на листе “Меню” вызовите контекстно-зависимое меню на автофигуре с надписью “Турагенство”
Рис. 4. Контекстно-зависимое меню автофигуры “Турагенство”
l в появившемся меню выберите команду “Назначить макрос”
l в окне “Назначить макрос объекту” выберите имя макрос “Турагенство” и подтвердите выполнение операции, нажав на кнопку ОК.
l снимите выделение с кнопки и проверьте ее работоспособность, щелкнув по ней.
2. Создайте и оживите оставшиеся кнопки пользовательского интерфейса.
IV этап Решение задачи на листе “Турагенство”
Сформируйте и заполните накопительную ведомость по продаже путевок туристической фирмой «Пять континентов» за май 2003 г.
Фирма имеет семь постоянных маршрутов. Цена каждого маршрута и количество проданных путевок представлены в таблице. Если количество проданных путевок в месяц по каждому из маршрутов более 50, то путевки, проданные сверх этих пятидесяти, реализуются со скидкой в 15% от указанной цены.
Рассчитайте по формулам стоимость всех проданных путевок; количество проданных путевок со скидкой; для путевок, проданных со скидкой, рассчитайте размер скидки в евро и итоговую выручку по каждому туру.
Подведите итог за месяц по всем графам таблицы: количество проданных путевок фирмой за месяц, стоимость всех проданных путевок без учета скидки, общая сумма скидки, итоговая выручка за месяц по туристической фирме. Расчеты производите в евро.
Определите максимальное количество путевок, проданных со скидкой.
Определите минимальную стоимость тура.
Рассчитайте среднюю скидку за проданные путевки.
Продажа путевок туристической фирмой
«Пять континентов» за декабрь 2003 г.
Наимено-вание маршрута
Цена за тур (в евро)
Кол-во проданных путевок
Стоимость проданных путевок (в евро)
Количество путевок, проданных со скидкой
Размер скидки за проданные путевки (в евро)
Итоговая выручка (в евро)
1. Круговую диаграмму по графе «Количество проданных путевок».
2. Гистограмму по графе «Итоговая выручка».
1. Процент скидки (15%) и пограничное количество путевок (50) вынесите в отдельные ячейки с комментариями.
2. При расчете количества путевок, проданных со скидкой, используйте логическую функцию ЕСЛИ.
3. Создайте макросы для расчета максимального, минимального и среднего значений. Нарисуйте автофигуры. Привяжите созданные макросы к этим автофигурам. А также создайте еще один дополнительный макрос и кнопку для очистки ячеек с результатами вычислений этих значений.
4. На листе “Турагенство” создайте кнопку для перехода на лист “Меню”.
5. Создайте копию листа “Турагенство”. Переименуйте лист в “Формулы” и выведите в созданной таблице формулы расчета.
Образец выполненной работы представлен на рис. 5. Работу выполнила ученица Ломоносовской школы 10 класса “В” Дубровская Ксения.
Рис. 5. Выполненная работа
Проверка выполненного задания
При проверке выполненного задания учащиеся должны представить:
1. Таблицу со значениями.
2. Таблицу с формулами (рис.6). Уметь объяснить работу формулы ЕСЛИ и применение абсолютной адресации в формулах.
Рис. 6. Выполненная работа с формулами
3. Показать текст макросов в редакторе VBA, созданных при нахождении статистических показателей.
Sub Средняя_цена()
Range(«C14»).Select
ActiveCell.FormulaR1C1 = «=AVERAGE(R[-11]C[3]:R[-5]C[3])»
End Sub
Sub Максимум ()
Range(«A14»).Select
ActiveCell.FormulaR1C1 = «=MAX(R[-11]C[4]:R[-5]C[4])»
End Sub
Sub Минимум()
Range(«B14»).Select
ActiveCell.FormulaR1C1 = «=MIN(R[-11]C:R[-5]C)»
End Sub
Sub Очистка()
Range(«A14:C14»).Select
Selection.ClearContents
End Sub
На остальных листах также должны быть выполнены аналогичные задания. Условия задания в электронной таблице подбираются созвучно именам листов в созданной книге.
l реализация книг издательствами холдинга «Спутник» по кварталам за 2003 год и т.д.;
Этот материал можно использовать на факультативных занятиях, в классах с углубленным изучением информационных технологий, для выполнения проектов и курсовых работ.
Темой для проекта можно выбрать создание информационной системы “Торгово-закупочное предприятие”, в котором применение макросов необходимо, также как и написание программ на языке VBA. На рис.7 показан пользовательский интерфейс для названного проекта.
Рис. 7. Меню “Торгово-закупочное предприятие”
Функциональные интерфейсы… в VBA
«…те, кто не прочь поглазеть на любителя прилюдно свалять дурака, пусть понаблюдают, как я доказываю, что Java и Visual Basic – близнецы, разлученные при рождении, а С++ им даже не дальний родственник.»
Введение
Постоянный интерес к подходам функционального программирования в настоящее время приводит к тому, что традиционные языки программирования активно обзаводятся функциональными средствами. И, хотя чистые функциональные языки остаются пока не слишком популярными, функциональные возможности прочно обосновались в таких языках, как С++, Java, JavaScript, Python и др. Язык VBA уже многие годы пользуется заслуженной популярностью у довольно многочисленной аудитории пользователей Microsoft Office, однако этот язык практически не содержит функциональных средств.
Давайте попытаемся заполнить этого пробел – предлагаю законченную (хотя, возможно, и не безупречную) реализацию функциональных интерфейсов, выполненную средствами VBA. Реализация может служить основой для последующих доработок и улучшений.
Проблема функциональных аргументов
Первая проблема, с которой мы столкнемся на этом пути – это проблема передачи функциональных аргументов в функцию или метод. Язык VBA не содержит соответствующих средств (оператор AddressOf служит лишь для передачи адресов функциям Windows API и не вполне безопасен в работе). Это же можно сказать и об известной методике вызова функций по указателю (Магдануров Г.И. Visual Basic на практике СпБ.: “БХВ Петербург”, 2008). Давайте не будем рисковать — используем при реализации только стандартные возможности языка и стандартные библиотеки.
К сожалению, здесь нам ООП мало чем поможет. Для передачи функционального объекта в процедуру или функцию язык VBA предлагает стандартную возможность – обернуть нужную функциональность объектной оболочкой (создать объект, одним из методов которого и будет нужная функциональность). Объект можно передать как параметр. Этот подход работоспособен, однако весьма тяжеловесен – для каждой нужной функциональности придется создавать свой класс и объект этого класса.
Существует и другой способ, который оказывается существенно проще и не требует создания отдельных классов для каждой функциональности.
Предположим, что в некую процедуру proc требуется передать анонимную функцию, которая увеличивает свой аргумент на единицу. Эту функцию можно записать так:
Подобная нотация задания анонимных функций в настоящее время уже практически стала “стандартом де факто”. Единственная возможность передать такую функцию параметром состоит в использовании строкового представления:
здесь a и b – обычные параметры, а третий параметр – безымянная функция, что весьма наглядно и мало отличается от записей в популярных языках программирования.
Чтобы использовать анонимную функцию, заданную подобным образом, ее необходимо сначала привести к стандартному виду функции VBA. Это выполняет следующая служебная процедура:
Функция выделяет список параметров и тело вычисления, а затем формирует функцию с именем self. Для нашего случая функция self будет иметь следующий вид:
Очевидно, что в соответствии с синтаксисом VBA, эта функция будет делать именно то, что должна была делать анонимная функция – увеличивает значение своего аргумента на 1. Правда, эта функция – пока не есть функция VBA, а только строка, содержащая указанный код. Для того, чтобы превратить строку в функцию, можно использовать стандартную майкрософтовскую библиотеку “Msscript.ocx”. Эта COM-библиотека позволяет выполнить произвольный код VBA, заданный в строковой форме. Для этого необходимо выполнить следующее:
— Создать объект ScriptControl
— Вызвать метод установки языка (VBScript);
— Вызвать метод загрузки функции;
— Вызвать метод eval для исполнения вызова.
Все это выглядит примерно так:
После выполнения данного кода значение переменной r будет равно 6.
Здесь следует сделать три замечания:
Объектная модель
Основой модели являются объекты двух видов: Container и Generator. Объект Container является хранилищем массива произвольных размеров, объект Generator, как следует из названия, реализует генератор общего вида.
Оба объекта реализуют интерфейс aIter, который более подробно описывается ниже. Интерфейс включает 19 функций:
Имя метода | Параметры | Результат |
isGen | — | Возвращает True, если объект является генератором |
isCont | — | Возвращает True, если объект является контейнером |
getCont | — | Для контейнера возвращает локальный массив, для генератора возвращает Empty |
getNext | — | Возвращает следующее значение |
hasNext | — | Возвращает True, если следующее значение имеется |
Init | iniVal As Variant, lambda As String = «», emptyC As Boolean = False | iniVal – начальное значение; lambda – анонимная функция для генератора emptyC – при задании True создается пустой контейнер |
Take | n as integer | Возвращает контейнер, содержащий n последовательных значений, полученных из исходного объекта |
Filter | lambda as string | Возвращает объект, полученный фильтрацией исходного в соответствии с безымянной функцией lambda |
Map | lambda as string | Возвращает объект, полученный мапированием исходного в соответствии с безымянной функцией lambda |
Reduce | acc As Variant, lambda As String, | Возвращает результат свертки текущего объекта с начальным значением аккумулятора acc и сворачивающей функцией, заданной параметром lambda |
takeWhile | n As Integer, lambda As String | Возвращает контейнер, содержащий n (или менее) последовательных значений, удовлетворяющих предикату, заданному безымянной функцией lambda |
dropWhile | n As Integer, lambda As String | Возвращает контейнер, содержащий n (или менее) последовательных значений, полученных из исходного после пропуска значений, удовлетворяющих предикату, заданному функцией lambda. |
zip | iter As aIter, n As Integer = 10 | Принимает контейнер или генератор, а возвращает контейнер, содержащий пары значений – из базового контейнера и из контейнера-параметра. Размер результата по умолчанию – десять. |
zipWith | iter As aIter, lambda As String, n As Integer = 10 | Принимает контейнер и безымянную функцию двух аргументов. Возвращает контейнер, содержащий результаты применения заданной функции к последовательным парам – одно значение из базового контейнера, другое – из контейнера-параметра. |
Size | — | Для контейнера возвращает количество элементов |
summa | — | Сумма значений контейнера |
production | — | Произведение значений контейнера |
maximum | — | Максимальное значение в контейнере |
minimum | — | Минимальное значение в контейнере |
Для объекта-генератора ряд методов впрямую не реализован – необходимо сначала отобрать некоторое количество значений в контейнер. При попытке вызвать для генератора нереализованный метод, генерируется ошибка с кодом 666. Далее будет рассмотрено несколько примеров использования описанных интерфейсов.
Примеры
Печать последовательных чисел Фибоначчи:
Здесь создается генератор с начальными значениями 0 и 1 и генерирующей функцией, соответствующей последовательности Фибоначчи. Далее в цикле печатаются первые 50 чисел.
Мапирование и фильтрация:
Создается контейнер и инициализируется числовой последовательностью из диапазона от 1 до 100. Далее числа с помощью map заменяются на обратные. Из них берется двадцать первых. Далее эта совокупность фильтруется и из нее отбираются числа, большие 0.3 или меньшие 0.1. Результат возвращается в контейнере, состав которого распечатывается.
Использование свертки:
Здесь с помощью свертки считается сумма и произведение чисел от 1 до 100.
В этом примере строится генератор co1, последовательно делящий исходное число на степени 10. Затем отбираются частные до появления нуля. После чего полученный список частных отображается функцией взятия остатка от деления на 10. В результате получается список разрядов числа. Список суммируется, у него вычисляется максимум, минимум и произведение.
Выводы
Предлагаемый подход оказывается вполне работоспособным и может быть с успехом применен для решения повседневных задач VBA-программиста в функциональном стиле. Чем мы хуже джавистов?
Пользовательский интерфейс VBA 1 страница
1.1 Особенности среды программирования
Цель: знакомство с интегрированной средой программирования VBA.
VBA отличается от VB и прочих языков программирования в следующем:
— предоставляет возможность непосредственной работы с объектами MS Office. Это позволяет эффективно его использовать для автоматизации деятельности, связанной с обработкой различных типов документов.
— VBA позволяет существенно расширить вычислительные средства MS Office;
— с помощью VBA можно легко и быстро создавать различные приложения, даже не являясь программистом;
— VBA имеет графическую инструментальную среду, обеспечивающую конструирование экранных форм и управляющих элементов;
— с помощью VBA можно программировать собственные пользовательские функции, разрабатывать макросы, создавать пользовательские меню и многое другое;
— VBA позволяет с легкостью решать задачи, которые средствами обычных офисных приложений практически решить невозможно;
— VBA реализует концепцию визуального программирования, управляемого событиями. Этот язык помогает интегрировать офисные проекты в единое целое.
— VBA тесно связан с VB – компоненты, сконструированные на VB, легко используются в офисных приложениях, а VB-приложения посредством технологии Automation имеют доступ ко всем возможностям и средствам офисных приложений.
Поскольку система является «визуальной», программист (пользователь) может создавать видимую часть приложения Windows. Эта часть является основой интерфейса «программа-пользователь», с помощью которого осуществляется взаимодействие пользователя с программой. Разработка программного интерфейса осуществляется на принципах объектно-ориентированного подхода, реализованного в VBA применительно к приложениям, выполняемым под управлением Windows.
Для таких приложений характерным является существование на экране в любой момент времени множества объектов: окон, кнопок, меню, текстовых и диалоговых окон, линеек прокрутки и т.п. Пользователь имеет определенную свободу выбора в части использования этих объектов.
Для каждого объекта на экране существует ряд возможных событий. Одни из них производятся пользователем: щелчок по кнопке мыши, перетаскивание объекта, нажатие клавиши клавиатуры, ввод текста в окно и т.п.
Каждое событие проявляется в определенных действиях (откликах, реакции, поведении) программы. Эти действия можно разделить на две группы.
Вторая группа действий (отклика) на события полностью определяется программистом. Это обеспечивается возможностью задания процедуры VBA для каждого возможного для объекта события. Теоретически можно создать процедуру для любого события, но на практике программист заполняет кодом процедуры только для тех событий, которые в данной программе представляют интерес.
Таким образом, VBA предоставляет пользователю объектно-ориентированную среду программирования, основанную на событиях. Процесс разработки программы в этой среде сводится к выбору набора объектов и их свойств, заданию событий и процедур их обработки, которые в совокупности обеспечивают решение поставленной задачи.
Запуск интегрированной среды разработки приложений IDE (Integrated Development Environment – интегрированная среда разработки) редактора VBA осуществляется через запуск Windows-приложения MS Excel следующими способами:
1) выбрать последовательность команд Сервис→Макрос→Редактор Visual Basic;
2) нажать комбинации клавиш + ;
3) нажать кнопку Редактор Visual Basic панели инструментов Visual Basic MS Excel.
После запуска программы на экран будет выведено окно редактора VBA, показанного на рисунке 1.
Возвратиться из редактора Visual Basic в рабочую книгу можно:
1) выбрать команды View (Вид)→MS Excel;
2) нажать кнопку View MS Excel панели инструментов Standard.
Главное окно содержит все стандартные элементы, которыми обладает любое Windows-приложение: строку заголовка, строку управляющего меню, строку панелей инструментов, два окна Project-VBAProject и Properties.
Строка заголовка содержит название проекта Microsoft Visual Basic–Книга1.
Строка управляющего меню обеспечивает доступ к большинству команд, управляющих средой программирования. Меню и команды работают в соответствии со стандартными соглашениями, общими для всех Windows-приложений.
Под строкой управляющего меню расположена строка панели инструментов (Standard), представляющая собой набор кнопок, являющихся ярлыками для команд, с помощью которых осуществляется работа в среде VBA.
Рисунок 1 – Вид окна редактора VBA
1.3 Структура редактора Visual Basic
Пользовательский интерфейс редактора Visual Basic включает следующие основные компоненты:
— окно проекта Project-VBAProject;
— окно редактирования кода;
— окно редактирования форм;
— панель элементов управления.
1.3.1 Окно проекта Project-VBAProject
Окно проекта Project-VBAProjectв редакторе Visual Basic активизируется выбором команды View→Project Explorer (Вид→Окно проекта) или нажатием кнопки Project Explorer панели инструментов Standard.
В окне проекта Project-VBAProject, изображенного на рисунке 2, представлена иерархическая структура файлов форм и модулей текущего проекта.
В нем перечисляются все файлы проекта, доступ к которым осуществляется при помощи двух кнопок:
Файл проекта имеет расширение *.xls и содержит список всех файлов проекта. В окне отображается его структура в виде дерева, которое похоже на структуру папок в окне Explorer Windows.
Рисунок 2 – Окно проекта Project-VBAProject
В проекте автоматически создаются модули для каждого рабочего листа и для всей книги. Модуль – это лист (не путать с рабочим листом), в котором набирается код. Кроме того, модули формируются для каждой пользовательской формы, макросов и классов.
По своему предназначению модули делятся на два типа: стандартные модули и модули объектов
К стандартным модулям относятся записываемые макросы. Такие модули добавляются в проект выбором команды Insert→Module (Вставка→Модуль).
К модулям объектов относятся модули рабочих книг, рабочих листов, форм и классов.
Двойным щелчком на значке модуля в окне проекта Project-VBAProject можно открыть соответствующий модуль. Значок активного модуля в окне проаекта Project-VBAProject выделяется серым цветом.
Удаление файла из окна проекта производится выделением значка файла с последующим выбором команды File→Remove ‘имя_модуля’ (Файл→Удалить), где ‘имя_модуля’ – имя выбранного модуля.
В окне проекта выводится список проектов всех открытых рабочих книг. Это позволяет легко копировать формы, модули из одного проекта в другой при помощи простой буксировки значка файла (для копирования файла – при нажатой клавише ).
1.3.2 Окно редактирования кода
Окно редактирования кода служит для ввода и изменения кода процедур и функций приложения.
Окно редактора кода для соответствующего модуля открывается двойным щелчком на значке файла в окне проекта.
Открыть модуль в редакторе кода для соответствующего объекта (например, рабочего листа) можно с помощью выделения значка этого объекта в окне проекта с последующим выбором команды View→Code (Вид→Код), представленного на рисунке 3. Код внутри модуля организован в отдельные разделы для каждого объекта, программируемого в модуле.
|
|
Рисунок 3 – Окно редактора кода
В верхней части окна кода помещены два раскрывающихся списка, облегчающих ориентацию в процедурах. Левый раскрывающийся список позволяет выбрать управляющий объект (элемент или форму), а правый
– событие, допустимое для указанного в левом списке объекта, показанного на рисунке 4.
Рисунок 4 – Список компонентов правого раскрывающегося списка
В окне редактирования кода доступны два режима представления кода: просмотр кода отдельной процедуры и просмотр всего модуля. Переключение между режимами работы окна редактирования кода осуществляется следующими способами:
1) выбрать одну из двух кнопок в нижнем левом углу окна редактирования кода (левой
– отдельная процедура, правой – все процедуры модуля);
2) установить или снять флажок Default to Full Module View (Просмотр всего модуля) вкладки Editor (Редактор) диалогового окна Options (Параметры), отображаемого на экране командой Tools→Options (Сервис→Параметры).
Для автоматического отображения списка компонентов, сведений о процедурах, функциях, свойствах и методах, а также для проверки синтаксиса нужно установить флажки, показанными на рисунке 5:
Auto List Members (Список компонентов), Auto Quick Info (Краткие сведения), Auto Syntax Check (Проверка синтаксиса) в диалоговом окне Options (Параметры)→вкладка Editor (Редактор).
Если установлен режим просмотра всех процедур модуля, то процедуры можно отображать с разделителями (горизонтальной чертой, разделяющей две соседние процедуры) или без них. Отображение или скрытие разделителей управляет флажок Procedure Separator (Разделитель процедур) диалогового окна Options (Параметры).
Рисунок 5 – Окно Options (Параметры)
Интеллектуальные возможности редактора кода
Написание программ существенно облегчается за счет способности редактора кода автоматически завершать написание операторов, свойств и параметров. При вводе кода редактор сам предлагает пользователю список компонентов, логически завершающих вводимую пользователем инструкцию.
Например, набирая код
после ввода точки на экране отобразится список компонентов на рисунке 6, которые логически завершают данную инструкцию. Двойной щелчок на выбранном элементе из этого списка или нажатие клавиши вставляет выбранное имя в код программы.
Рисунок 6 – Список компонентов
Автоматическое отображение списка компонентов происходит только при установленном флажке Auto List Members вкладки Editor диалогового окна Options, отображаемого на экране выбором команды Tools→Options.
Список компонентов отображается только для существующих в форме или на рабочем листе элементов управлений. Поэтому, если в проект входят элементы управления, сначала нужно создать их, а потом набирать код.
К интеллектуальным ресурсам редактора кода относится также автоматическое отображение на экране сведений о процедурах, функциях, свойствах и методах после набора их имени, показанным на рисунке 7.
Рисунок 7 – Отображаемые сведения о вводимой процедуре
Автоматическое отображение на экране сведений о процедурах, функциях, свойствах и методах после ввода их имени происходит только при установленном флажке Auto Data Tips вкладки Editor диалогового окна Options, отображаемого на экране выбором команды Tools→Options.
1.3.3 Окно редактирования форм
Редактор форм является основным инструментом визуального программирования. VBA представляет разработчику проектов не только возможность использования уже существующих встроенных диалоговых окон, но и средства для разработки своих собственных форм. Пользовательские окна обеспечивают уникальный интерфейс, наилучшим образом приспособленный для решения конкретных задач, стоящих перед пользователем.
По своей сути форма (или пользовательская форма) представляет собой диалоговое окно, в котором можно размещать элементы управления (меню, кнопки, окна списков, полосы прокрутки и др.элементы). Формы позволяют реализовать интерфейс, к которому пользователь привык, работая с программными продуктами операционной системы Windows.
С точки зрения VBA форма представляет собой объект UserForm, со стандартной сеткой (группа регулярно расположенных точек). Сетка служит для удобства размещения элементов пользовательского интерфейса. Шаг сетки можно изменить, выполнив команду Tools→Options (Сервис→Параметры) (вкладка General (Общие)).
Как и любой объект, форма имеет свои свойства, методы и события.
Для того чтобы добавить форму в проект необходимо выполнить последовательность команд:
1) перейти в редактор Visual Basic;
2) выбрать команду Insert→UserForm.
В проекте появится пустое окно редактирования форм и Панель элементов управления, изображенных на рисунке 8.
Рисунок 8 – Окно Формы
1.3.4 Окно свойств “Properties”
Каждый объект (форма или элемент управления) имеет набор свойств. Они определяют внешний вид формы или элемента управления и его поведение. Окно свойств, изображенное на рисунке 9, позволяет просматривать свойства и изменять характеристики (установки) объектов. Оно содержит список всех объектов, использующихся в конкретном пользовательском интерфейсе, и предназначено для установки свойств каждого объекта.
Для того чтобы просмотреть свойства выбранного объекта, надо выполнить следующее:
— выполнить команду меню View→Properties Window (Вид→Окно свойств);
— щелкнуть по кнопке Properties Window в панели инструментов Standard.
Окно свойств состоит из двух частей: верхней и рабочей.
В верхней части расположен раскрывающийся список, пользуясь которым можно выбрать элемент управления текущей формы или саму форму.
Рабочая часть имеет две вкладки: Alphabetic (по алфавиту) и Categorized (по категориям), отображающие набор свойств выбранного объекта по алфавиту или по категориям.
Значения свойств можно изменять либо путем их ввода с клавиатуры, либо используя раскрывающиеся списки.
Рисунок 9 – Окно Свойства
1.3.5 Окно панели элементов управления (Toolbox)
Инструменты и средства управления на панели элементов управления служат для того, чтобы создавать новые элементы пользовательского интерфейса. Любое окно этого интерфейса содержит различные объекты: командные кнопки, текстовые окна, ярлыки (этикетки), переключатели и т.д. Все они называются Controls (элементами управления). Эти элементы добавляются в формы путем перетаскивания их с панели элементов управления в поле формы, указанных на рисунке 10.
Рисунок 10 – Окно инструментов
После того, как элементы управления внесены в форму, они становятся объектами или программируемыми элементами пользовательского интерфейса.
Имеется возможность расширения средств управления, представленных на панели управления. Для этого нужно выбрать команду Tools→Additional Controls (Сервис→Дополнительные элементы) и в появившемся диалоговом окне выбрать нужное средство управления.
Процесс выравнивания элементов управления в форме можно облегчить, используя команды меню Format (Формат).
2 Разработка программного кода
2.1 Структура проекта VBA
Цель: Научить студентов разрабатывать в проекте VBA программный код с помощью пользовательских подпрограмм-функций и подпрограмм-процедур.
Проект представляет собой реестр файлов, которые необходимы для генерации исполняемого файла приложения. Реестр содержится в файле проекта с расширением *.xls.
Проект состоит из иерархической структуры файлов форм и модулей.
Формы служат для создания диалоговых окон приложений VBA. Редактор форм является основным инструментом визуального программирования.
Форма – это основа графического интерфейса Windows-приложения.
Модуль – это файл, содержащий программный код, не связанный ни с одной формой или элементом управления.
Модули содержат только программные инструкции, отображенные в окне «Module1(Code)». В них декларируются переменные, константы, размещаются коды пользовательских функции и процедур.
Модули создаются для каждого рабочего листа, для всей книги, для каждой пользовательской формы, класса, макроса. Различают стандартные модули и модули объектов.
Стандартные модули содержат макросы. Они добавляются в проект командой меню Вставка/Модуль.
К модулям объектов относятся модули рабочих книг, листов, форм и классов. Формы добавляются в проект командой меню Вставка/UserForm, а модули классов – командой Вставка/Модуль классов.
2.2 Пользовательские подпрограммы-функции
Функция – это специальным образом оформленный блок программного кода, который выполняет действия в пределах своего блока и возвращает значение.
Пользовательские функции строятся в стандартном модуле редактора VBA.
Процедура типа Function представляет собой группу операторов, содержащихся между оператором Function и оператором End Function в стандартном модуле. Операторы в функции обрабатывают текст, управляют входными данными или вычисляют значения. Функция вызывается в программу помещением имени функции в программный оператор с указанием требуемых аргументов (данных, обрабатываемых функцией).
Структура кода функции пользователя.
Функция состоит из трех частей: заголовка, тела функции, конца функции.
1Заголовок содержит:
— зарезервированное слово Function;
— идентификатор (имя) функции,
— заключенный в круглые скобки список аргументов и тип возвращаемого функцией значения.
2Тело функции состоит из группы операторов
3Конец функции представлен оператором End Function
[Private | Public] FunctionИмяФункции (СписокПараметров) As Тип
Тело функции (строки кода)
End Function
[Private | Public] – необязательные ключевые слова, определяющие
область видимости функции;
Function – ключевое слово, указывающее на то, что это функция;
ИмяФункции – имя функции (задается самим пользователем);
СписокПараметров – список формальных параметров, который может
As – (как) ключевое слово, предваряющее значение типа
Тип – тип данных возвращаемого значения;
ВозвращаемоеЗначение–значение, возвращаемое функцией;
End Function–ключевые слова, указывающие на окончание
1) функция вычисляет единственное результирующее значение простого типа;
2) носителем возвращаемого значения является ее имя, т.е. идентификатор Имя_функции. Поэтому в теле функции должен присутствовать хотя бы один оператор присваивания, в левой части которого стоит имя описываемой функции, причем хотя бы один оператор такого вида должен быть выполнен. Этот оператор присваивания и определяет значение, вычисляемое с помощью функции.
Постановка задачи. Построить функцию пользователя, вычисляющую значение функции в заданных точках.
Технология выполнения задания:
2 Набрать в стандартном модуле проекта следующую пользовательскую функцию:
По умолчанию она попадает в раздел Определенные пользователем списка Категория окна Мастер функций.
— перейти из окна VBA в окно MS Excel;
— выбрать ячейку А1 и ввести число 0,126;
— выбрать ячейку А2 и ввести число 0,842;
— выбрать ячейку А3 и ввести число 0,34;
— выделить ячейку А4, в которой найти значение функции;
— выбрать команду Вставка→Функция;
— в первом окне мастера функций в списке Категория найти значение Определенные пользователем;
— в списке Функция выбрать функцию zи нажать кнопку ОК;
— во втором окне Мастера функций в поле А ввести ссылку на ячейку А1, в поле В ввести ссылку на ячейку А2, в поле Х ввести ссылку на ячейку А3 и нажать кнопку ОК.
Пример 2.
Поставка задачи. Построить функцию, которая возвращает стоимость товара по его стоимости без НДС и значению ставки НДС.
Технология выполнения задания:
СтоимостьБезНДС, НДС Î Z
2 Набрать в стандартном модуле проекта следующую пользовательскую функцию:
Function Стоимость (СтоимостьБезНДС, НДС)
Стоимость = СтоимостьБезНДС * (1 + НДС / 100)
3 Вычислить, например, стоимость товара с учетом НДС при условии, что НДС равен 25%, а стоимость товара без учета НДС равна 1000. Для этого:
— выбрать ячейку А2 и ввести число 1000 (стоимость без НДС);
— выбрать ячейку В2 и ввести число 25 (НДС);
— выделить ячейку С2, в которой найдем значение функции;
— выбрать команду Вставка→Функция;
— в первом окне мастера функций в списке Категория найти значение Определенные пользователем
— в списке Функция выбрать функцию стоимость и нажать кнопку ОК.
4 Во втором окне Мастера функций в поле СтоимостьБезНДС ввести ссылку на ячейку А2, а в поле НДС – ссылку на ячейку В2 и нажать кнопку ОК.
2.3 Пользовательские подпрограммы-процедуры
Зарезервированное слово Sub происходит от слова subroutine (подпрограмма), которое является синонимом термина процедура. Процедура представляет собой именованную часть кода, выполняющую определенные действия: вывод текста, выполнение арифметических действий, проигрывание видеофрагмента. Процедура может иметь параметры и в результате выполнения последовательности инструкций изменять их значения.
[Private | Public] SubИмяПроцедуры (СписокПараметров) As Тип
Тело процедуры (строки кода)
End Sub
2.4 Данные и их описание
2.4.1 Алфавит и лексемы языка
Алфавит VBA включает:
— прописные и строчные буквы латинского алфавита: А-Z, a-z;
— прописные и строчные буквы кириллицы: А-Я, а-я;
— символ подчеркивания «_»;
— неизображаемые символы, используемые для отделения лексем друг от друга (пробел, табуляция, переход на новую строку);
— специальные символы, участвующие в построении конструкций языка:
— комментарии, используемые для читаемости и понятности текста программы. Представляют собой последовательность любых символов, которая начинается со знака «’» (апостроф) или с ключевого слова Rem.
Rem Это тоже комментарий
Программный код VBA представляет собой последовательность лексических единиц (лексем), записанных в соответствии с принятыми синтаксическими правилами.
Лексема – это минимальная неделимая единица текста программы, которая имеет определенный смысл для компилятора.
Различают шесть классов лексем:
— свободно выбираемые и используемые идентификаторы;
— служебные (зарезервированные) слова;
— строки (строковые константы);
— операции (знаки операций);
— разделители (знаки пунктуации).
2.4.2 Переменные и константы
Переменная – это объект, занимаемый именованную область оперативной памяти. Содержимое этого объекта может изменяться в ходе выполнения программы.
Константа – это объект, значение которого фиксировано и не может быть изменено во время выполнения программы.
Правила написания идентификаторов:
1) в программе он должен быть уникальным, не должен совпадать с зарезервированными словами VBA;
2) он должен начинаться только с буквы;
Дата добавления: 2016-03-22 ; просмотров: 4284 ; ЗАКАЗАТЬ НАПИСАНИЕ РАБОТЫ
- какие средства реабилитации положены инвалиду 1 группы лежачему больному
- какие средства реально помогают похудеть