Практическая работа по vba в excel

Практическая
работа №  1

Разработка
пользовательской таблицы средствами процессора Excel, создание и выполнение
макросов Excel

Цель работы: Научится создавать и выполнять макросы в Excel.

Пояснение к работе:

Термином макрос обычно
называют файл, хранящий последовательность действий, заданных пользователем
системы. Каждый макрос должен иметь собственное имя. С помощью макроса можно
автоматизировать типовые технологические этапы при работе с системой.   При
работе с Excel, как, впрочем, и с другими программами пакета Microsoft Office,
для создания макроса легче всего использовать автоматический режим его
создания, вызываемый из главного меню системы командами СЕРВИС, Макрос.
При первоначальном запуске системы макросы отсутствуют, поэтому диалоговое окно
<<Макрос>>, вызываемое пунктом Макросы… показывает
пустой список. Пункт меню Безопасность… открывает дополнительное меню,
позволяющее задавать уровень безопасности при использовании макросов. Известен
ряд компьютерных вирусов, маскирующихся под макросы, в связи с чем
разработчиками Excel предпринят ряд дополнительных мер защиты. Так, например,
может быть задан высокий, средний и низкий уровни безопасности при работе с
макросами (по умолчанию средний и рекомендуемый уровень безопасности). Если он
используется, то при загрузке файла с диска система попросит разрешение на
подключение макросов к программе. Если такое разрешение будет дано, то макрос
будет доступен в загружаемой таблице. Пункты меню Редактор Visual Basic и
Редактор сценариев вызывают соответствующие программы (они должны быть
установлены на компьютер отдельно с инсталляционных дискет и подключены к
операционной системе).

Если в меню СЕРВИС, Макрос выбрать
пункт Начать запись…, то откроется диалоговое окно, позволяющее задать
имя макроса и, при желании, комбинацию клавиш, с помощью которой он также может
вызван в обход пункта меню Макросы…. По умолчанию система предлагает
стандартное имя Макрос#. Во избежание недоразумений старайтесь задавать
собственные имена макросов, отличные от стандартных. Начиная с этого момента
все действия с рабочей книгой дополнительно записываются в файл макроса.
Остановить запись макроса можно кнопкой Остановить запись дополнительно
открывшейся панели инструментов или через аналогичный пункт главное меню СЕРВИС,
Макрос
. Записанный макрос может быть сохранен в текущей рабочей книге и
тогда он доступен в ней и других книгах в том случае, когда она открыта или в
личной книге макросов. В последнем случае он может быть доступен в любой
открытой книге.

Удалить макрос, созданный в текущей
рабочей книге, можно кнопкой <Удалить> диалогового окна
<<Макросы>>. Если макрос создан в личной книге макросов, то для его
удаления потребуются более сложные действия, о которых будет рассказано позднее.
Поэтому старайтесь в первое время не пользоваться макросами личной книги.

Необходимо принять во внимание
существование двух возможных типов записи ссылок на ячейки в Excel: A1 и R1C1.
По умолчанию при программировании формул используется стиль A1, для которого
адрес каждой ячейки представляет собой строку символов, содержащую имя столбца
и номер строки. Использование этого стиля позволяют организовать относительную
и абсолютную адресацию к ячейкам таблицы (за счет введения в строку символа $).
Тем не менее, при записи макросов Excel использует тип ссылки R1C1. В
обозначении типа присутствуют первые буквы английских слов Row (строка) и
Column (колонка). В первую очередь обратите внимание на то, что, в отличие от
типа A1, при использовании типа ссылок R1C1 сначала записывается строка, а
потом столбец. При использовании абсолютной адресации после символов R и C
указывается собственно номер строки и столбца. Так, например, ячейка $B$3 имеет
адрес R3C2. При использовании относительной адресации в стиле R1C1 после
обозначения строки или колонки в квадратных скобках указывается смещение по
отношению к текущей ячейке. Так, например, если данные находятся в ячейке B3, а
ссылка на нее программируется в ячейке А5, то в формуле она запишется как
R[-2]C[1]. Эта запись может интерпретироваться как обращение к ячейке,
находящейся на две строки выше и одну колонку правее текущей. Соответственно
запись R[2]C[-1] означает обращение к ячейке на две строки ниже и одну колонку
левее (по отношению к активной ячейке A5 такая ячейка не существует).

Пример
1.
Рассмотрим
таблицу, показанную на рис. 1. В ней необходимо рассчитать сумму подоходного
налога (с учетом используемой ставки налога), сумму к выдаче для каждого
сотрудника, а также общие суммы уплачиваемых налогов и выплаченной заработной
платы. Записывался макрос с именем Расчет_заработной_платы. Текст макроса имеет
вид:

Рисунок 1.

В
рассматриваемом примере первый оператор представляет собой заголовок процедуры.
Имя процедуры совпадает с именем макроса. Следующие шесть строчек созданы
системой в виде автоматически вставляемого комментария.

Первый
исполняемый оператор программы Range(«C2»).Select создан системой в
виде выражения, которое содержит в терминологии VBA свойство Range в сочетании
с методом Select. Обратите внимание на то, что свойство имеет записанный в
круглых скобках аргумент в виде строки символов и отделяется от метода точкой.
В нашем примере аргумент свойства представляет собой ссылку на ячейку в стиле
A1, с которой началось программирование макроса.

С помощью Help-системы
разберитесь с назначением свойства Range. Для этого установите в окне модуля
маркер на текст Range и нажмите клавишу F1. Если вы испытываете затруднения с
чтением текста на английском языке, который используется Help-системой, воспользуйтесь
дополнительной русскоязычной литературой, посвященной описанию языка VBA. В
этом случае удобно составлять собственное описание встречающихся англоязычных
терминов и хранить его в удобном месте (например, в виде отдельного файла
Excel).

Аналогично
изучите назначение метода Select.

Задание

Согласуйте с преподавателем выбранный
вами вариант задания (табл. 1). Предполагается, что в рамках одной учебной
группы варианты заданий не повторяются. Разработайте и заполните таблицу и
запрограммируйте в ней необходимые вычисления. При необходимости воспользуйтесь
функциями. Убедитесь в правильности вычислений. Оформите таблицу, задайте
шрифты, границы и т.п. В качестве примера будет рассматриваться таблица,
предназначенная для расчета налогов и определения суммы заработной платы.

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

Порядок выполнения работы

  1. Создайте новую рабочую книгу Excel. Сделайте ее настройку:
    выполните команду СЕРВИС, Параметры и в диалоговом окне выберите
    вкладку Общие, установив следующие параметры: Стиль ссылокR1C1:
    выключено.
  2. Листов в новой книге: 3.
  3. Стандартный шрифт: Arial Cyr, размер 10.
  4. Выберите рабочий каталог для сохранения новых книг.
  5. Введите имя пользователя.
  6. Выберите вкладку Вычисления, установив флажки следующих
    параметров: Вычисления: автоматически.
  7. Параметры книги: обновлять удаленные ссылки, сохранять значения
    внешних связей.

8. В меню СЕРВИС,
Макрос выберите пункт Начать запись…
. Задайте имя макроса.

9. Повторно
запрограммируйте формулы таблицы Excel и остановите запись макроса.

10. Командой Сервис,
Макрос, Редактор Visual Basic
запустите редактор Visual Basic. В окне проектов
(Project-VBAProject) (рис. 2) раскройте содержимое проекта VBAProject
(PERSONAL.XLS)
и ветвь Modules. В ее составе должен быть один
(например, Module1) или несколько модулей. Дважды щелкните левой клавишей мышки
по имени модуля. В ответ в правом верхнем окне должен появится его текст.
Просмотрите содержимое модулей и найдите записанный вами макрос.

11. Изучите
текст макроса.

12. Удалите
формулы из таблицы рабочего листа Excel и выполните макрос командой Сервис,
Макрос, Макросы
. Убедитесь, что в результате его работы содержимое таблицы
восстанавливается.

13. Снова
удалите формулы из таблицы рабочего листа Excel. Перейдите в окно VBA,
установите маркер на первом операторе макроса. Выберите пункт Run, Run
Sub/User Form
и запустите модуль на выполнение. Перейдите в таблицу Excel и
убедитесь, что в результате работы макроса формулы в ней восстановились.

14. Окончательно
оформите созданную таблицу для представления ее в отчетной документации.
Воспользуйтесь возможностями задания шрифтов, границ, заливок. Обеспечьте
компактность отображения таблицы за счет минимизации ширины строк и столбцов в
соответствии с имеющимися данными.

Задание на
выполнение работы  Таблица 1.

Номер варианта

Вид таблицы

1

Ведомость складских остатков (наименование, цена,
количество, отпускная цена, оптовая скидка)

2

Ведомость операций квартплаты (плательщик, вид
услуги, полный тариф, начислено, льгота, пени, к оплате, задолженность,
оплачено).

3

Ведомость операций оплаты за электроэнергию
(плательщик, начальное показание, конечное показание, израсходовано, полный
тариф, начислено, льгота, пени, к оплате, задолженность, оплачено)

4

Журнал учета выполнения лабораторных работ
(фамилия и инициалы студента, названия лабораторных работ, для каждой работы
дата, оценка защиты и рейтинг, средний балл, итоговый рейтинг, дата получения
зачета).

5

Журнал учета экзаменационных оценок, перечень
дисциплин, для каждой дисциплины дата, оценка, рейтинг по итогам семестра и
сессии, общий рейтинг, средний балл).

6

Расписание занятий преподавателей кафедры
(фамилии преподавателей, должность, ученое звание, ученая степень, для
каждого дня нечетной и четной недели и каждой учебной пары название или код
дисциплины, вид занятия, номера учебных групп, номер аудитории, объем учебной
нагрузки).

7

Индивидуальная выписка для преподавателя по
проведенным занятиям для представления на оплату (дата проведения, время
проведения, номер аудитории, номера групп, вид занятия, источник
финансирования (государственный бюджет или договор на оплату образовательных
услуг), количество часов, количество оплачиваемых часов, часовая ставка,
сумма к оплате).

8

Ведомость командировок (фамилия, город, страна,
цель поездки, источник финансирования, дата убытия, дата прибытия, срок
командировки, стоимость проезда туда, стоимость проезда обратно, суточные,
сумма затрат).

9

Ведомость операций туристического агентства
(фамилия, страна, город, вид транспорта туда, вид транспорта обратно,
транспортные расходы туда, транспортные расходы обратно, отель, стоимость
проживания в сутки, дата заезда, дата убытия, срок проживания, затраты на
проживание, общие затраты).

10

Ведомость операций риэлтерского агентства (адрес,
район, метро, этаж, жилая площадь, количество комнат, вспомогательная
площадь, удобства, стоимость квадратного метра, цена помещения, затраты на
ремонт и переоборудование помещения, общая стоимость).

11

Ведомость операций обменного пункта валюты
(валюта прихода, сумма прихода, курс к рублю, комиссия вид валюты, курс
валюты комиссии к рублю, комиссия в рублях, валюта расхода, сумма расхода,
курс к рублю).

12

Ведомость операций авиакассы (фамилия, направление,
рейс, дата вылета, время вылета, тариф авиакомпании, валюта тарифа, тариф в
рублях, аэропортовский сбор пункта отправления, валюта сбора пункта
отправления, сумма в рублях, аэропортовский сбор пункта прибытия, валюта
сбора пункта прибытия, сумма в рублях, стоимость трансфера, валюта трансфера,
сумма трансфера в рублях, комиссия кассы, валюта кассы, комиссия в рублях,
общая сумма операции).

13

Ведомость продаж универсама (вид товара, единица
измерения, имеющееся количество, цена складская, цена отпускная, объем
продажи в единицах измерения, остаток, стоимость продажи, скидка, льгота,
сумма к оплате, вид оплаты, комиссия банка).

14

Смета затрат на ремонт (номер операции, операция,
материалы, единица измерения, цена, стоимость, нормочасы, тариф, зарплата,
наценка, стоимость, скидка, к оплате).

15

Ведомость операций телефонной компании (абонент,
тарифный план, вид операции, тариф, время, цена операции, наценка, стоимость,
скидка, льгота, к оплате).

16

Ведомость комплектации изделия (наименование
комплектующего, количество, цена, количество на складе, стоимость складского
остатка, затраты, наценка, стоимость).

17

Таблица футбольного чемпионата (команда, страна,
город, игр, побед, ничьих, поражений, технических поражений, забито голов,
пропущено голов, очков).

18

Ведомость операций типографии (автор, название,
издательство, машинописных страниц, печатных листов, рисунков, таблиц, тираж,
тип бумаги, цена печатного листа, цена печати, тип переплета, цена переплета,
затраты на материалы, затраты на амортизацию оборудования, заработная плата,
накладные расходы, стоимость).

19

Список трудов (номер, название, место
опубликования, дата опубликования, вид публикации, номер страницы начала,
номер страницы конца, всего страниц, формат страницы, машинописных листов,
печатных листов, соавторы, доля автора, машинописных страниц автора, печатных
листов автора).

20

Ведомость операций отделения связи (адрес
назначения, адрес отправителя, вид отправления, вес отправления, тариф, дата
отправления, упаковка, цена упаковки, страховка, общая цена отправления).

21

Ведомость операций страхового агентства (фамилия
страхуемого, объект страхования, вид страхования, дата страхования, дата
начала действия страховки, дата окончания действия страховки, срок
страхования, тариф, цена полиса, скидка, льгота, к оплате).

22

Ведомость операций библиотеки (автор, название,
издательство, год издания, объем, цена, дата выдачи, контрольная дата
возврата, планируемый срок пользования, фактическая дата возврата,
фактический срок пользования, ставка штрафных санкций, штраф).

23

Ведомость операций фотоателье (фамилия заказчика,
вид операции, дата заказа, дата исполнения, общее время исполнения, тариф,
срочность, количество, стоимость, скидки, льготы).

24

Ведомость банковских операций (фамилия, дата, вид
операции, валюта операции, сумма операции, сумма операции в рублях, комиссия
операции, валюта комиссии операции, комиссия операции в рублях).

25

Ведомость операций диспетчерской такси (клиент,
адрес подачи машины, адрес назначения, дата поездки, время начала поездки,
время окончания поездки, километраж, тип машины, расчетное время выполнения
заказа, время на подачу машины, тариф, стоимость, скидка, льгота, к оплате).

26

Ведомость судейства соревнований по фигурному
катанию (участник, город, страна, вид программы, оценки судей, каждая из
которых включает оценку за технику исполнения, оценку за художественное
впечатление, место в общем зачете, итоговая оценка за технику исполнения,
итоговая оценка за художественное впечатление, суммарное место в общем
зачете).

Контрольные вопросы

1. В каком случае используется стиль
ссылок Excel :A1, а в каком R1C1?

2. В чем разница абсолютной и
относительной адресации ссылок в Excel?

3. Когда целесообразно использовать
абсолютную адресацию в Excel?

4. Если написать макрос вручную, то
какие обязательные операторы он должен содержать?

5. Каково назначение свойства Range?

6. Каково назначение метода Select?

7. Как вызвать систему помощи и
получить справку по конкретному выражению макроса?

8. Как можно запустить макрос на
выполнение?

9. Что такое построчный комментарий и
как он оформляется?

10. Какие существуют возможности для
оформления внешнего вида таблицы Excel перед ее публикацией в отчетной
документации?

     Содержание
отчета:

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

ПРАКТИЧЕСКАЯ РАБОТА №2

СОЗДАНИЕ НОВЫХ ДИАЛОГОВЫХ ОКОН

НА ОСНОВЕ ФОРМ ПОЛЬЗОВАТЕЛЯ

Цель: Изучить способы
ввода-вывода данных, свойства встроенных
объектов VBA: форм,
стандартных элементов управления «Надпись», «Поле» и
«Кнопка».

УКАЗАНИЯ ПО ВЫПОЛНЕНИЮ

 Основные синтаксические принципы языка VBA:

Макросы в Excel пишутся на языке VBA, синтаксис которого
почти полностью идентичен синтаксису Visual Basic. Основные синтаксические
принципы этого языка:

·        
VBA нечувствителен к
регистру;

·        
чтобы закомментировать код
до конца строки, используется одинарная кавычка или команда REM;

·        
символьные значения должны
заключаться в двойные кавычки (“);

·        
максимальная длина любого
имени – 255 символов.

Оператор – наименьшая единица кода VBA.

Арифметических операторов 7: сложение +, вычитание -,
умножение *, деление /, возведение в степень ^, целочисленное деление (делит
первое число на второе, отбрасывая дробную часть), деление по модулю mod (делит
первую число на второе, возвращая только остаток от деления).

Переменные – это контейнеры для хранения данных. Переменные
объявляются следующим образом:

Dim имя_переменной As тип_переменной

Типы данных:

·        
числовые:

Byte – целое число от 0 до 255;

Integer – целое число от -32 768 до 32 767;

Long – большое целое число от
-2 147 483 648 до 2 147 483 647;

Single и Double – значения с плавающей запятой;

·        
строковые – String;

·        
дата и время – Data;

·        
логический – Boolean;

·        
объектный – Object –
хранит ссылку на любой объект в памяти;

·        
variant – специальный тип данных, который может хранить
любые другие типы данных;

·        
возведение в степень (^),
например
2^3 = 8;

·        
целочисленное деление ().
Делит первое число на второе, отбрасывая (не округляя) дробную часть. Например,
52 = 2;

·        
получение остатка от
деления
Mod

Делит первое число на второе, возвращая только
остаток от деления. Например,
5
Mod 2 = 1
.

Ввод данных

Осуществляется с помощью функции InputBox():

InputBox(«Тестовая строка»).

Особенность этой функции в том, что она всегда
возвращает строку. Если пользователь вводит число, то оно будет сначала
сохраняться в виде строки текста:

S=InputBox(«Введите число»).

Так что в переменной s
сохранится тестовая строка, т.е. число в виде «12». Поэтому его нужно
преобразовать в число. Для этого используется функция Val:

A=val(s).

Эта функция возвращает число, полученное
преобразованием строки s. Если в s было, например, «12», то после использования
Val, в переменной А будет число 12.

Вывод данных

Используется функция MsgBox(«Тестовая строка» &
имя_переменной).

Задание 1

  1. Откройте новый документ в Excel.
  2. Откройте редактор Visual Basic, используя команду Вид ->
    Макросы ->
    Необходимо ввести имя нового макроса
    lab3
    и нажать кнопку Создать.
  3. В поле окна между словами Sub lab2   End Sub введите текст

MsgBox(«Hello»)

  1. Кликните на кнопке с зеленым треугольником («Выполнить Basic») в
    верхней панели для выполнения макроса.
  2. Программа запустится и откроется окно, которое создается функцией MsgBox.

Самостоятельно

Выведите
поздравление с Новым годом.

Задание 2

1.      
В этом же документе 
откройте редактор
Visual Basic, используя вкладку Разработчик ->
Visual Basic и отредактируйте только что созданный макрос.

2. В среде редактирования поправьте
имеющейся модуль, введя следующий текст:

Dim
a as Integer

Dim
s As String

s=InputBox(«Введите число»)

a
= val(s)

MsgBox a

  1. В первых строках объявляются переменные a и s. Первая имеет тип
    Integer (целое число), вторая – строка, в нее можно сохранять буквы или
    слова.
  2. Далее используем функцию InputBox, которая считывает то, что ввел
    пользователь. Но все, что вводит пользователь, считается строкой. Если
    вводит число, то оно представляется как «2», а все, что в «» считается
    числом. Поэтому результат ввода сохраняется в переменной s. Чтобы убрать
    «» с числа применяется функция val, она переводит строку в число. И теперь
    результат можно сохранить в переменную а.
  3.  Кликните на кнопке с зеленым треугольником («Выполнить Basic») в
    верхней панели для выполнения макроса.
  4.  Программа запустится и откроется окно, которое создается функцией
    InputBox (рис. 1). Обратите внимание, что текст,
    введенный в скобках функции, выводится как надпись в окне функции. В окне
    функции
    InputBox в поле для ввода введите число и нажмите
    кнопку «ОК».

Рис. 1. Окно функции InputBox

  1.  Откроется окно функции MsgBox с введенным ранее числом.

Самостоятельно

    1. Создайте программу, перемножающую два числа,
      введенных пользователем.
    2. Выведите поздравления для того человека, имя
      которого введет пользователь.

Задание 3

1. В данной работе необходимо создать форму поль­зователя, разместить
на ней элементы управления «Надпись»
и «Кнопка»
и изменить некоторые заданные по умолчанию свойства
объектов. Для этого:

а) перейдите из Excel в среду
программирования
VBA;

б) добавьте к проекту
форму (команда «
Insert/UserForm«). По­сле выполнения
этой команды на экране появляется стандартная
форма и панель
инструментов «Элементы управления»;

в) на панели
элементов выберите элемент управления «Надпись» и разместите его на форме;

г)  на панели элементов выберите элемент управления
«Кнопка»
и разместите его
на форме;

д) измените в окне свойств исходные
значения свойств объектов (табл. 2.1).

Таблица 2.1 Задание
свойств объектов

Имя

объекта

Имя

свойства

Значение свойства

Описание свойства

UserForm 1 (Форма)

Caption

Первая
форма

заголовок
формы

StartUpPosition

2-CenterScreen

начальное
положение
формы при запуске

UserForm 1 (Форма)

Font

Times New Roman

название
шрифта

Полужирный

начертание

11

размер
шрифта

Label 1 (Надпись)

Caption

Hello, World!!!

текст
надписи

Command Button 1 (Кнопка)

Caption

изменить надпись

текст на
кнопке

 

Рис. 2.2. Вид пользовательской
формы после изменения
свойств
Теперь форма
выглядит иначе (рис. 2.2).

2.  Выполните
запуск приложения
VBA (кнопка «Запуск подпрограм­мы / UserForm«, либо
клавиша
F5). После
просмотра формы завершите
работу приложения   с помощью кнопки «Закрыть» в
правом верх­нем углу формы.

3.  Напишите код процедуры для обработки события Click элемен­та
«Кнопка». Для этого:

а) выберите  
на  форме  эле­
мент
«Кнопка»;

б)  перейдите в режим ввода программного    кода    (команда «Вид / Программа», либо клави­ша F7). VBA автоматически ге­нерирует шаблон для
ввода кода
процедуры:

Private Sub CommandButtonl_Click()

End Sub

в) наберите код процедуры между операторами Private Subи End Sub следующим
образом:

Private Sub CommandButtonl_Click()

‘ Установить новое значение свойства Caption

элемента «Надпись» (с именем Label 1)

Label1.Caption = «Здравствуй, мир !!!»

  End Sub

4.        
Выполните запуск приложения.

5.        
 

Рис. 2.3. Вид второй 
пользовательской формы

Нажмите левую
кнопку мыши на элементе «Кнопка». Обратите
внимание,
как при этом изменился текст надписи.

6.         
Добавьте к проекту вторую форму. Ее свойство Name автоматиче­ски
устанавливается в значение
UserForm2.

7.         
Разместите на ней два элемента «Надпись», два элемента  
«Поле»   и   два
элемента «Кнопка». Эле­менты
управления «Поле»
служат для ввода в программу следующих дан­ных о Вас:   фамилия и  возраст.
Измените  свой­ства     объектов, чтобы форма имела вид, представленный на рис. 2.3.

8.         
Напишите для собы­тия Click первого эле­мента «Кнопка» (с  име­нем      CommandButtonl) код
процедуры:

Private Sub CommandButtonl_CHck()

Dim strVarl As String, strVar2 As String

strVarl = «»: strVar2 = «»

Занести в переменную strVarl текст из первого поля

strVarl =TextBoxl.Text

Занести в
переменную
strVar2 текст из
второго поля

strVar2 = TextBox2.Text

Функция MsgBox служит для вывода сообщений из программы

MsgBox «Ваша фамилия» & strVarl & «. Вам
сейчас » &
strVar2

End Sub

9.  Напишите для события Click второго элемента «Кнопка» (с
име­
нем CommandButton2) код процедуры:

Private Sub CommandButton2_Click()

End

End Sub

10.  
Выполните запуск приложения (при этом форма UserForm2 долж­на быть
активной).

11.   
Введите в первом окне «Поле» (с именем TextBoxl) Вашу фами­лию, во
втором окне «Поле» (с именем
TextBox2) Ваш возраст.

12.   
Нажмите левую кнопку мыши на элементе «Кнопка» (с именем CommandButtonl). Проверьте текст полученного сообщения.

13.   
Завершите работу приложения с помощью кнопки CommandButton2.

 
Самостоятельно

Используя VBA в MS Excel, разработать пользовательскую
форму «Вычис
ление функций», предназначенную для вычисления выражений
при заданных
целых
числах x, y, z в соответствии с вариантом задания (№ п/п). Для проверки
значений
функций подобрать контрольный пример. Форма должна содержать:

1.                  Заголовок формы и надписи для
обозначения функций, например «f =».

2.                  Кнопку «Вычислить», при нажатии на
которую считываются значения ар
гументов  функции, вычисляются выражения,
значения которых выводятся в диалоговые окна
сообщений MsgBox и в
соответствующие для них надписи на форме после знака «=», например «f = 24».

3.                  Кнопку «Очистить», при нажатии на
которую удаляются значения функций.

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

Контрольные вопросы:

1.          
Какое окно в среде программирования VBA предназначено для отображения
структуры проекта? Что входит в состав вашего проекта?

2.        
Какие встроенные объекты VBA использовались в данной лабора­торной
работе?

3.        
Каково  назначение  форм пользователя, элементов управления «Надпись»,
«Поле», «Кнопка»?

4.        
Что такое «свойство объекта»? Какое окно в среде программирова­ния VBA
предназначено для отображения свойств выбранного объекта?

5.         
Какие
свойства  и для каких объектов вы использовали в лабора­торной работе?

6.        
Приведите
примеры обращения в программе к свойствам элемен­тов «Надпись», «Поле».

7.    Понятие
события. Какое событие генерируется в системе, если во
время выполнения
проекта перевести указатель мыши на элемент
«Кнопка» и
нажать левую кнопку мыши?

Практическая работа №3

Условные операторы

Программа может выполняться не только последовательно, но
и, встретив условие, изменить свой ход. Например, при расчете корней
квадратного уравнения на первом шаге рассчитывается дискриминант, затем в
зависимости от его значения могут быть варианты расчета, либо рассчитываются
два корня, либо один, либо уравнение не имеет корней.

Для этого используется оператор if ..then:

If условие then

            Команды1

Else

            Команды2

End If

Если условие истинно, то выполняются команды1, если ложно,
то команды2.

·   когда нужно проверить на соответствие нескольким условиям
(обратите внимание на использование логических операторов
AND и OR):

AND – условия
выполняются одновременно

OR
необходимо выполнение хотя бы одного из условий

y=5 при аÎ(5;10)

If (a< 10) And (a>5) Then

MsgBox («y=5»)

End If

Задание 1

 Расчет квадратного уравнения вида , где коэффициенты a, b и с задаются
пользователем.

1.Откройте новый документ Excel и сохраните его под именем «Практическая
работа_4_1».

2.Откройте новый модуль VBA с помощью команды Вид-> Макросы. Введите
имя нового макроса
Lab4 и нажмите
кнопку  «Создать», находящуюся на панели справа.

3.В открывшемся окне редактора набрать следующий код между Sub Lab4 и End Sub:

Dim s as String

Dim a, b, c, d, x1, x2, x as double

S=InputBox(«Введите значение коэффициента а»)

A = val(s)

S=InputBox(«Введите значение коэффициента b»)

b = val(s)

S=InputBox(«Введите значение коэффициента c»)

c = val(s)

d=b*b-4*a*c

if D>0 then

x1=(-b+sqr(d))/(2*a)

x2=(-b-sqr(d))/(2*a)

  MsgBox («X1=» & str(x1) & « X2=» & str(x2))

Else then

if D=0

x=-b/(2*a)

MsgBox(«x=» & str(x))

else

MsgBox(«Корней нет»)

endif

endif

Самостоятельно!!!

1.     
Написать процедуру, рассчитывающую значение функции         .

2.      Написать
программу, которая находит сумму двух данных чисел (если оба числа четные) или
произведение (если хотя бы одно из чисел — нечетное). Во всех остальных случая
вывести сообщение: «числа нечетные».

3.      Найти
минимальное из двух чисел, вводимых с клавиатуры

 

Задание 
2.

На основе
программного кода, представленного на рис. 2, создать аналогичный макрос, но
значение температуры запросить у пользователя (используйте функцию InputBox).

Рис. 2. Листинг второго варианта написания If..Then с
измененным условием

 

 

 

Задание  3

2Разработать
пользовательскую форму и составить программу, вычисляющую значение функции:

Пользовательская форма имеет вид, представленный на рис. 3.

Объект	Свойство	Объект	Свойство
UserForm1	Caption = Вычисление значения функции	Label1	Caption = Значение X AutoSize = True
CommandButton1	Name = calc
Caption = Вычислить	Label2	Caption = Значение Y AutoSize = True
CommandButton2	Name = clean Caption = Очистить	TextBox1	Name = txtX Locked = False
CommandButton3	Name = exitForm Caption = Выход	TextBox2	Name = txtY Locked = True

Свойства объектов формы
представлены ниже.

Для обработки события нажатия
кнопки  «Вычислить»  введем  следующий код:

Private Sub calc_Click()

Dim x, y As
Single x = Val(txtX.Text)

If x <= -4 Then

y = (Sin(3 * x) + x ^ 2) / (1 + x ^ 2) ^ (1 / 3)

ElseIf x > 3
Then

y = Abs(x — Exp(-x))

Else

y = Sqr(x ^ 2 +
4)

End If txtY.Text = y

End Sub

Подберем контрольные примеры: при x = –4 y = 6,431257;

                                                          
при
x = 0  y = 2;

                                                            при
x =
10
y = 9,999955.

 Проверим работу программы (рис. 4).

Рис. 4. Результаты вычисления значений функции

 

 

Самостоятельно!!!!

Используя редактор VB MS Excel, разработать
пользовательскую форму и составить программу, вычисляющую значение функции в
соответствии с вари- антом задания (№ п/п). Подобрать контрольный пример.

Функция

(аргумент)

Действие

Abs(N)

Возвращает
абсолютное значение аргумента N

Atn(N)

Возвращает
арктангенс N (радиан)

Cos(N)

Возвращает
косинус N (радиан)

Exp(N)

Возвращает
константу е (натуральный логарифм = 2.718282…), возведенную в степень N

Fix(N)

Возвращает
целую часть N. Не округляет число, а отбрасывает любую дробную часть. Если N
отрицательное число, то возвращается ближайшее отрицательное целое большее,
чем или равное N

Int(N)

Возвращает
целую часть N. Не округляет число, а отбрасывает любую дробную часть. Если N
отрицательное число, то возвращается ближайшее отрицательное целое меньшее,
чем или равное N

Log(N)

Возвращает
натуральный логарифм N

Rnd(N)

Возвращает
случайное число: аргумент является необязательным. Используется только после
инициализации генератора случайных чисел (оператор Randomize)

Sgn(N)

Возвращает
знак числа: -1, если N — отрицательное; 1, если N — положительное; 0, если N
равно 0

Sin(N)

Возвращает
синус N (радиан)

Sqr(N)

Возвращает
корень квадратный из N. Если N является отрицательным числом — возвращается
ошибка времени исполнения

Tan(N)

Возвращает
тангенс N (радиан)

Контрольные
вопросы и задания:

1.          
Для чего
используется свойство
Caption элемента «Надпись»?

2.         
Каково
назначение функции
Val?

3.   
Назначение
функции
MsgBox.

4.    Назначение функции InputBox.

5.         
Является ли
обязательным элемент
Else в структуре команды If?

6.         
Каким образом
в программе записываются комментарии?

7.         
Какое значение («истина» или «ложь») является
результатом опе
рации сравнения m <= n при m = 3 и n = 4?

8.         
Что означает
команда
k = k
+ 1?

9.         
Как работает команда sum = sum + a?

10.   
Объясните
назначение команд составленного Вами макроса.

ПРАКТИЧЕСКАЯ РАБОТА 4

ОРГАНИЗАЦИЯ МНОГОЗНАЧНЫХ

ВЕТВЛЕНИЙ В ПРОГРАММЕ

Цель: Научиться
осуществлять выбор из нескольких возможных ва­
риантов с помощью команды Select Case, применять элемент «Список» для обработки различных списков данных.

УКАЗАНИЯ ПО ВЫПОЛНЕНИЮ

Оператор  SelectCaseEnd Select

Организация
множественного выбора в
 Visual Basic

1.    Формат записи:

Select Case переменная

Case значение 1

Действие 1

[[…

Case значение N

Действие N]

[Case Else

Действие]]

End Select

Примеч.: 1)Значение переменной в процедуре должно указываться сверху вниз,
т.е. условия проверяются сначала.

   2) Если в
области
значение находится условие, то необходимо использовать ключевое словосочетание Case Is
условие

Свойства ListBox

Некоторые свойства ListBox можно
установить только в режиме проектирования и их нельзя изменять во время работы
приложения

List

Массив пунктов списка. Элемент массива List(0) содержит
первый пункт списка, элемент List(1) — второй и т.д., вплоть до последнего
элемента — List(ListCount-1).

ListCount

Возвращает число пунктов списка. Доступ к ним можно
получить с помощью значений индексов в диапазоне от 0 до ListCount-1

ListIndex

Представляет собой индекс выбранного пункта списка. При
выборке нескольких пунктов ListIndex представляет индекс
последнего выбранного пункта. Если не выбран ни один элемент, значение ListIndex =
-1. Это свойство можно использовать для выбора или удаления конкретных
пунктов. Так, следующий код удаляет выбранный пункт элемента
List1.RemoveItem List1.ListIndex 
Если при вызове метода RemoveItem ни один пункт списка не выбран, значение
свойства ListIndex отрицательно. Попытки удалить пункт с
отрицательным индексом приводят к ошибке исполнения. После удаления пункта
индексы последующих пунктов соответственно перестраиваются.

Методы ListBox

AddItem

Используется
для добавления пунктов в список.
List1.Additem item, index
Параметр item — строка, добавляемая в список, a index —
ее порядковый номер (необятельный аргумент — если его опустить, строка
добавляется в конец списка). Если значение свойства Sorted равно
True, то пункт вставляется в соответствующее место списка, независимо от
значения аргумента index

RemoveItem

Используется
для удаления пункта из списка. Необходимо знать index удаляемого пункта
List1.Removeltem Index
Параметр index указывает на порядковый номер удаляемого пункта и является
обязательным. Следующий оператор удаляет пункт из начала списка. List1.Removeltem
()

Clear

Удаляет
из списка элемента все пункты.
List1.Clear

Пример
1

Брокер получает процент от суммы сделки. Для сделок, сумма которых менее 150 тыс. р., вознаграждение брокера составит 3,5 %, от 150 до 500 тыс. р. 4,5 %, а для сделок, сумма которых составляет больше 500 тыс. р. – 5
%. Разработать пользовательскую форму и
составить программу для расчета
вознаграждения
брокера.

Создадим пользовательскую форму вида, представленного на рис. 1.

Свойства объектов формы представлены ниже.

Объект

Свойство

Объект

Свойство

UserForm1

Caption = Вознаграждение брокера

Label1

Caption = Сумма сделки

AutoSize = True

CommandButton1

Name = calc

Caption = Рассчитать

Label2

Caption = Вознаграждение

AutoSize = True

CommandButton2

Name = clean Caption = Очистить

TextBox1

Name
= txtSumma Locked = True

CommandButton3

Name = exitForm Caption = Выход

TextBox2

Name = txtVzngr Locked = True

Для обработки события нажатия кнопки «Рассчитать» введем   следующий
код:

Private Sub calc_Click()

Dim S, P As Single

S = Val(InputBox(«Введите
сумму сделки», «Ввод данных»))

Select Case S

        Case 0 To 149999

        P = S * 0.035

        Case Is >= 500000

        P = S * 0.05

     Case Else

     P = S * 0.045

     End Select

     txtSumma.Text = Str(S) + » руб.»      txtVzngr.Text = Str(P) + » руб

End Sub

В данном случае слово Is, используемое в коде программы,
является ключевым словом VBA, обозначающим
тестируемое выражение в операторе Case

Пример
2

Составьте
макрос, который запрашивает по отдельности день,
месяц и год, затем из
введенных значений формирует текстовую
строку (например, «Сегодня 1 Мая
2002 года») и выводит ее на экран. Для этого:

а)  в среде Excel VBA добавьте к проекту форму;

б)  разместите на форме:

—  4 элемента «Надпись»
(один из них, пред­
назначенный для  вывода результата,  должен  иметь  имя  Result),

— 2 элемента «Поле»
(
TextBox1 — для ввода
дня,
TextBox2 — для ввода
года),

— 1 элемент «Список»
(для выбора месяца из списка; его имя по умолчанию
ListBoxl измените на Listl)

— 2 элемента «Кнопка«;

в)  свойство BorderStyle элемента «Надпись» с
именем
Result ус­тановите в
значение 1; измените значения других свойств объектов
так, чтобы форма
имела вид, представленный на рис.2;

       г)    в окне редактирования модуля напишите код процедуры для обработки
события
Activate формы (событие Activate происходит, когда форма становится активной). Данная процедура заполняет спи­сок List1(метод AddItem добавляет строку в
список):

Private Sub UserForm_Activate()

Listl.AddItem «Январь«

Listl.AddItem «Февраль«

Listl.AddItem «Март«

Listl.AddItem «Апрель«

Listl.AddItem
«
Май«

Listl.AddItem «Июнь«

Listl.AddItem «Июль«

Listl.AddItem «Август«

Listl.AddItem «Сентябрь«

Listl.AddItem «Октябрь«

Listl.AddItem «Ноябрь«

Listl.AddItem «Декабрь» End Sub

д)  напишите код процедуры для обработки события Click элемен­та «Кнопка»
с именем
CommandButton1:

Private Sub CommandButtonl_Click()

В макросе
используются следующие переменные:

indexпорядковый номер
выбранной в списке строки

mes — наименование месяца

Dim index As Integer, mes As String

If TextBox1 = «» Then  _

MsgBox «Вы забыли указать день«: Exit Sub

If Val (TextBoxl) < 1 Or Val (TextBoxl)
> 31 Then _

MsgBox
«Неверен день месяца»:
Exit Sub

‘ Свойство Listlndex элемента «Список» содержит

порядковый номер выбранной в списке строки.

‘ Строки в списке нумеруются,
начиная с 0. Если не выбрана ни

одна строка, свойство Listlndex имеет значение -1

index = List1.ListIndex

If index = -1 Then _

MsgBox «Вы
забыли выбрать месяц»:
Exit Sub

If TextBox2 = «» Then _

MsgBox «Вы забыли
указать год»:
Exit Sub

Result.Caption = «»

Select Case index

Case 0: mes = «января«

Case 1: mes = «февраля«

Case 2: mes = «марта«

Case 3: mes = «апреля«

Case 4: mes = «мая«

Case 5: mes = «июня«

Case 6: mes = «июля«

Case 7: mes = «августа«

Case 8: mes = «сентября«

Case 9: mes = «октября«

Case 10: mes = «ноября«

Case 11: mes = «декабря»

End Select

Result = «Сегодня » & TextBoxl & » » & mes & » »
& _

TextBox2 & » года»

End Sub

e) напишите код процедуры для обработки события Click элемен­та «Кнопка» с именем CommandButton2:

Private Sub CommandButton2_Click()

End

End
Sub

2.         
Выполните запуск приложения (при этом форма UserForml должна быть
активной).

3.         
В макросе предусмотрена обработка следующих ситуаций: не введен день или
год;  введен несуществующий номер дня; не выбран ни
один месяц в списке.

4.          
Повторите пп. 3 и 4 для нескольких различных исходных данных.

Пример 3

По введенной дате рождения
сообщить пользователю, кто он по знаку зодиака (с 21 марта по 20 апреля – Овен,
с 21 апреля по 20 мая – Телец, с 21 мая по 21 июня – Близнецы, с 22 июня по 22
июля – Рак, с 23 июля по 23 августа – Лев, с 24 августа по 22 сентября – Дева,
с 23 сентября по 23 октября – Весы, с 24 октября по 22 ноября – Скорпион, с 23
ноября по 21 декабря – Стрелец, с 22 декабря по 20 января – Козерог, с 21
января по 19 февраля – Водолей, с 20 фев раля по 20 марта – Рыбы).

Пусть пользовательская форма будет иметь вид,
представленный на рис. 4.

Свойства объектов формы представлены ниже.

Объект

Свойство

Объект

Свойство

UserForm1

Caption = Знак зодиака

Label1

Caption = Дата рождения

AutoSize = True

CommandButton1

Name = calc

Caption = Определить знак

Label2

Caption = Знак зодиака

AutoSize = True

CommandButton2

Name = clean Caption = Очистить

TextBox1

Name
= txtData Locked = False

CommandButton3

Name = exitForm Caption = Выход

TextBox2

Name = txtZodiak Locked = True

Чтобы определить знак зодиака по введенной
пользователем дате рождения, воспользуемся оператором выбора
Select Case.
Кроме этого для выделения из даты месяца и числа потребуются функции
Month(Дата)
и
Day(Дата), которые возвращают соответственно месяц как целое 
число от 1 до 12 и день как целое число от 1 до 31. Таким  образом,  код  обработки  события нажатия кнопки
«Определить знак» будет иметь вид:

Private Sub calc_Click()

Dim DR As Date

DR = (txtData.Text)

Select Case Month(DR) ‘выбор знака зодиака по номеру месяца

Case 1

If Day(DR) <= 20 Then txtZodiak.Text = «Козерог« Else txtZodiak.Text = «Водолей» Case 2

If Day(DR) <= 19 Then txtZodiak.Text = «Водолей« Else txtZodiak.Text = «Рыбы» Case 3

If Day(DR) <= 20 Then txtZodiak.Text = «Рыбы« Else txtZodiak.Text = «Овен» Case 4

If Day(DR) <= 20 Then txtZodiak.Text = «Овен« Else txtZodiak.Text = «Телец» Case 5

If Day(DR) <= 20 Then txtZodiak.Text = «Телец« Else txtZodiak.Text = «Близнецы» Case 6

If Day(DR) <= 21 Then txtZodiak.Text = «Близнецы« Else txtZodiak.Text = «Рак» Case 7

If Day(DR) <= 22 Then txtZodiak.Text = «Рак« Else txtZodiak.Text = «Лев» Case 8

If Day(DR) <= 23 Then txtZodiak.Text = «Лев« Else txtZodiak.Text = «Дева» Case 9

If Day(DR) <= 22 Then txtZodiak.Text = «Дева« Else txtZodiak.Text = «Весы» Case 10

If Day(DR) <= 23 Then txtZodiak.Text = «Весы« Else txtZodiak.Text = «Скорпион» Case 11

If Day(DR) <= 22 Then txtZodiak.Text = «Скорпион« Else txtZodiak.Text = «Стрелец» Case Else

If Day(DR) <= 21 Then txtZodiak.Text = «Стрелец« Else txtZodiak.Text = «Козерог» End Select

End Sub

Для примера: родившиеся 25 сентября 2000 г. по знаку зодиака «Весы»

Задание 1

1.   
Самостоятельно разработайте приложение для регистрации уча­стников
межвузовской конференции. Приложение запрашивает фа­
милию
участника
, город (выбирается из списка; если нет в списке,
то
можно ввести в
текстовом окне), должность (выбирается из списка: профессор, доцент, старший преподаватель,
преподаватель, асси­
стент, студент
), затем из введенных данных
формирует текстовую строку (например,
«Иванов В.А., доцент, Хабаровск») и заносит ее
в список. В
приложении должна быть предусмотрена возможность удаления строки из списка. Для этого:

а)  добавьте к проекту форму UserForm2;

б)  разместите
на форме 3 элемента «Надпись», 1 элемент «Поле»
(для ввода фамилии), 2 элемента «Список»
(первый — для выбора
должности,
второй — для формирования результата — списка участни
ков), 1 элемент
«Поле со списком» (комбинированное окно для ввода или выбора города из списка) и 2 элемента
«Кнопка» (первый – для
занесения строки в список, второй — для
удаления отмеченной строки из списка);

в)  измените значения свойства Name элементов (табл.1);

Новые
имена объектов
                                                                                         
Таблица.1

Имя объекта

Значение свойства Name

TextBoxl (Поле)

Textl

ListBoxl (Список)

Listl

ComboBoxl (Поле со списком)

Combo 1

ListBox2 (Список)

Result

г)  измените значения других свойств элементов так, чтобы форма имела вид,
представленный на рис. 3;

д)  напишите
код процедур (предусмотрите в макросе обработку
следующих ситуаций: не введена фамилия; не указан город; не выбра­на в
списке должность; не отмечена строка в списке при удалении);

е)  выполните  запуск 
приложения,  проверьте  его  работу для
нескольких различных исходных данных.

Задание 2

В соответствии с вариантом задания (№
п/п) разработать пользователь скую форму и составить программу в редакторе
VB MS Excel. Подобрать контрольный пример

№ п/п

Задание

1

Торговый агент получает
вознаграждение
в размере некоторой
доли от суммы совер шенной сделки: если объем сделки
до 6000 р., то в размере
5 %; если объем до 15 000 р.
– 7 %; если выше – 10 %. Определить размер вознаграждения торгового агента.

2

На банковский
вклад
начисляются проценты в сумме 15 % годовых, если сумма вклада
превышает
100 000 р., 10 % годовых
на суммы до 50 000 р., 12 % годовых
на остальные суммы.
Рассчитать сумму полученных
вкладчиком процентов
по истечении срока.

3

Менеджер получает комиссионные в зависимости
от объема продаж за месяц: если
объем продаж менее 100 000 р., то ставка комиссионных
составляет
8 %, если от
100 000 до 200
000
р. 10,5 %,
более 200 000 р.
14 %. Определить сумму комиссионных менеджера.

4

Рассчитать заработную плату сотруднику с
учётом подоходного налога. Подоходный налог высчитывается по следующей схеме:
если начисленная зарплата составляет ме- нее 4200 р., то налог не взимается,
если от 4200 р. до 100 тыс. р., то он составляет      13 % от начисленной
суммы, а если начисленная зарплата составляет более 100 тыс.  р., то к 13 %
от разницы начисленной суммы и 100 тыс. р. прибавляется еще 18200 р.

5

Сотрудник фирмы получает премию по итогам
работы за месяц по следующей схеме: если заключено сделок менее чем на 50 000
р., то премия составляет 5 % от общей стоимости сделок, если не меньше чем на
50 000 р. но менее чем на 150 000 р. – 7,5 %, если же не менее 150 000 р. –
11,3 %.
Определить размер премии
сотрудника.

6

Рассчитываясь в одном из
магазинов, покупатель получает скидку:
если количество по- купаемого им товара не менее 100, то
скидка составляет 10 %, если от 50 до 100, то 5 %, в остальных случаях скидка не предоставляется. Определить, какую сумму
надо запла тить покупателю, если он покупает товар в количестве
N штук
по цене
S руб.
каждая.

7

Определить стоимость билета на поезд в
зависимости от расстояния до пункта назначения и стоимости
S р. билета до конечной станции: если
расстояние не превышает 500 км, то стоимость
S уменьшается на 50 %, если от 500 до 1000 км,
то на 25 %, а если больше 1000 км, то стоимость
S остается неизменной.

Задание 3

В соответствии с вариантом
задания (№ п/п) разработать пользовательскую форму и составить программу в
редакторе
VB MS Excel, используя опера тор выбора Select Case.

№ п/п

Задание

1

В восточных календарях принят 60-летний
цикл, состоящий, в свою очередь, из пяти 12- летних подциклов. Подциклы
обозначались цветом: 0 – зеленый; 1 – красный; 2 – жел тый; 3 – белый; 4 –
черный. Внутри каждого подцикла годы носили названия животных: 0 – свинья
(или кабан); 1 – крыса; 2 – бык; 3 – тигр; 4 – кролик (заяц или кот); 5 –
дракон; 6 – змея; 7 – лошадь; 8 – овца (баран или коза); 9 – обезьяна; 10 –
петух; 11 – собака. Не- обходимо, чтобы по введенной пользователем дате
рождения печаталось название года рождения по восточному календарю. Для
расчета воспользоваться функцией
Year(Дата), которая возвращает год как целое
число от 100 до 9999 и формулами: [НомерЦвета = ((9910 – Год)
mod
60) 12], [НомерЖивотного = (Год – 3)
mod 12].

Для проверки 1966  г. – «год желтой лошади», 1984 г. – «год зеленой крысы».

3

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

4

Дано целое число n (1<= n <= 99), определяющее возраст человека (в
годах). Для этого числа напечатать фразу «мне
n лет», учитывая при этом, что при некоторых
значениях
n слово
«лет» надо заменить на «год» или «года».

5

По введенному числу n (1<= n<=7) сообщить пользователю место летнего
отдыха из семи предлагаемых туристическим агентством курортов, причем в двух
случаях в качестве места отдыха выдается «отдых на даче».

6

По введенному пользователем времени (часы :
минуты) напечатать приветствие в зависимости от времени суток: «Доброй ночи»
с 0 до 6 часов, «Доброе утро» с 6 до 12  часов, «Добрый день» с 12 до 18
часов, «Добрый вечер» с 18 до 24 часов (в
VBA и Excel время дня выражается дробным числом от 0 до
1, например, полдень представлен как 0,5, соответственно 18 часов как 0,75).

7

По введенному числу n сообщить
студенту, по каким трем дисциплинам из предлагаемых на выбор пяти ему
придется сдавать экзамен (всего возможно 10 вариантов).

8

По заданной сумме S стоимости покупки напечатать строку,
содержащую это число и единицы измерения в рублях, согласовывая окончание
слова «рубль», например, 3 руб ля, 25 рублей, 41 рубль и т. п.

Контрольные вопросы
и задания:

1.          
Каково назначение оператора «&»?

2.         
Как изменяется внешний вид элемента «Надпись» при установке
его
свойства
BorderStyle в значение 1
?

3.         
Какое действие выполняет метод AddItem элемента
«Список»?

4.         
Каково
назначение свойства
Listlndex элемента «Список»?

5.         
Какой метод
элемента «Список» используется для удаления стро­ки из списка?

6.         
Чем отличаются
функции элементов управления «Список» и «По­ле со списком»?

7.   
Объясните назначение команд составленных Вами макросов.

ПРАКТИЧЕСКАЯ
РАБОТА №
5

ЦИКЛИЧЕСКИЕ ОПЕРАТОРЫ

Цель: Изучить основные принципы составления циклических про­грамм в Excel VBA. Научиться
обращаться к ячейкам выделенного
диапазона.

ОСНОВНЫЕ СВЕДЕНИЯ

Процесс,
в котором один оператор или группа операторов выполняются многократно при
различных значениях аргумента, называется циклическим процессом.
В VBA для выполнения повторяющихся действий используются операторы
цикла, которые бывают следующих типов:

·               
оператор цикла с
параметром
For – Next, конструкция которого используется, если
заранее известно, сколько раз должно повториться тело цикла:

For счетчик = начальное_значение
То
конечное_значение Step шаг блок_операторов

Next счетчик

          
операторы цикла
с предусловием
или постусловием, которые используются для
организации цикла с неизвестным заранее числом повторений тела цикла:

УКАЗАНИЯ ПО ВЫПОЛНЕНИЮ

Задание 1

1.
Составьте макрос, заполняющий выделенную строку ячеек после­
довательностью
чисел 1,2, …
N, где N — количество ячеек. Например, на рис. 1
представлен результат выполнения макроса в случае, если
выделен диапазон
ячеек В2:Е2.

А

В

С

D

Е

F

1

2

1

2

3

4

3

Рис.1. Заполнение программным путем диапазона В2:Е2

Для этого:

а)   перейдите из Excel в среду программирования VBA;

б)  добавьте модуль и в окне редактирования модуля наберите следующие команды:

Public Sub Заполнение_строки()

В макросе
используются следующие переменные:

Nколичество
ячеек в строке,

i — номер
текущей колонки,

kчисло,
записываемое в ячейку

Dim N As Integer, i
As Integer, k As Integer

N =
Selection.Columns.Count

k=l

For i =
1 To N

Selection.Cells(1,i)
= k

k = k+l

Next i

End Sub

2.  Вернитесь
в
Excel, выберите
диапазон ячеек
A2:D2 и выполните
макрос.

Дополните макрос
возможностью закраски заполняемых ячеек
зеленым цветом. Для этого после
команды »
Selection.Cells(1, i) = k

вставьте команду
»
Selection.Cells(1, i).Interior.Color = vbGreen«

3.         
Вернитесь в Excel и проверьте работу макроса, выбрав ячейки
В1:С1.

Самостоятельно!!!

Самостоятельно
составьте макрос «Заполнение_колонки», кото
рый будет заполнять
ячейки выделенной колонки последовательны­
ми числами от 1 до М,
где М — количество ячеек. Так, на рис. 2
представлен
результат выполнения макроса в случае, если выделен
диапазон ячеек В2:В5.

А

В

С

1

2

1

3

2

4

3

5

4

6

Рис. 2.
Заполнение программным путем диапазона В2:В5

При разработке
макроса учтите, что:

      
Количество
ячеек в столбце определяется количеством строк выбранного диапазона,
поэтому вместо .
Columns.Count используйте .Rows.Count.

       В объекте  Cells(i, j) i определяет № строки, a j№ колонки. Поскольку макрос должен
работать только с одной колонкой, в цикле нужно обращаться к объекту
Cells(i, 1).

6. Запишите составленный макрос в модуль,
выделите в таблице диапазон ячеек ВЗ:В5 и выполните макрос. Каким образом
теперь выглядит таблица? Текст макроса приведите в отчете по лаборатор­ной работе.

Задание 2

Создать процедуру расчета факториала числа, введенного
пользователем.

  1. В открывшемся окне редактора набираем код:

Sub Lab5

s=InputBox(«Введите
число»)

n=val(s)

f=1

for i=1 to n

f=f*i

next i

MsgBox(«Факториал введенного числа равен » & f)

End Sub

  1. В этом коде до начала цикла со счетчиком в переменную f
    записывается 1. Далее в теле цикла со счетчиком в переменной
    f
    накапливается произведение чисел от 1 до введенного пользователем числа.
    Так на первом шаге цикла в
    f записывается 1*1, на втором шаге цикла
    1*2, на третьем – берем то, что было в
    f на втором шаге 1*2 и * на значение
    счетчика 3, получается 1*2*3 и так далее.

Самостоятельно!!!

1.   
Измените предыдущую
процедуру так, чтобы рассчитывалась сумма чисел от 1 до введенного
пользователем числа.

2.   
Напишите процедуру
считающую количество положительных чисел, введенных пользователем. Сначала
задается общее количество чисел.

3.   
 
Рисунок 3
Написать программу, находящую сумму всех четных чисел, меньших
заданного числа
N. Сначала задается общее количество чисел и число N.

Задание 3

Разработаем пользовательскую форму и
составим программу для поиска всех двузначных чисел, сумма квадратов цифр которых
делится на 13.

Для создания данной пользовательской
формы перейдем в редактор  и добавим  форму (рис. 3).

Свойства объектов формы представлены в таблице 2.

Для обработки событий нажатия кнопок «Рассчитать», Очистить» и «Выход»
введем следующий код:

На рабочем листе «Пример 3» разместим
 кнопку «Открыть форму» для вызова формы «Пример 3» и запустим данную форму .

Самостоятельно!!!

В   соответствии с вариантом задания
разработать пользовательскую форму и составить программу в редакторе VB MS
Excel. Подобрать контрольный пример.

1.
 

Найти все
натуральные числа n, меньшие 30, для которых (2
n
n) кратно 7.

2.  

Найти такие четыре последовательных двузначных
натуральных числа, сумма квадратов которых равна сумме квадратов трех
следующих чисел.

3.  

Найти все трехзначные числа, квадрат которых
оканчивается тремя цифрами, составляющими данное трехзначное число.

4.  

Найти все трехзначные числа, которые можно
представить разностью между квадратом числа, образованного первыми двумя цифрами,
и квадратом третьей цифры (например, 147).

5.  

Найти все трехзначные числа, средняя цифра которых
равна сумме двух крайних.

6.  

Найти все двузначные числа, удовлетворяющие условию:
если к сумме цифр такого числа прибавить квадрат этой суммы, получится это же
число.

7.  

Найти сумму целых положительных чисел, больших 20,
меньших 100, кратных 3 и заканчивающихся на 2, 4 или 8.

8.
 

Найти среднее
арифметическое четных чисел из N чисел, вводимых с клавиатуры
.

9.
 

Найти максимальное
из 10-ти чисел, вводимых с клавиатуры.

10.         
 

Найти максимальный
из отрицательных элементов среди произвольных 20 чисел, вводимых с
клавиатуры.

Контрольные вопросы и
задания:

1. Какой объект служит для
обращения к выделенному диапазону
ячеек?

2.        
Как найти
количество строк и колонок выделенного диапазона?

3.        
Что
означает запись «
Selection.Cells(3, 1)»?

4.        
Сколько
раз выполнится команда «
Selection.Cells(l, i) = k» внутри цикла «For i = 1 То NNext
i«? Какие действия она выполняет?

5.        
Что
означает команда
k = k + 1?

6.    Дайте определение циклическому алгоритму? Что
такое цикл?

7.   
Для чего
предназначен оператор For…Next?

ПРАКТИЧЕСКАЯ РАБОТА №6

СОЗДАНИЕ
ПОЛЬЗОВАТЕЛЬСКИХ ФУНКЦИЙ MS EXCEL

          Основные
сведения

Одной
из возможностей
VBA является создание новой
функции
MS Excel, которую впоследствии можно использовать аналогично встроенным функциям
(СУММ, МАКС, ЕСЛИ и др.). Это целесообразно в тех случаях, если необходимой
функции нет в стандартном наборе встроенных функций
MS Excel, на- пример формулы
Пифагора, а ей приходится часто пользоваться.

Пример
1

Создадим пользовательскую
функцию, вычисляющую по формуле Пифагора длину гипотенузы прямоугольного
треугольника.
Для этого:

1.          
Откроем MS Excel и перейдем в редактор VB.

2.          
В новом модуле (Insert ® Module) через команду Insert ® Procedure зададим имя и остальные
параметры новой функции (рис. 12). Нажмем кнопку «ОК».

3.          
В окне кода между двумя появившимися строчками
напишем программный код для данной функции, учитывая, что для нахождения длины
гипотенузы по формуле Пифагора нужно знать значения двух катетов:

 Рис.12. Диалоговое окно
	Add Procedure

Public    Function    Пифагор(a    As   Single,    b  As
Single)

‘аргументы а и b вещественные

Пифагор = Sqr(a ^ 2 + b ^ 2)

End Function

4.          
Закроем редактор VB и воспользуемся нашей функцией.

5.          
В ячейки А1, В1 и С1 введем соответственно символы
а, b, и с; в ячейки А2 и В2 – значения
катетов (3 и 4), а в ячейку С2 вставим формулу, воспользовавшись кнопкой
«fBxB»  на  панели  инструментов  либо  командой  Вставка
 
®  Функция  и  выбрав созданную функцию в категории
«Определенные пользователем» диалогового окна Мастер функций.

Пример 2

Создадим функцию пользователя, математически определенную как y = sin(px)e2 xи построим ее график. Для этого в редакторе VB MS Excel в новом модуле
через команду
Insert ® Procedure
создадим функцию с именем «Y» и
напишем для нее программный код:

Public Function Y(x As Single)

Y = Sin(Application.Pi() * x)
* Exp(-2 * x) End Function

Здесь мы воспользовались стандартной функцией Pi(),
которая возвращает значение постоянной
pExcel
функция пи()). Так как она не является внутренней функцией
VBA, то
ее необходимо записать в виде
Application.Pi().

Теперь
проверим работу созданной функции и построим ее график:

Пример
3

Создать макрос Вышивка линейного
алгоритма в приложении MS Excel с помощью Visual
Basic for Application.

1.1.             
Вызовите окно программы Visual Basic

1.2.             
Добавьте новый объект в проект. Insert (Вставка)
выберите Module (модуль).

1.3.             
Наберите первую строку тела процедуры, начиная
с указания объекта
Range(“A1”), т.е. ячейка с адресом А1.

     Range(«A1»).Interior.ColorIndex = Rnd()
* 8

Rnd(), -. генерация
произвольного числа от 0 до 1.

1.4.             
Но это число слишком мало, для его увеличения
умножьте функцию на 8.

1.5.             
Скопируйте  содержимое еще семь раз и смените
адреса ячейки, опираясь на текст программы

1.6.             
Продолжите работу самостоятельно, учитывая, что
первый блок меняет случайным образом цвет номерами 0-8 в ячейках в
диапазоне А1:
D2

1.7.             
Во втором блоке с помощью метода (т.е.
стандартной команды действия) с названием .
Copy
происходит поочередное копирование в буфер обмена 4 клетки в первом ряду. С
помощью метода .
PasteSpecial происходит вставка в
соответствующие адресам клетки

1.8.             
Sub Узор()
Range("A1").Interior.ColorIndex = Rnd() * 8
Range("B1").Interior.ColorIndex = Rnd() * 8
Range("C1").Interior.ColorIndex = Rnd() * 8
Range("D1").Interior.ColorIndex = Rnd() * 8
Range("A2").Interior.ColorIndex = Rnd() * 8
Range("B2").Interior.ColorIndex = Rnd() * 8
Range("C2").Interior.ColorIndex = Rnd() * 8
Range("D2").Interior.ColorIndex = Rnd() * 8

Range("A1").Copy: Range("H1").PasteSpecial
Range("B1").Copy: Range("G1").PasteSpecial
Range("C1").Copy: Range("F1").PasteSpecial
Range("D1").Copy: Range("E1").PasteSpecial

Range("A2").Copy: Range("H2").PasteSpecial
Range("B2").Copy: Range("G2").PasteSpecial
Range("C2").Copy: Range("F2").PasteSpecial
Range("D2").Copy: Range("E2").PasteSpecial

Range("A1:H2").Copy: Range("A3").PasteSpecial
Range("A1:H4").Copy: Range("A5").PasteSpecial
Range("A1:H8").Copy: Range("A9").PasteSpecial
Range("A1").Select

End Sub
Самостоятельно
разберитесь с третьим и четвертым блоками, запоминая, что метод .
Select – это выделение указанного диапазона ячеек.

Пример  4

Усовершенствовать
макрос Узор линейного алгоритма в приложении MS Excel с
помощью Visual
Basic for Application.

1.1.     Переключитесь в окно MS Excel.

1.2.     Вызовите панель Формы (Вид/Панели инструментов/Формы).

1.3.     Выберите инструмент Кнопка, разместите кнопку справа от
орнамента разметом 2х3 см.

1.4.       
Автоматически, после размещения элемента на
экране, панель Формы вызывает окно Назначить макрос объекту.
Выберите из списка, если таковой имеется, макрос Узор. Нажмите ввод.

1.5.     Перейдите в окно Visual Basic (ALT+F11).

1.6.     Объект Range удобен, когда точно
известны адреса ячеек, но его можно заменить на более универсальный объект Cells().
Измените в программе текст, как указано в отрывке ниже, опираясь на теорию.

1.7.     Проверьте работу программы и исправьте ошибки, если таковые имеются.

I.Объекты  MS Excel

1.    Range(«диапазон»), где диапазон
указывается как в табличном процессоре.

Range(«C1»), Range(«A1:H2»),
Range(«A1:H2»)

2.    Cells(номер ряда, номер колонки).

Cells(1, 1) – ячейка А1, Cells(1, 2) — ячейка В1. Range(Cells(1,
1) , Cells(5, 3))
диапазон А1:С5.

3.    RowрядY = ActiveCell.Row

4.    Columnколонка. Х
= ActiveCell.Column

5. Worksheets (имя или номер)– рабочий лист

6. Workbooks (имя) рабочая книга.

Workbooks(«Cogs.xls»).Worksheets(«Sheet1»).Activate

7.        
ActiveCell – объект, означающий активную
ячейку,

8.        
Activate – метод,
активизирующий указанную ячейку.

1.8.     Sub run()
x = ActiveCell.Column
Y = ActiveCell.Row
Cells(Y + 1, x + 1).Interior.ColorIndex = 3
Cells(Y + 1, x + 1).Activate
End Sub
Опишите переменные, которые будут использованы в тексте программы с
целью сделать ее универсальной (применимой во многих сходных задачах, в
данном случае: при любых координатах начальной ячейки).

1.9.     Запишите строку Dim X,Y as
Byte. Здесь  X,Y – переменные, а Byte
тип данных (один из многих). Помощник предложит вам список, где выберите тип
данных.

1.10.   Разместите в окне MS Excel
дополнительную кнопку, которой назначьте макрос
run(). Напишите на кнопке – Диагональ.

1.11.   Активизируйте ячейку А1 и нажмите кнопку Диагональ шесть
раз. Это поможет глубже объяснить текст кода.

1.12.   Активизируйте ячейку В6 и нажмите кнопку Диагональ четыре раза.

1.13.   Выделите произвольную ячейку. Проверьте работу кнопки.

Пример
5

Используя
VBA в MS Excel, разработаем
пользовательскую форму «Расчет прибыли» для расположенной ниже таблицы.

Выручка от реализации (ВР)

Себестои- мость (С)

Внереализацион- ный доход (ВД)

Балансовая прибыль (БП)

Налог на прибыль (НП)

Сумма на- лога (СН)

Размер при- были (РП)

900,00
р.

400,00 р.

150,00
р.

(ВР
+ ВД – С)

20,0
%

(БП × НП)

(БП
– СН)

Для создания пользовательской
формы откроем новую рабочую книгу
MS Excel и на «Листе1» в первой строке введем
наименование полей таблицы, а строкой ниже установим в ячейке, соответствующей
графе НП, процентный формат, а в остальных шести – денежный. Расчертим таблицу
(рис. 18).

Перейдем к разработке
пользовательской формы, для чего откроем редактор
VB:

1.             
Добавим форму, воспользовавшись командой Insert ® UserForm.

2.             
Разместим на форме с помощью панели элементов Toolbox
слева семь надписей (элемент Label), справа – семь полей (элемент TextBox),
а ниже — четыре командных кнопки (элемент CommandButton).

3.             
С помощью окна свойств установим свойства данных объектов.

Объект

Свойство

Объект

Свойство

UserForm1

Caption = Расчет прибыли

TextBox6

Name = txtSN

Locked = True

CommandButton1

Name
= calc

Caption
= Расчет

TextBox7

Name = txtRP

Locked = True

CommandButton2

Name = printToTable

Caption = Заполнить таблицу

Label1

Caption = Выручка от реализации

AutoSize = True

CommandButton3

Name
= clean

 Caption
= Очистить

Label2

Caption = Себестоимость

AutoSize = True

CommandButton4

Name
= exitForm Caption = Выход

Label3

Caption
= Внереализационный доход

AutoSize = True

TextBox1

Name
= txtVR Locked = False

Label4

Caption
= Налог на прибыль, %

AutoSize
= True

TextBox2

Name
= txtS

Locked
= False

Label5

Caption = Балансовая прибыль

AutoSize = True

TextBox3

Name
= txtVD Locked = False

Label6

Caption = Сумма налога

AutoSize = True

TextBox4

Name
= txtNP Locked = False

Label7

Caption = Размер прибыли

AutoSize = True

TextBox5

Name
= txtBP Locked = True

Перейдем
к обработке события, возникающего при нажатии на кнопку (со- бытие называется
Click). Для этого выполним двойной щелчок
мышью по командной кнопке «Расчет». Откроется окно редактора кода
VB, в котором вве дем программный код:

Dim VR, VD, S, NP As Single             ‘задание
типа переменных

Dim BP, SN, RP As Single Private Sub calc_Click()

VR = Val(txtVR.Text)       ‘считывание значения
выручки от реализации

S = Val(txtS.Text)         ‘считывание
значения себестоимости

VD = Val(txtVD.Text)       ‘считывание значения
внереализационного дохода

NP = Val(txtNP.Text) / 100 ‘считывание
значения налога на прибыль и перевод
его в доли

BP = VR + VD S           ‘вычисление балансовой прибыли

SN = BP * NP               ‘вычисление суммы налога

RP = BP SN               ‘вычисление размера прибыли

txtBP.Text = BP            ‘вывод
балансовой прибыли в текстовое поле

txtSN.Text = SN            ‘вывод
суммы налога в текстовое поле

txtRP.Text = RP            ‘вывод
размера прибыли в текстовое поле

‘изменение
цвета фона
кнопки для
визуализации того,
что процесс
вычислений выполнен

calc.BackColor = Rnd * 10 ^ 5
End Sub

Аналогично введем программный код для оставшихся кнопок:

Private Sub printToTable_Click()

Cells(2, 1)
= VR ‘вывод значения выручки
от реализации в ячейку А2

Cells(2, 2)
= S ‘вывод значения
себестоимости в ячейку В2

Cells(2, 3)
= VD ‘вывод значения
внереализационного
дохода в ячейку С2

Cells(2, 4)
= BP ‘вывод значения
балансовой прибыли в ячейку D2

Cells(2, 5) = NP ‘вывод значения налога на прибыль в ячейку
E2 Cells(2, 6) = SN ‘вывод значения суммы налога в ячейку F2

Cells(2, 7)
= RP ‘вывод значения размера
прибыли в ячейку G2 printToTable.BackColor = Rnd * 10 ^ 5‘изменение
цветового фона кнопки

End Sub

Private Sub clean_Click()

txtVR.Text = Clear            ‘очистка текстовых полей

txtS.Text = Clear

txtVD.Text = Clear txtNP.Text = Clear txtBP.Text =
Clear txtSN.Text = Clear txtRP.Text = Clear

Cells(2, 1).ClearContents ‘очистка ячеек
A2:G2

Cells(2, 2).ClearContents

Cells(2, 3).ClearContents

Cells(2, 4).ClearContents

Cells(2, 5).ClearContents

Cells(2, 6).ClearContents

Cells(2, 7). ClearContents

End Sub

Private Sub exitForm_Click()

End

End Sub

Теперь
вернемся на «Лист1» и с помощью инструмента Кнопка разместим ниже таблицы
кнопку и назначим макрос ОткрытьФорму. Далее, дважды щелкнув по кнопке,
перейдем в редактор
VB и в модуле «Лист1» введем
программный код:

Private Sub
ОткрытьФорму_Click()

UserForm1.Show    ‘вывод
формы на экран

End Sub

Задания
к лабораторной работе 7

Задание
1

В соответствии с вариантом (№ п/п) создать пользовательскую функцию MS Excel и
воспользоваться ей в формулах, размещаемых на рабочем листе.

Задание 2

Создайте в имеющемся модуле Примера 3
процедуру Цветок(), продолжив ниже новый текст. Код программы
закрашивает стебель цветка в зеленый цвет, а для лепестков генерирует цвета в
пределе 56

Задание 3

Создайте в имеющемся модуле Примера 4
процедуру Обратно(), продолжив ниже новый текст. Код программы рисует
диагональ как в процедуре
run(), но в обратном направлении, т.е. í и
другим цветом.

Задание 4

Используя
VBA в MS Excel, разработать пользовательскую форму по Примеру 5,
предна
значенную  для 
выполнения  расчетов,  соответствующих  варианту  задания (№ п/п). Форма должна содержать:

ПРАКТИЧЕСКАЯ 
РАБОТА №7

Цель работы: изучить основные приемы работы с
встроенными диалоговыми окнами.

Методические указания

ВСТРОЕННЫЕ ДИАЛОГОВЫЕ
ОКНА

Возможности ввода
вывода информации в
VBA
чрезвычайно велики. Объектно–ориентированная структура языка позволяет
программисту использовать в своих пользовательских приложениях все возможности,
созданные для организации многооконной работы, развитых диалогов ввода-вывода,
работы с мышью, а также файловой работы. Имеющиеся возможности организации
ввода-вывода можно условно разбить на следующие основные группы в соответствии
с имеющими в составе
VBA объектами
и методами:

§  встроенные
диалоговые окна;

§  средства
создания пользовательского интерфейса;

§  средства
создания панели инструментов;

§  средства
работы с графическими объектами;

§  средства
построения диаграмм и графиков;

§  средства
работы с файлами.

Встроенные
диалоговые окна являются простейшей формой организации ввода-вывода и могут
рассматриваться как операторы ввода-вывода языка
VBA. Функция InputBox выводит на
экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим
ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает
значение типа
String,
содержащее текст, введенный в поле. Формат
оператора:

InputBox(prompt[,title][,default][,Xpos][,Ypos][,helpfile,context])

Здесь prompt
строковое выражение, которое будет отображаться как сообщение в диалоговом
окне,
title
сообщение, отображаемое в заголовке окна (если оно опущено, то отображается имя
приложения),
default
сообщение, которое будет выводиться в строке при запуске,
Xpos и Ypos задают
положение окна на экране,
helpfile и context
соответственно имя файла и номер раздела справочной системы.

            Функция
MsgBox выводит на
экран диалоговое окно с сообщением и ожидает нажатия кнопки пользователем
возвращая значение нажатой кнопки как число типа
Integer. Формальная
запись функции выглядит как:

            MsgBox(prompt[,buttons][,title][, helpfile,context]

Одноименные с
функцией
InputBox аргументы
имеют тот же самый смысл, а значение
buttons определяется как
сумма констант, задающих число и тип отображаемых кнопок, тип используемого
значка и основную кнопку (см. табл.1).

Таблица
1. Константы аргумента
buttons и возвращаемые значения функции MsgBox

Информационные
значки

Значение

Значок
сообщения

VbCritical

16

VbQuestion

32

VbExclamation

48

VbInformation

64

Основная
кнопка

Значение

Номер
основной кнопки

VbDefaultButton1

0

Кнопка
1

VbDefaultButton2

256

Кнопка
2

VbDefaultButton3

512

Кнопка
3

VbDefaultButton4

768

Кнопка
4

Возвращаемое
значение

Значение

Нажатая
кнопка

VbOK

1

Нажато
OK

VbCancel

2

Нажата
Отмена

VbAbort

3

Нажата
Прервать

VbRetry

4

Нажата
повторит

VbIgnore

5

Нажато
Пропустить

VbYes

6

Нажато
Да

VbNo

7

Нажато
Нет

 

Порядок
выполнения работы
.

Пример 1
– Изучите
функцию MsgBox

Sub sample_1()

MsgBox «Фильтровать?»,
vbOKCancel + vbQuestion + vbDefaultButton2,
«Отбор данных»

MsgBox «Отбор
данных произведен»,
vbOKOnly + vblnformation,  «Отбор данных»

MsgBox «Ошибка в
данных!»,
vbOKOnly + vbCritical, «Отбор данных»

MsgBox «Ошибка в
данных!»,
vbCritical + vbAbortRetrylgnore,  «Отбор
данных»

End Sub

Форматирование
значения данных

Для того, чтобы получить
любой формат отображения данных, преобра­зовать числа или даты в строки или
отформатировать строки в соответствии с вашими требованиями, можно использовать
функцию
Format Функция Format использует те же самые символы формата, что и Excel (откройте
окно Фор­мат—Ячейки -Число и в списке «Числовые форматы» укажите «все
форма­ты»).
Обращение к функции:

Format (переменная, «строка формата»)

Для создания
пользовательских форматов данных используются симво­лы, приведенные в табл. 7.

например, отображение
текущей даты может быть записано по-разному:

Символ

Описание

0

Резервирует место для цифры, отображается либо
цифра, либо ноль

#

Резервирует место для числового разряда,
отображается либо цифра, либо ничего

.

Точка разделяет целую и дробную части числа

%

Устанавливает процентное отображение числа,
аргумент при этом умножается на 100

d

День месяца без лидирующего нуля

dd

День месяца с лидируюшим нулем

ddd

Краткое название дня недели

dddd

Полное название дня недели

w

Номер дня недели (воскресенье — 1)

ww

Неделя года в виде целого числа от1 до 54

111

Номер месяца без лидирующего нуля

niiii

Номер месяца с лидир^тощим нулем

mmm

Краткое название месяца

mmmm

Полное название месяца

у

День года

УУ

Гол
в виде двух цифр

УУУУ

Полное
отображение года

/

Разделитель
значений дня, месяца и года в формате даты

q

Номер
квартала

h или hh

Отображает
часы

n или nn

Минуты

s или ss

Сек>»нды

:

Двоеточие
используется как разделитель в формате времени

@

Отображает
символ или пробел

&

Отображает
символ или ничего

> 

Отображает
строку в верхнем регистре

< 

Отображает
строку в нижнем регистре

Пример 2

Sub sample2()

MsgBox «Сегодня » & Format(Date,
«dd.mm.yy»)

MsgBox «Сегодня » & Format(Date,
«dddd, dd mmmm, yyyy»)

End Sub

Используя числовые форматы, можно изменять вид отображения
числа.

Sub sample3()

р = 123.4506

MsgBox Format(p,
«00000.000»)

MsgBox Format(p,
«###0.00»)

MsgBox Format(p,
«#0.00%»)

End Sub

Использование
MsgBox для обеспечения возможности выбора

Как уже отмечалось
ранее, при помощи необязательного аргумента Buttons можно использовать
VBA-процедуру MsgBox как функцию для получения выбора от пользователя в ответ
на сообщения или вопросы, которые отображает процедура. Для многих простых
вариантов выбора использование функции MsgBox для получения ответа от
пользователя является гораздо более легким, чем получение текстового ввода с
помощью функции InputBox и последующий анализ этого текста для определения
того, какой выбор сделал пользователь. При включении аргумента Buttons с
необходимыми круглыми скобками оператор MsgBox работает подобно функции и
отображает окно сообщения, содержащее различные командные кнопки. MsgBox
возвращает численный результат, указывающий, какую командную кнопку выбрал
пользователь. Число и тип командных кнопок, отображаемых диалоговым окном
MsgBox, выдается с помощью аргумента Buttons.

Пример 3. Создать
макрос,  определяющий нажатие кнопки в окне ввода

РАБОТА С
VBA-ОБЪЕКТАМИ

1. Флажок (CheckBox)

CheckBox – флажок.
Используется для включения и отключения каких-либо опций. Элемент управления
представляет собой поле, где можно устанавливать и снимать флажок и надпись,
где обычно выводится название и назначение флажка.

Если флажок установлен
– его свойство Value (Значение) устанавливается в True (Истина),
если не установлен – в False (Ложь). Для того чтобы программно
установить или снять флажок, можно воспользоваться его свойством Value,
приравняв ему True или False, соответственно.

Еще одно важное
свойство флажка – TripleState. Если оно включено – флажок помимо True
или False может иметь значение Null, которое можно
интерпретировать как «Пустой флажок». Null-флажок нельзя
модифицировать – он закрашен серым цветом.

Сами по себе, без
использования специальных конструкций языка, флажки приносят мало пользы.
Эффективно работать с ними можно, используя операторы принятия решений.

С флажком можно
сопоставить событие Change (Изменить). Оно выполняется всякий раз при
установке или снятии флажка.

2.Переключатель (OptionButton)

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

Приведем наиболее часто используемые свойства элемента управления OptionButton.

Value

Возвращает True, если переключатель выбран и False 
в противном случае

Enabled

Допустимые значения: True (пользователь может выбрать переключатель)
и
False (в противном случае)

Visible

Допустимые значения: True (переключатель отображается во время
выполнения программы) и
False (в  противном случае)

Caption

Надпись, отображаемая рядом с переключателем

Основными событиями
переключателя являются события
Click  и Change.

Пример 4.

Разработать программу
выполнения одной из четырех арифметических операций над двумя числами по выбору
пользователя. Исполняемая операция устанавливается за счет выбора
соответствующего переключателя.

ȅ굆。

Рис.: Использование переключателей.

Private Sub CommandButton1_Click()

Dim a As Integer, b As
Integer, c As Integer

a = TextBox1.Value

b = TextBox2.Value

If OptionButton1.Value = True
Then

    c = a + b

End If

If OptionButton2.Value = True
Then

    c = a — b

End If

TextBox3.Value = c

End Sub

Пример 5. Создать программу
«Времена года», по которой в зависимости от выбранного положения переключателя
(зима, весна, лето, осень) выдается изображение соответствующего времени года.

1. Добавить на форму
объекты:

Объект

Свойство

Значение

Label (надпись)

Name

LabelSeason

Caption

Времена года

Font

Tahoma. 22

Image (рисунок)

Name

Image 1

Visible

False (вначале рисунок невидим)

PictureSizeMode

1

Pic toe

(вставить рисунок зимы)

Height

180

Width

180

Command Button (кнопка)

Name

CmdExit

Caption

Выход

Frame (рамка)

Name

Frame 1

Caption

Выберите время года

Font

Tahoma. 12

Все
переключатели располагаются на рамке
Framel (перед вставкой на поле, выделить рамку).
При расстановке
переключателей на форме растягиваем прямоугольную область так. чтобы справа
было место для подписи

OptionButton (переключатель)

Name

OptWinter

Caption

Зима

Fore Color

(синий — выбирается в палитре Pelette)

Font

Tahoma. 14. полужирный

OptionButton (переключатель)

Name

Opt Spring

Caption

Весна

Fore Color

(светло-зеленый)

Font

Tahoma. 14. полужирный

OptionButton (переключатель)

Name

OptSummer

Caption

Лето

Fore Color

(темно-зеленый)

Font

Tahoma. 14. полужирный

OptionButton (переключатель)

Name

OptAutumn

Caption

Осень

Fore Color

(оранжевый)

Font

Tahoma. 14. полужирный

2. Запрограммировать щелчок на переключателях:

a) Запрограммировать переключатель Зима (OptWinter),
чтобы в поле рисунка загружался файл, например, winter.jpg (свойство Picture
и функция LoadPicture). Поскольку каталог с приложением может
находиться в разных папках, то к имени файла надо добавить путь к файлу с
приложением

(ActiveWorkbook.Path). После этого надо поле с рисунком сделать
видимым (свойство
Visible).:

Private
Sub OptWinter_Click()

Image1.Picture
= LoadPicture(ActiveWorkbook.Path & «winter.jpg»)

Image1.Visible = True

End Sub

b) Аналогично запрограммировать остальные переключатели.

Option Explicit

Private Sub CmdExit_Click()

End

End Sub

Private Sub OptAutumn_Click()

Image1.Picture = LoadPicture(ActiveWorkbook.Path
& «Autumn.jpg»)

Image1.Visible = True

End Sub

Private Sub OptSpring_Click()

Image1.Picture = LoadPicture(ActiveWorkbook.Path
& «spring.jpg»)

Image1.Visible = True

End Sub

Private Sub OptSummer_Click()

Image1.Picture = LoadPicture(ActiveWorkbook.Path
& «summer.jpg»)

Image1.Visible = True

End Sub

Private Sub OptWinter_Click()

Image1.Picture = LoadPicture(ActiveWorkbook.Path
& «winter.jpg»)

Image1.Visible = True

End Sub

Private Sub CheckBox1_Click()

Call Month

End
Sub

Задания
к лабораторной работе 8

Задание 1. Вывести 5 различных диалоговых окон и 2 окна  с
возможностью выбора

Задание 2. Создать пользовательскую форму и написать
программу для решения следующей задачи с использованием переключателей:

  1. Выбирается число от 1 до 7, определяющее день недели. Дать краткое
    название этого дня.
  2. Выбирается число от 1 до 5. Дать название этого числа.
  3. Вводится нецелое число. Вывести либо его целую часть, либо дробную
    в зависимости от выбора пользователя.
  4. Банк предлагает три вида срочных вкладов: на 3 месяца под 27 %, на
    6 месяцев под 29 % и на год под 30 %. Вкладчик положил
    N
    у. е. на один из срочных вкладов. Какую сумму он получит по истечение
    срока?
  5. Задано расстояние в метрах. Пересчитать это расстояние в
    километрах, милях, футах или ярдах на выбор пользователя ( 1 миля=1,609
    километра, 1 метр=1,094 ярда, 1 метр=3,281 фута).
  6.   Дан объем в литрах. Пересчитать этот объем в пинтах, галлонах,
    бушелях и квартах (английские меры объема жидких и сыпучих тел) на выбор
    пользователя (1 литр=1,706 пинты, 1 литр=0,220 галлона, 1 бушель=36,35
    литра, 1 кварта=1,136 литра).
  7. Дана масса в килограммах. Пересчитать эту массу в пудах, фунтах,
    центнерах или тоннах на выбор пользователя (1 пуд=16,38 кг, 1 фунт=0,409
    кг, 1т=1000 кг, 1 ц=100 кг.).
  8.  Дано расстояние в метрах. Пересчитать его в верстах, саженях,
    аршинах или вершках на выбор пользователя (1 верста=1,067 км, 1
    сажень=2,134 м, 1 аршин=0,7112 м, 1 вершок=4,445 см.).

Контрольные вопросы.

1.    
В чем отличие функций InputBox и
MsgBox?

2.    
Каков смысл аргумента title?

3.    
Каков смысл аргумента default?

4.    
Каков смысл аргумента buttons?

5.    
Каков смысл аргумента prompt?

6.    
Каков смысл аргумента context?

7.    
Каков смысл аргументов helpfile,context?

8.    
Как получить  любой формат
отображения данных
?

9.    
Назначение CheckBox?

10.  
Назначение OptionButton?


Введение

         Большинство
специалистов используют операционную систему
Windows на
рабочих местах предприятия и на индивидуальных компьютерах. Следует отметить,
что на предприятиях устанавливают требования (внутренние стандарты) на
использование приложений
MS Office для
подготовки распространения файлов. Жизнь показала, что стандарты предприятия на
использование операционных систем и приложений, отстают от тех возможностей,
которые предоставляют пользователям разработчики системы
Windows. Например, широко распространённое приложение для
работы с данными
MS Excel, постоянно добавляется новыми возможностями,
претерпевает некоторые изменения в интерфейсе. По этой причине, автор данного
пособия постарался учесть некоторые особенности версий
MS Office,
раскрывая правила работы пользователя, как с версиями
MS Office 2003 (это
основной стандарт для предприятий), так и с более поздними версиями, для
которых разработчики ввели ленточный  интерфейс
в строке Меню. Для демонстрации различий между отображением интерфейсов
приложений
MS Office, которые работают под управлением одной и той же
операционной системы
Windows
XP, на рис 1 представлено отображение интерфейса
приложения
Word 2003, а на рис 2 – Word 2007. Следует напомнить, что в приложениях MS Office
2003 (или в более ранних версиях) имелась строка Меню, к каждому наименованию в
строке прикреплялся разворачивающийся список с командами для вызова
определённой функции, а также создавалась панель инструментов в виде пиктограмм
с наиболее часто используемыми функциями для поддержки работы пользователя (рис
1). В версиях
MS Office, начиная с 2007, строка Меню состоит из закладок
(Главная, Вставка, Разметка страницы и т.д.), при активизации которых,
раскрывается лента в виде пиктограмм с перечнем функций для работы пользователя
(рис 2).

Рис. 1. Интерфейс приложения Word 2003

Рис. 2. Интерфейс приложения Word 2007

            В предлагаемом пособии рассмотрены конкретные примеры постановки
задач и их реализации в приложениях
MS Office. Задачи предлагаются на
практических занятиях по дисциплинам Информатика, Информационные технологии в
управлении, Исследование социальных и политических процессов. Автор пособия не
ставил перед собой цели по созданию универсального свода примеров по каждой
дисциплине, а лишь предлагает рассмотреть наиболее характерные постановки задач
для ввода, преобразования и обработки данных, которые встречаются в указанных
дисциплинах. Инструментом для обработки и анализа данных на рабочем месте
пользователя, часто являются приложения
MS Office, которые
используются в качестве программных средств подготовки данных для передачи
(экспорта) их в другие приложения, или используются в качестве средства для
обработки данных при получении (импорте) их из других источников и приложений.
На этом основана технология распределённой обработки данных, независимо от той
среды, в которой работает конечный пользователь. Следовательно, целесообразно
вводить в приложения
MS Office элементы
автоматизации работы с данными, для чего используются элементы управления, а
реализуется всё либо с помощью макросов, либо с использованием языка
Visual Basic for Application.


Раздел 1. О назначении
языка программирования
Visual Basic for Application

Событийный подход в программировании

                Событи́йно-ориенти́рованное
программи́рование
(англ. eventdriven
programming; в дальнейшем СОП) — парадигма программирования, в
которой выполнение программы определяется событиями — действиями пользователя
(щелчок по кнопке мыши, попадание курсора в определенную позицию, изменение
атрибутов того или иного объекта, переполнение буфера памяти и т.д.),
сообщениями других программ, событиями операционной системы (например,
поступлением сетевого пакета). Программа
представляет собой совокупность возможных сценариев обработки данных, выбор
которых инициируется наступлением того или иного события. Событийный подход к
программированию включает использование объектов, способных реагировать на
события, происходящие в системе.

                Корпорация
Microsoft интегрировала
в свои офисные продукты, а также во все версии операционной системы
Windows, простой в понимании и удобный в использовании язык
программирования
Visual Basic for Application (VBA), который
берёт своё начало от объектно-ориентированного языка программирования
Visual Basic (VB). Это средство разработки программного обеспечения,
сочетает в себе процедуры и элементы объектно-ориентированных языков
программирования. Среда разработки VB включает инструменты для визуального
конструирования пользовательского интерфейса, в итоге создаётся загрузочный
модуль, который может работать независимо. Язык
VBA позволяет пользователю создавать приложения,
структуры данных и управляющие структуры, что позволяет реализовать следующие
возможности: создание нестандартных диалоговых окон с базовым набором элементов
управления, написание процедур для приложений
MS Office,
обрабатывающих события, которые возникают при тех или иных действиях
пользователя или системы.

Особенности языка программирования VBA

                Язык
программирования
VBA не позволяет создавать
независимое приложение. Проект (программа) в
VBA обязательно должен взаимодействовать с каким-либо
документом (
Word, книга Excel, база данных Access). Документ рассматривается как доступный объект (Application) из программных кодов. Но, вместе с тем, программист
получает возможность автоматизировать работу пользователя с любым приложением
MS Office.
Под автоматизацией работ подразумевается выполнение ряда рутинных операций,
которые приходится осуществлять пользователю при работе как с внутренними
данными (данные в приложении), так и с внешними источниками данных (файлы,
таблицы, гистограммы и т.п.). Чтобы вызвать событие со стороны пользователя или
отобразить результаты выполнения операций над данными в
VBA используют
элементы управления. Следует отметить, что набором типовых элементов
управления, которые наиболее часто встречаются во всех интерфейсах
Windows, являются: кнопки, текстовые окна, надписи, списки,
средства для выбора. Эти элементы управления всегда доступны, хотя, часто
появляется необходимость (как и при использовании
VB) подключать дополнительные элементы управления,
которые можно выбрать из реестра
Windows, раскрыв
пиктограмму  Другие
элементы
, на панели инструментов. Каждый элемент управления связан с
набором событий, которые выбирает разработчик, при создании процедуры обработки
события, так на рис 3 представлен пример набора возможных событий для элемента
управления командная кнопка. После свершения события (нажатие на клавишу,
щелчок мышью и т.п.) подключается процедура, которая включает в себя набор
программных кодов (в основном операторы языка программирования), созданных
программистом по заранее намеченному алгоритму. Как правило, результатом работы
процедуры является преобразование данных (видоизменение, проведение расчетов,
изменение свойств объектов, создание файлов, отображение на экране пользователя
определённых сведений и т.п.).

Рис. 3. Перечень событий для командной кнопки

                Разработчики
интерфейсов для приложений
MS Office наиболее
часто используют стандартные элементы управления, перечень которых приведен в
таблице 1.

Таблица 1. Перечень наиболее часто используемых
элементов управления

Обозначение

Имя в VBA

Название

CommandButton

Кнопка

TextBox

Поле

Label

Надпись

ListBox

Список

ComboBox

Поле со списком

OptionButton

Переключатель

CheckBox

Флажок

Image

Рисунок


Раздел 2. Разработка программных кодов на VBA

Обработка данных с
использованием средств
VBA.

         Предположим,
что в организации не так много сотрудников, поэтому отдел кадров ведёт всю
документацию с использованием приложений
MS Office.
Безусловно, основные данные о сотрудниках целесообразно хранить в виде
отдельных файлов, к которым по мере необходимости можно обращаться. Сведения о
сотрудниках в основном содержат структурированную текстовую информацию, которая
может находиться в книге
Excel
и отображаться в виде таблицы, как это
показано на рис 4.

Рис. 4. Таблица со списком сотрудников

                Таблица с исходными данными (рис
4) может быть использована для обработки данных в
Excel стандартными
приёмами (сортировки, подведение итогов, отборы по заданным параметрам и т.д.).
Можно использовать эту таблицу в качестве источника данных для создания
автоматизированных форм, которые не потребуют от исполнителя каких-либо знаний
функциональных возможностей
Excel. Для этой
цели достаточно провести анализ потребностей исполнителя и создать небольшой
интерфейс с внедрением на лист
Excel
элементов управления, которые позволят в
автоматизированном режиме выполнять набор стандартных операций. В частности,
сохранять требуемые данных в отдельных файлах, осуществлять отбор данных по
заданным параметрам, формировать выходные документы. Автоматизация работы с
Excel предусматривает
внедрение макросов и программ на языке программирования
Visual Basic for Application (VBA), о чём в
дальнейшем и пойдёт речь.

Проектирование
интерфейса анализа количества записей в таблице и отображение данных в виде
списка

         Алгоритм
автоматического определения количества строк в таблице и переноса отдельных
полей в окно со списком очевиден. Необходимо с определённого места
последовательно просматривать данные одного столбца, проверять на наличие
записанного данного в ячейке и передавать в элемент управления поле со списком.
В том случае, если в ячейке ничего не будет записано, тогда следует прекратить
просмотр элементов столбца и отобразить в текстовом окне на листе
Excel количество просмотренных записей  в столбце.

                Воспользуемся уже готовой книгой
Excel с
наименованием
Form1.xls, откроем этот файл и сохраним его под новым именем
(на всякий случай), например, зададим имя файла –
Form2.xls. Прежде всего,
необходимо подготовить среду для разработки интерфейса пользователя и
программных кодов на
VBA. Для этого
(правильнее всего), работая с
Excel 2003, в
строке Меню следует выбрать: Вид→Панели инструментов→
Visual Basic. На
экране появится новая панель инструментов, которую можно ухватить мышкой и
переместить в любое место (лучше на общую панель инструментов), панель
инструментов
Visual Basic с
основными элементами показана на рис 5.

Рис. 5. Панель инструментов Visual Basic

                Активизация кнопки  Элементы
управления
, приведёт к открытию дополнительной панели инструментов с таким
же названием, на которой находятся основные элементы управления, её внешний вид
представлен на рис 6. Если подвести указатель мыши к любой пиктограмме на
панели инструментов, то будет показана подсказка с наименованием элемента.

Рис. 6. Панель – Элементы управления

                Пиктограмма  Режим
конструктора
при нажатом положении позволяет на рабочем листе поместить необходимый
элемент управления, а затем масштабировать его и изменять (задавать) свойства.
Так, для запуска программного приложения на
VBA, необходимо создать событие – нажать на кнопку (Click). После размещения кнопки на рабочем листе, она будет
иметь следующий вид: ,
что не устраивает разработчика. Поэтому, следует воспользоваться пиктограммой  Свойства
(на панели Элементы управления). На рис 7 представлено окно
Properties (Свойства)
для элемента управления – Кнопка,
некоторые свойства были изменены, к ним относятся:
BackColor, Caption, Font, ForeColor и MousePointer. Изменение свойств осуществляется либо путём ввода
текста в окно с наименованием свойства, либо путём выбора варианта свойства из
раскрывающегося списка. Остальные свойства задаются «по умолчанию», т.е. при
размещении элемента на листе книги автоматически запоминаются размеры элемента,
его местоположение, а так же многие свойства оставляются неизменными, например
Visible (Видимость).
Обратите внимание, что имя свойства, состоящее из двух и более слов,
представляется слитно, так как по правилам программирования, в программных
кодах имена переменных и элементов не должны иметь разрывов (символ пробел
недопустим).

Рис. 7. Окно свойств элемента управления – Кнопка

                               Для отображения
количества строк в таблице (в столбце) на листе
Excel размещён элемент  Поле,
которому так же можно задать собственные свойства, например, отображение числа
записей в таблице будет: синим цветом, шрифт которого –
Arial 18pt. Элемент  Надпись
обычно используется для отображения пояснений в виде текста, поэтому его
целесообразно размещать около элементов управления. В данном примере на листе
Excel создано
две надписи около элемента Поле (
TextBox) и элемента  Поле со списком (ListBox). Для удобства работы пользователя целесообразно
создать ещё одну кнопку, при нажатии на которую будут удаляться данные из
текстовых окон. В результате, выполняемых действий при размещении элементов
управления на листе
Excel, внешний вид его будет
таким, как показано на рис 8.

Рис. 8. Элементы управления, размещённые на листе Excel

Разработка программы на
VBA

                После того, как на листе Excel размещены необходимые элементы управления с заданными
свойствами, можно приступать к разработке программных кодов на
VBA и
отладке программы. Удобством
VBA является то, что в нем можно использовать в качестве
имён переменных зарезервированные слова для обозначения книги, листа и ячеек.
Совокупность ячеек представляют двумерный массив, в котором указывается
абсолютная адресация текущей ячейки относительно верхнего левого угла. Если
результаты обработки данных следует отобразить на том же листе, то в программе
нет необходимости указывать имя книги и имя листа.

                Разработка программных кодов
осуществляется в окне программных кодов (
Code), внешний вид которого представлен на рис 9.
Открывать окно для создания программных кодов лучше всего двойным щелчком по
элементу управления. В рассматриваемой задаче, подразумевается, что при нажатии
на кнопку с наименованием «Просмотреть список» будет запущена программа для
подсчёта количества строк в списке и в окне Поле
со списком
будут отображены все фамилии сотрудников.

Рис. 9. Внешний вид окна для записи программных кодов
в процедуру

                Следует напомнить, что в более
сложных задачах возможен вариант, когда потребуется  использовать данные из разных книг
Excel и листов, которые принадлежат этим книгам, по этой
причине следует ориентироваться в именах, которые им присваиваются во время
создания. Так, например, рассматривая рис 9, можно увидеть, что книга имеет имя
Form2, а лист, на котором находятся данные носит название –
Кадры, хотя другие листы этой книги
сохранили свои имена (Лист2 и Лист3), которые им присвоены по умолчанию
системой при открытии книги
Excel. При
внедрении элемента управления Кнопка
на лист, система ей присвоила имя (свойство
Name) – CommandButton1,
которое не менялось (хотя согласитесь, что это слишком громоздко, можно
придумать самому имя, например, С1).

                Обработка события Click, которое вызывает пользователь, нажав на кнопку с
наименованием «Посмотреть список», осуществляется процедурой Private Sub
CommandButton1_Click(), внутри которой расположена программа. Программные
коды представлены на рис 10.

Рис. 10. Программа 
обработки события – нажать на кнопку «Посмотреть список»

                Конструкция условного оператора WhileWend создана для того, чтобы в цикле просматривать
содержимое ячеек, начиная с ячейки
B3, что
соответствует в записи
Cells(i,2), где начальному значению i присвоено число
3 (номер строки), а 2 обозначает номер столбца в таблице. Так как неизвестно,
сколько требуется просмотреть строк, то в качестве условия в операторе
While записано
выражение:
Cells(i,2)<>””. Это условие трактуется следующим
образом: просматривать ячейки до тех пор, пока их содержимое будет иметь
какие-либо символы, в противном случае, когда встретится пустая ячейка –
прекратить просмотр и выйти из цикла. Так как оперируем с текстовой
информацией, то признаком отсутствия данных в ячейке является сочетание
символов “”. Отображение данных
осуществляется в окне со списком (
ListBox1
– это его имя), в который добавляются значения, полученные из ячеек с номерами
сотрудников и фамилий сотрудников.
AddItem
это метод (маленькая стандартная подпрограмма), поэтому присоединение метода к
имени объекта осуществляется через точку. Выражение:
Cells(i, 1) &
» » &
Cells(i, 2), имеет знак & (амперсанд), который показывает,
объединение значений нескольких переменных (в данном случае их 3). Первая
переменная
Cells(i, 1)  – это
значение номера сотрудника, вторая » » – пробел, третья
Cells(i, 2) – значение
из ячейки с фамилией. Таким образом, в окне отобразится номер и фамилия
текущего сотрудника, если предварительно отсортировать данные в таблице
Excel, например, по фамилиям сотрудников, то номер его
сохранится в том виде, какой был ему присвоен 
при вводе данных. В программе использованы переменные
i и k, первая из которых обозначает номер просматриваемого
столбца, а вторая введена для подсчёта количества просмотренных ячеек в цикле.
Отображение количества просмотренных строк осуществляется в текстовом окне (
TextBox) с помощью оператора присвоения TextBox1.Text = k. Следует обратить внимание на то обстоятельство, что
объекту с именем
TextBox1 присваивается
(передаётся) значение переменной
k, поэтому к
имени переменной через точку добавляется имя свойства
Text (TextBox1.Text).

                Пользователь может добавлять в
исходную таблицу новые строки или вводить исправления в данные, поэтому для
того, чтобы посмотреть новый список, целесообразно его очистить. Для этой цели
и была создана кнопка «Удалить сведения», текст этой программы приведён на рис
11.

Рис.11. Программа для очистки текстовых окон на листе Excel

                 Имя кнопки «Удалить сведения» оставлено без
изменения, как это предложила система. После свершения события
Click по
кнопке запускается программа, которая обрабатывает два объекта. Первым объектом
является список с именем
ListBox1,
который содержит несколько строк (комплекс данных), поэтому следует запустить
метод
Clear (Очистить).
Вторым объектом с именем
TextBox1
является текстовое окно (Поле) для обнуления которого достаточно свойству
Text присвоить пустое значение (пробельную строку).
Окончательный вариант интерфейса для пользователя на листе
Excel представлен
на рис 12. Можете
посмотреть пример.

Рис. 12. Отображение данных в виде списка

Особенности разработки
интерфейса пользователя на
Excel 2007

         На
рис 13 представлена книга со списком сотрудников, созданная в
Excel 2007, на которой расположены элементы управления для
автоматизации работы пользователя.

Рис. 13. Отображение панели инструментов для Excel 2007 с размещённой таблицей и элементами управления

                Для того чтобы разместить
элементы управления на листе
Excel 2007,
необходимо открыть вкладку Разработчик,
нажать на кнопку  Режим
конструктора
, а затем открыть панель с элементами
ActiveX (панель инструментов с наименованием «Элементы
управления формы» используется при работе с макросами). Изменение свойств
элементов управления, которые размещены на листе
Excel, осуществляется нажатием на пиктограмму ,
после выделения элемента на листе. Разработка программных кодов для поддержки
работы интерфейса пользователя ничем не отличается от технологии, которая была
описана в разделе выше (можно смело скопировать программные коды с рис 10 и рис
11 в окно
Code Visual Basic),
если работа ведётся в версии
Excel 2007 и
выше.

Можно
посмотреть пример для Excel
2007.

Передача данных из Excel в текстовые файлы

                Данные, которые собирают или
создают в
Excel, часто требуется
использовать в других приложениях. Возникает задача автоматизации формирования массивов
с данными таким образом, чтобы сотрудник не использовал ручные операции для
открытия книги
Excel, поиска и отбора необходимых
данных, их копирования и размещения в собственном приложении. Использование
VBA делает
возможным после обработки данных в
Excel
одним щелчком мыши сформировать выходной файл для других пользователей.
Воспользуемся уже готовым приложением
Excel, в
котором сформирована таблица с данными о сотрудниках (
Form1.xls), добавим в неё столбец «Дата приёма». После
заполнения столбца данными (в примере это год приёма на работу), сохраним
документ под именем
Form3.  Предположим, отделу охраны
потребуются сведения о сотрудниках организации, чтобы подготовить им новые
пропуска. Совершенно очевидно, что, во-первых, отдел кадров не должен
передавать все сведения о сотрудниках, во-вторых, отдел охраны должен готовить
пропуска только тем сотрудникам, у которых они закончили срок действия или для
вновь принятых сотрудников. Следовательно, 
инициатором формирования списков на выдачу пропусков сотрудникам
является отдел кадров, который ведёт учёт движения кадров, в соответствии с
приказами по организации. Поэтому, для формирования списка сотрудников на
выдачу пропусков в отделе кадров должны провести отбор кандидатур из общего
списка, который оформляется в виде отдельного файла и направляется на сервер.

                Решение поставленной задачи
осуществим средствами
Excel. Алгоритм
формирования файла из таблицы
Excel состоит из
ряда последовательных действий, которые включают:


просмотр списка фамилий сотрудников предприятия;


выбор из списка фамилий и других данных, кому потребуются пропуска;


формирование файла с данными и отправка его отделу охраны предприятия.

                Подготовим интерфейс для работы
сотрудника отдела кадров с приложением
Excel, внешний вид заготовки представлен на рис 14.

Рис. 14. Интерфейс пользователя для подготовки файла с
данными

                В качестве нового элемента
управления, который появился на листе
Excel,
выбран:  Поле
со списком
(
ComboBox). Этот элемент управления
обладает дополнительными свойствами по сравнению с элементом Список (
ListBox). Например, можно сделать раскрывающийся список или, непосредственно,
в окне отобразить сведения о его состоянии (чем мы и воспользуемся).

                Разработку программы
целесообразно начать последовательно для каждого элемента. Чтобы не путаться
примем в качестве соглашение – имена объектов на листе (элементов управления)
оставим такими, какие им присваивает система. Первое событие, которое должен
осуществить сотрудник при работе с данным приложением – указать условия отбора
данных из таблицы со сведениями о персонах. Для этого необходимо нажать на
кнопку с наименованием «Ввести условия отбора», по заданному условию в элементе
Поле со списком должны отобразиться
данные о сотрудниках. Поэтому, требуется организовать диалог пользователя с
приложением, для этого воспользуемся стандартным диалоговым окном на основе
функции
InputBox(). Программные коды для обработки события Click по
кнопке представлены на рис 15.

Рис. 15. Программа для обработки события — нажать на
кнопку «Ввести условие отбора»

                Следует напомнить, что в
программах используют переменные, зона действий которых распространяется
по-разному. Чтобы переменная была доступной в пределах приложения для всех
процедур, тогда её необходимо объявить в общей области, если нет необходимости
использовать имя переменной во всех процедурах, тогда её объявляют внутри
процедуры или внутри оператора. При рассмотрении данной задачи, на это будет
обращено внимание. Для отбора сведений из таблицы
Excel по заданному
критерию необходимо сформировать промежуточные массивы, в которых будут
находиться данные, предназначенные для записи в файл. Массивы будут создаваться
в процедуре отбора данных из таблицы, а использоваться в процедуре записи
данных в файл, поэтому оператор:
Dim M1(20), M2(20), M3(20), M4(20) As String,
создан раньше объявления всех процедур. По той же причине объявление  переменной Dim k As Integer для подсчёта
количества отобранных записей вынесено в начало программы. Обратите внимание,
что оператор
Dim i As Integer находится внутри процедуры, т.к. действие переменной i распространяется только при просмотре ячеек таблицы.
Операторы, позволяющие осуществлять удаление данных из поля со списком и из
заголовка списка, используются для того, чтобы пользователь мог несколько раз
менять своё решение при вводе критерия отбора, не выполняя при этом
дополнительных действий. Организация диалогового окна осуществляется функцией
InputBox(), у которой задаются аргументы, а результаты ввода
сохраняются в переменной
y. Рассмотрим несколько подробнее содержимое функции InputBox().

    y = InputBox(«Введите год, ниже
которого будут отобраны сведения из таблицы», _

    «Вы указываете критерии отбора»)

Диалоговое
окно для ввода критерия отбора данных из таблицы представлено на рис 16, у
которого есть поле для заголовка, тело для отображения инструкций, указаний и
т.п., а так же есть текстовое окно для ввода данных. При нажатии на кнопку ОК
на диалоговом окне, значение из текстового окна передаётся переменной
y. Если
пользователь нажмёт на кнопку
Cancel, то будет
сгенерирован код конца работы, который передаётся переменной
y, обычно
программисты это учитывают и создают программные коды, которые анализируют,
какую кнопку нажал пользователь. В рассматриваемом примере оператор If y
<> «» Then проверяет наличие любого кода, введённого в
текстовую строку. В том случае, если нажата кнопка
Cancel, то код будет пустым, после этого оператора ни одна
инструкция в программе не будет выполнена (завершение проверки условия
End If стоит в самом конце процедуры).

Рис. 16. Диалоговое окно для ввода критерия отбора
данных из таблицы

                Далее, в процедуре по отбору
данных встречается конструкция
WhileWend, которая была описана в предыдущем примере. Внутри
этой конструкции встроен условный оператор
IfThenElse. Условием является сравнение текущего значения в
ячейках с датой поступления сотрудников на работу с критерием отбора. Так как в
ячейках находятся данные в числовом формате, а критерий отбора введён в
текстовом виде, то использована функция
Int(), с помощью которой текстовые данные преобразуются в
целые числа (заметим, что аргументы функции всегда заключены в круглые скобки).
При выполнении заданного условия (“<=”) осуществляется  сохранение данных в массивах (Фамилия, Имя,
Отчество, Должность) и идёт заполнение строк элемента управления —Поле со списком. По окончанию просмотра
ячеек таблицы со сведениями о годе поступления на работу, осуществляется замена
текста в заголовке элемента – Поле со
списком
. На рис 17 показан результат отбора записей при заданном критерии
отбора (в диалоговом окне указан 2008 год).

Рис. 17. Пример отбора данных по заданному критерию

                Передача, отобранных сведений из
таблицы, осуществляется после того, как пользователь нажмёт на кнопку
«Подготовить файл». В этом случае будет запущена процедура, текст которой
представлен на рис 18.

Рис. 18. Программные коды процедуры — запись данных в
файл

                Самым простым способом создавать
файл является — указать полный путь к файлу в программе, хотя есть и другие
способы, о которых будет сказано ниже. В данном примере рассмотрим, как
работает оператор
Open. Для создания файла
необходимо задать путь к файлу: «
C:PrimvbaSved.txt«, режим
For Output
(открыть файл для записи), и задать указатель файла — 
As #1
(цифра может быть любой). Если файла с указанным именем нет, то он будет
создан, если такое имя существует, то запись начнётся с начала, а все
предыдущие записи будут удалены. Путь к файлу
C:Primvba — содержит: имя диска, и наименования папок. В том
случае, если наименований указанных папок не существует, то система даст сообщение
об ошибке. Завершение записи осуществляется операцией закрытия (добавление
специального символа в конец файла) с помощью оператора
Close #1. В данном примере, необходимо содержание массивов
с данными передать в файл, для чего использована конструкция
ForNext.

В операторе Write #1,
M1(j); M2(j); M3(j); M4(j) даётся ссылка
на указатель файла и после запятой указывается список переменных, отделяемых
друг от друга знаком разделителя (в данном примере знаком разделителя данных
является – точка с запятой «;»). Результаты созданного файла с оператором
Write показаны
на рис 19. Вместо оператора
Write можно
использовать оператор
Print, тогда
знак разделителя не будет отображаться.

Рис. 19. Отображение в приложении Блокнот, записанных
сведений в файл

                Пользователь получает на экране
компьютера подтверждение (рис 20), которое создано с помощью функции
MsgBox(). Обратите внимание, что при задании в функции
аргумента – vbInformation, на диалоговом окне отображается только одна кнопка и
символ информация.

Рис. 20. Сообщение пользователю о завершении записи
данных в файл

                Процедура очистки окон
запускается нажатием на кнопку «Очистить список», как она создавалась описание
дано в предыдущем примере.

Посмотрите
работу примера в Excel
2003

Посмотрите
работу примера в Excel
2007

Использование файлов с
данными для работы в
Excel

         Созданный
файл со списком сотрудников удобно использовать для работы различных
подразделений. Предположим, что отдел охраны просматривает на сервере вновь
поступившие файлы для выполнения функции – подготовка пропусков сотрудникам
организации. Попробуем упростить работу сотрудника отдела охраны, для чего
рассмотрим два варианта работы со списком, который находится в отдельном файле.
Для достижения, поставленной цели, необходимо создать шаблон выходного
документа – это образец пропуска на работу, а так же необходим интерфейс на
листе
Excel, с помощью которого можно отобрать данные и заполнить
бланк пропуска. Откроем новую книгу в
Excel
2003 (попутно покажем, какие различия встретятся при работе с
Excel 2007). В новой книге создадим шаблон для типового
пропуска, который после заполнения будет распечатывать сотрудник отдела охраны.
Назовём лист «Пропуск», а шаблон будет выглядеть, как показано на рис 21.

Рис. 21. Лист Excel с заготовкой для вывода данных

                Рамка обозначает внешний вид
документа (Пропуск), внутри рамки обведены ячейки, которые залиты одним цветом.
На документе размешены его атрибуты (рисунок в виде флага; название
организации; заголовок документа 
«Пропуск»; реквизиты документа фамилия, имя, отчество, должность).
Ячейки
B3:G3 объединены ,
в которых записано название организации, в строке 4 крупным шрифтом написано
слово «ПРОПУСК», в ячейке
B8 – Должность и
т.д. (все ячейки, которые использованы для шаблона на рис 21 выделены другим
цветом). В ячейке С10 изменён формат представления данных с Общего на формат Дата, обратите внимание, что в эту ячейку вставлена формула:
=СЕГОДНЯ(). Варианты автоматизации получения пропуска для сотрудника с
заполненными данными, отличаются друг от друга интерфейсом, который расположен
на листе с наименованием «Список».

Вариант 1. Импорт текстовых данных на
лист
Excel

 Список
сотрудников из файла поместим на листе
Excel с наименованием «Список», для чего откроем в строке Меню→ Данные→ Импорт внешних
данных→ Импортировать данные
, как показано на рис 22.

Рис. 22. Подготовительные действия для импорта таблицы
из файла

                При импорте внешних данных на
лист
Excel, сначала следует найти местоположение файла (с
помощью окна – Импорт текстового файла),
а затем провести три последовательных шага в приложении – Мастер текстов.

                Для тех, кто работает с Excel 2007, необходимо в Меню раскрыть вкладку Данные,
чтобы обратиться к списку команд группы – Получить
внешние данные
. На рис 23 выделена пиктограмма – Из текста, которая запускает диалоговое окно для поиска файла и Мастер текстов, при работе с этими
диалоговыми окнами, все последующие действия при импорте текстового файла будут
аналогичны, как в
Excel 2003.

Рис. 23. Импортирование внешних данных, созданных в
виде текста

                Приложение Мастер текстов преобразует строки в отдельные записи (создаёт
списки), поэтому при выполнении второго шага, следует указать, что является
символом-разделителем в файле. На рис 24 показано окно Мастер текстов, в котором отмечен символ-разделитель – запятая.

Рис. 24. Пример преобразования строк текста в
табличные данные с помощью приложения Мастер
текстов

Теперь следует позаботиться, чтобы данные о сотруднике
с листа «Список» попали на лист «Пропуск». Передача сведений о сотруднике,
которые предварительно выделяют в списке, будет осуществляться после нажатия на
кнопку с наименованием «Подготовить пропуск» на листе с наименованием «Список»,
как показано на рис 25.

Рис. 25. Пример импортированного списка на лист Excel для
подготовки пропуска сотруднице Вавиловой

                Так как на листе Excel размещена
одна кнопка, то только для неё создаётся программный код, представленный на рис
26. Рассмотрим некоторые особенности программы, с помощью которой создаётся
диалоговое окно для ввода диапазона ячеек со сведениями о сотруднике, а затем
эти сведения передаются на лист «Пропуск» в шаблон.

                Воспользуемся возможностями
объекта
Application, который обладает обширной коллекцией свойств,
позволяет программно установить значения многих опций для объектов, которые
используются в программе
VBA (подробно об
объекте
Application можно
ознакомиться в литературе, например, [1]). В данной программе используем
функцию
InputBox() в качестве диалогового окна для сбора параметров о
сотруднике. Поэтому, сначала дадим описание параметров этого окна в операторе
Set (Установить), запись будет выглядеть следующим
образом:

  Set input_sveden = Application.InputBox( _

        Title:=»Найдите необходимую ячейку», _

        Prompt:=»Выделите в таблице ячейки в строке,»
&
Chr(13) _

                   & «которые
относятся к сотруднику», _

       Type:=8)

Зададим имя переменной — input_sveden, которой
будут передаваться сведения из текстовой строки диалогового окна. 
Application.InputBox — это новый объект (на основе функции InputBox). Объекту следует задать параметры, которые являются
атрибутами функции, к которым относятся:

Title – строковое выражение, отображаемое в строке
заголовка диалогового окна;

 Prompt
строковое выражение, отображаемое как сообщение в диалоговом окне;

Type – параметр, указывающий что должно отображаться в текстовом
окне (код 8 – адрес выделяемой ячейки на листе).

Рис. 26. Программные коды для обработки выделенной
строки после свершения события
Click
при передаче в шаблон документа

                Для того, чтобы осуществить
работу с выделенными ячейками на листе, необходимо выяснить их количество
(количество столбцов и количество строк), что осуществляется операторами:

    Num_col = input_sveden.Columns.Count

    Num_row = input_sveden.Rows.Count

Операторы цикла осуществляют просмотр содержимого
переменной
input_sveden с последующей записью в индексированный массив
Mas(i), далее формируется общая строка
FIO, содержащая фамилию имя и отчество сотрудника.  Для создания сообщения о выполнении работы использован
оператор
MsgBox (обратите внимание, в
операторе не используются круглые скобки). Но вместе с тем, в этот оператор
встроена функция Chr(13), которая воспринимает код 13, как возврат каретки и
перевод курсора на новую строку, что позволяет в диалоговом окне сообщение
делить на несколько строк. Пример результатов выполнения запроса показан на рис
27.

Рис. 27. Пример использования оператора MsgBox для формирования
сообщения в виде диалогового окна

                Сохранив значения в переменных FIO и Mas(4) для заполнения пропуска (так можно собрать из
таблицы большое количество данных, а в нашем примере показано, как выбирать
данные и объединять в одну строку), осталось их передать на другой лист, что
выполняется с помощью следующих кодов:

     Worksheets(«Пропуск«).Cells(6, 2) = FIO

     Worksheets(«Пропуск«).Cells(8, 3) = Mas(4)

Посмотрите
пример работы программы для Excel

Пример,
который работает только в
Excel 2007 и
выше

Вариант 2. Использование данных
непосредственно из файла.

Можно создать интерфейс для пользователя на листе Excel, для того, чтобы (в данном примере) сотрудник отдела
охраны, имел возможность выбирать файл, отбирать необходимые сведения,
распечатывать бланк пропуска с готовыми данными. Создадим новую книгу
Excel, присвоим ей имя – Form5. Первый лист книги назовём «Сотрудники», а второй
лист с наименованием «Пропуск» скопируем из предыдущего примера. На листе
«Сотрудники» расположим необходимые элементы управления как показано на рис 28.

Рис. 28. Проект интерфейса пользователя на листе Excel

Для осуществления операции просмотра файлов введём
новый элемент управления, на панели инструментов пиктограммой  Другие
элементы
, После нажатия на эту пиктограмму, откроется список, из которого
выберем — 
Common Dialog (Общий диалог). Класс объектов
управления Общий диалог позволяет открыть в работающем приложении одну из
стандартных диалоговых панелей, например, Открытие файла (
File Open), Сохранение
файла (
File Save As), Выбор шрифта (Select Font) и
другие, как показано на рис 29 выделяют название элемента, а затем нажимают на
кнопку ОК.

Рис. 29. Выбор дополнительного объекта в разделе Windows
Другие элементы

Пиктограмма  Общий
диалог
появится на листе
Excel, после
чего необходимо установить свойства элемента. В данном примере, свойству
Name (Имя)
присвоим –
CD1. Напомним, что элементы
управления, которые относятся к интерфейсу пользователя,  по умолчанию имеют заданные свойства, изменим
некоторые свойства, которые перечислены в таблице 2.

Таблица 2. Наименования элементов управления и их
свойства в программе

Наименование элемента

Свойство

Значение

CommandButton1

Name

CB1

Caption

Посмотреть файлы

Label1

Caption

Для выбора фамилии из
списка, выделите её мышкой

ListBox1

Name

LB1

CommandButton2

Name

CB2

Caption

Подготовить пропуск

Label2

Caption

Вы выбрали фамилию, можете
сделать новый выбор

Label3

Name

LL2

Caption

«Пусто»

                Интерфейс пользователя включает
две кнопки. Первая кнопка с наименованием «Посмотреть файлы» должна обеспечить пользователя
поисковым средством для выбора файла (где бы он не находился), отобразить
фамилии сотрудников в виде списка на экране в объекте с именем
LB1. Программа обработки события, представлена на рис
30.

Рис. 30. Программа обработки события при нажатии на
кнопку с наименованием «Поиск файлов»

                Обратите внимание, что в общую
область вынесено два оператора
Dim, для
описания переменных, которые будут использованы во всех процедурах. В то время
как переменные
Puti и k
используются только в процедуре CB1_Click(). В
предыдущих примерах было дано подробное описание работы с оператором
Ifelseend и функцией MsgBox(),
поэтому покажем новые элементы программы. Так, запись CD1.ShowOpen, есть не что
иное, как открытие диалогового окна для поиска файлов. Метод
ShowOpen позволяет
запустить диалоговое окно в режиме поиска файлов, как показано на рис 31.

Рис. 31. Диалоговое окно для поиска файлов

                Путь к файлу (перечень устройств
и папок), а так же имя файла сохраняются в переменной: Puti = CD1.Filename, где
CD1 – имя объекта Общий
диалог
, а
Filename – свойство, которому передаётся путь к файлу.

Оператор
Open Puti For Input As #2
указывает, что необходимо открыть содержимое файла, находящегося по адресу
Puti.

Новый
приём создания цикла основан на конструкции
WhileWend. Внутри
цикла необходимо заполнить строки поля со списком (его имя
LB1), и передать все значения о сотрудниках в массивы.
При просмотре файла, неизвестно, сколько находится записей в нём, поэтому, в
операторе начала цикла в качестве условия стоит признак конца файла –
EOF (End of File).
Когда условие выполнится, произойдёт выход из цикла.

                Следующее действие, которое
должен совершить пользователь, это отметить в списке фамилию и нажать на кнопку
«Подготовить список» (можно упростить задачу, ликвидировать эту кнопку, а
обрабатывать событие щелчка мышью в строке списка). Для обработки события –
щелчок мыши, программа будет выглядеть, как показано на рис 32.

Рис. 32. Программа формирования документа на листе
«Пропуск»

                Особенностью программы является
то, что в ней используется определение индекса выделенной строки в поле со
списком оператором:

j
= LB1.ListIndex переменная
j используется
для получения данных из массивов. Результаты работы пользователя представлены
на рис 33.

Рис. 33. Результаты работы с интерфейсом на листе Excel

Посмотрите
пример в Excel

Пример,
который работает только в Excel
2007 и выше


Раздел 3. Макросы в Excel

Направления
использования макросов

         При автоматизации работ с часто повторяющимися
действиями, процесс их выполнения осуществляется с помощью макросов. Макрос (
macro) – это последовательность команд, которые написаны на
VBA и
которые хранятся в стандартном модуле среды разработки
VBA приложений.
Макросы могут осуществлять широкий спектр задач от простых вычислений до
создания пользовательского интерфейса вашего приложения. Выделяются три
основные разновидности макросов
[3]:

Ø  Командные – основными предназначениями, которых
является выполнение действий, аналогично командам меню.

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

Ø  Макрофункции – представляют собой сочетание командных
макросов и пользовательских функций. Если необходимо в различных макросах
выполнять ряд одинаковых действий, то эти действия обычно выделяются в
отдельную макрофункцию (подпрограмму). Фактически создаются предпосылки для
организации модульного программирования в среде
VBA.

Корпорация Microsoft
разработала и внедрила в приложения
MS Windows специальную программу, которую назвали – Макрорекордер.
С его помощью осуществляется формирования программного кода, который
оформляется в виде отдельного модуля. Суть работы макрорекордера заключается в
следующем:

§  Пользователь запускает программу – Начать запись (в дальнейшем –
программа).

§  Программа перехватывает события, которые вызывает
пользователь (выделение ячеек на листе, нажатие в строке меню на строку с
указанием программы, например, копировать) и преобразует эти события в
стандартные команды и операторы на языке
VBA.

§  Пользователь завершает создание макроса – Остановить запись.

§  Программа формирует модуль, имя которому присваивает
пользователь.

Необходимо отметить, что модуль относится к открытой
книге
Excel, в которой создавался макрос, хотя его можно скопировать
и перенести в другую книгу.

Создание макросов

         Прежде
чем запустить макрорекордер для создания макроса, надо тщательно спланировать
ваши действия. Чтобы освоить порядок работы, создадим интерфейс пользователя в
виде командного макроса. Например, созданный список сотрудников (пример 1 –
Form1.xls) необходимо
скопировать в новую книгу
Excel и
сохранить её в определённой папке. Для выполнения данной работы потребуются
типовые команды, которые нет смысла самому писать на
VBA, пусть это сделает макрорекордер.

                Для активизации макрорекордера в
Excel 2003 в строке Меню→ Сервис→Макрос→
Начать запись, как показано на рис 34.

Рис. 34. Порядок запуска макрорекордера через строку
Меню

                Тот, кто работает с Excel 2007
и выше, следует в строке меню открыть вкладку Вид, а затем раскрыть пиктограмму
Макросы, чтобы выбрать команду Запись макроса, как показано на рис 35.

Рис. 35. Последовательность доступа к команде Запись
макроса

                После того, как будет выполнена
команда Запись макроса, на экране
появится окно с одноимённым названием, которое показано на рис 36.

 

Рис. 36. Окно для записи параметров макроса

                В диалоговом окне Имя макроса предлагает система, можно
дать ему любое имя, например, Копия_списка.
Обратите внимание, что в именах не должно быть пробелов. Поле Сочетание клавиш состоит из обязательной
клавиши
Ctrl и той, которую назначает пользователь (можно не
назначать). Система предлагает сохранить
макрос в различных вариантах, выбираем – Эта
книга
.

Поле
Описание макроса заполняется
пользователем в текстовом окне.

После того, как будет нажата кнопка ОК в окне Запись макроса, макрорекордер начнёт
отслеживать действия пользователя и создавать программу на
VBA. Алгоритм действий понятен, состоит из следующих
этапов: открыть имеющийся файл с данными; выделить область ячеек, которые
следует скопировать; выбрать из меню команду копировать; открыть новую книгу
Excel; дать команду вставить на лист содержимое буфера
обмена; сохранить новую книгу в виде файла; закрыть этот файл. Завершение
работы макрорекордера осуществляется командой ,
которая находится в группе команд Макрос.

                 Посмотрите, как работает созданный макрос,
который можно запустить сочетанием клавиш
Ctrl+a.

Работа с макросом

                Созданный макрос «Копия_списка»
сохраняется в виде отдельного модуля в книге файла
Form1.xls. Для того,
чтобы посмотреть содержимое программы на
VBA или запустить макрос, достаточно открыть диалоговое
окно, нажав на команду в меню ,
представленное на рис 37.

Рис. 37. Диалоговое окно Макрос с вариантами работы с
макросом

Кнопка
 предназначена для запуска, выбранного из
списка макроса (в данном примере всего один макрос).

Кнопка
 предназначена для просмотра текста макроса в
редакторе и исправления необходимых параметров (прежде чем начать
редактирование кодов, следует запустить режим конструктора). Для рассматриваемого
примера, программные коды макроса показаны на рис 38.

Рис. 38. Программные коды макроса

Кнопка
 позволяет открыть режим редактирования
программных кодов, аналогично кнопке «Войти», но сразу входит в режим
конструктора.

Кнопка
 находится в неактивном состоянии, для того
чтобы её активизировать, необходимо перейти в режим работы с формой.

Кнопка
 позволяет из имеющегося списка макросов
удалить тот, который будет выделен.

Кнопка
 запускает диалоговое окно Параметры макроса,
которое показано на рис 39.

Организовать командные функции с помощью макроса
довольно просто, но, как можно заметить существуют некоторые неудобства.
Во-первых, макрос это статичная программа, например, если исходный список будет
расширен, то запуск макроса приведёт к тому, что копироваться будут ячейки
таблицы, которые были заданы диапазоном при записи макроса. Во-вторых, путь к
файлу, который должен быть создан, задаётся в абсолютном виде, следовательно,
всегда следует соблюдать порядок перечня устройств и папок, которые записаны в
макросе. В-третьих, запуск макроса осуществляется самим пользователем либо с
помощью сочетания клавиш, либо через меню. Указанные недостатки, можно обойти
путём введения на лист
Excel
элементов управления, которые находятся
на панели инструментов Формы.

Рис. 39. Диалоговое окно для изменения параметров уже
созданного макроса

Использование панели
инструментов Формы при создании макросов

         Панель
инструментов Формы содержит в своём составе элементы управления, к которым
можно «привязаться» с помощью макрорекордера. Для открытия указанной панели
инструментов в
Excel 2003, следует в строке Меню→Вид→Панели
инструментов→Формы, внешний вид которой показан на рис 40.

Рис. 40. Панель инструментов Формы

                Тот, кто использует Excel 2007, панель инструментов Формы может найти через
открытие вкладки Разработчик→ Вставить (режим конструктора не активизировать),
как показано на рис 41.

Рис. 41. Элементы управления формы

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

  1. Откроем файл с
    исходными данными под именем
    Forma1.xls.
  2. Создадим новую книгу
    в
    Excel, сохраним её под именем Form6.xls.
  3. Откроем панель
    инструментов Формы для файла
    Form6.xls.
  4. Поместим на листе с
    наименованием «Просмотр списка» элемент управления  — список.
  5. Запустим команду  для записи макроса, в окне Запись макроса присвоим имя макросу
    Получить_список.
  6. Сделаем щелчок
    правой клавишей мыши по элементу Список, в открывшемся окне выберем строку
    с наименованием «Формат объекта».
  7. В открывшемся окне,
    которое показано на рис 42, под названием Форматирование объекта на вкладке Элемент управления необходимо щёлкнуть по значку  — Формировать список по диапазону, а
    затем в книге под именем
    Form1
    выделить столбец с фамилиями.
  8. Закрыть окно Форматирование объекта кнопкой ОК.

После выполнения пункта 8 список будет заполнен
фамилиями, которые получены с листа под наименованием «Кадры» из книги –
Form1.

Рис. 42. Окно для форматирования объекта – Список

Закройте эту форму, сохраните книгу Form6 и тоже закройте. Можете убедиться, что макрос
заполнения списка создан, программа которого представлена на рис 43.

Рис. 43. Программа макроса для заполнения объекта Список данными

 Теперь
попробуйте открыть файл
Form6.xls, к сожалению, в открытой книге будет только элемент
управления Список совершенно чистый,
хотя, макрос был создан. Причина такого результата кроется в том, что источника
информации нет (книга со списком сотрудников закрыта). Создадим ещё один
макрос, обращение к которому, позволяет открыть книгу с именем
Form1. В книге Form6
дадим команду для макроса – Начать запись,
откроем файл
Form1.xls, дадим команду – Остановить
запись
. Таким образом, создан второй модуль, программа которого показана на
рис 44.

Рис. 44. Программный код макроса для открытия файла Form1.xls

                Таким образом, создано два
модуля с программами, которые необходимо объединить. Это делается с помощью
командной кнопки, которую разместим на листе книги
Form6. Используем панель элементов Формы, на которой выбираем элемент  — кнопка, располагаем его на листе.

Для
такого элемента система открывает диалоговое окно — Назначить макрос объекту, которое представлено на рис 45. В том
случае, если макрос ещё не готов, то нажмите на кнопку «Отмена» в окне
«Назначить макрос объекту». Когда понадобится выполнить операцию привязки
макроса к кнопке, тогда щёлкните правой клавишей мыши по объекту, а затем в
открывшемся списке выберите необходимую строку с наименованием команды, как это
показано на рис 46.

Обратите внимание, что панель инструментов Формы самостоятельно создаёт процедуры
для обработки событий, не требует перехода в режим конструктора, но вместе с
тем, имеет ограниченные возможности для изменения свойств объектов.

Рис. 45. Диалоговое окно назначения макроса объекту
кнопка

Рис. 46. Пример использования всплывающего меню для
работы с объектом

                Посмотрите работу
примера в Excel 2003

                Этот
вариант будет работать только в Excel
2007 и выше


Раздел 4.
Пользовательские функции в
VBA

Создание
пользовательских функций

         Пользовательские
функции оформляются в виде отдельных модулей, используются для организации
вычислений, решения аналитических задач, создания гистограмм и графических образов
на листе
Excel. Каждый модуль представляет
собой законченный процесс обработки информации, часто модули используют
неоднократно в различных областях приложения. Отличительной особенностью
пользовательской функции является то, что в ней изменяются параметры, в
зависимости от условий текущего момента, что делает приложение и интерфейс
более универсальными. В предыдущих разделах было показано, как составлять
программы с помощью редактора
VBA и макрорекордера при написании макросов. Следует
заметить, что внимательный просмотр кодов для макросов во многом упрощает
изучение приёмов программирования на
VBA.
Напомним, что
Excel обладает собственными объектами, такими, как книга,
листы, ячейки, области, поэтому, при написании программы приходится
использовать их имена, а так же менять им свойства, поэтому, легче всего
написать простейший макрос, а затем коды перенести в программу, которая и
называется пользовательской функцией. Любое приложение, которое создаётся на
VBA, программируется по заданному алгоритму. Разработке
алгоритма предшествует постановка задачи. Очень часто задачу ставят в общем
виде, когда указывают цель, а затем разделяют (декомпозируют) её на отдельные
элементы, состоящие из одного или нескольких модулей. Связывание модулей
осуществляется с помощью элементов управления и событиями, которые они
вызывают.

                Начало работы пользователя
осуществляется с открытия новой или уже существующей книги
Excel. Для Excel 2003 при
обращении к макросам необходимо щёлкнуть по строке ,
после чего будет открыто окно редактора
Visual Basic, в этом
окне существует строка меню, пиктограммы, которые отражают наиболее часто
используемые команды меню, окно для отображения объектов
Excel (слева),
рабочее поле для просмотра кодов или элементов формы. На рис 47 отображено
открытая книга
Excel и текстовый редактор Code.

Рис. 47. Книга Excel и редактор Visual Basic для создания модуля

                В данном разделе будет
рассмотрена практическая задача, которая требует ввода данных, их
преобразования, проведение сложных вычислений, отображение результатов в
табличном виде и в форме диаграммы. Цель рассмотрения примера – ознакомиться с
встроенными функциями, организации работы с массивами, передачи данных на
другие листы, создание диалоговых окон и правила работы с условными
операторами.

Постановка задачи

         Необходимо
создать приложение на
Excel, которое позволяет
обрабатывать анкеты, полученные от экспертов, в которых эксперты оценивали
проекты (факторы, объекты) с помощью баллов. Конечной целью обработки данных
является получение консолидированного мнения совокупности экспертов по
распределению порядковых мест, оцениваемых проектов. Исследователь должен
получить аналитическую оценку согласованности мнений экспертов, чтобы принять
гипотезу о достоверности полученных результатов. В основу работы с бальными
оценками закладывается метод ранжирования объектов (проектов). Предположим, что
сбор мнений экспертов осуществляется в виде анкет, в которых просят установить
приоритеты среди проектов, причём, чем лучше (весомее, важнее) проект, тем балл
эксперт устанавливает более высокий. Интерфейс пользователя (того, кто
обрабатывает содержимое анкет) должен позволять вводить по строкам оценки
экспертов, получать окончательные результаты. Внешний вид приложения в
Excel для обработки материалов из анкет экспертов методом
ранжирования (данные введены) представлен на рис 48.

Рис. 48. Интерфейс пользователя для обработки
материалов из анкет экспертов методом ранжирования

Проект приложения на Excel

         На
рис 48 показано, что книга
Excel
содержит три листа. На первом листе
расположены командные кнопки и поле для ввода данных из анкет экспертов. Кнопка
 позволяет пользователю удалять ранее введённые
данные с листа под наименованием «данные». Эта кнопка создана с помощью панели
инструментов
Visual Basic, в
дальнейшем будет сказано,  почему так
поступили. Кнопка  предназначена для запуска  процедуры подготовки работы с данными, что
требует вывода на экран дополнительных диалоговых окон. Кнопка создана с
помощью панели инструментов Формы,
что позволяет процедуру обработки данных сохранить в виде отдельного модуля
(хотя, модуль можно создать и по-другому). Кнопка  позволяет запускать процедуру преобразования
бальных оценок экспертов в ранги (порядковые места), вычислять коэффициент согласованности
мнений экспертов, который в статистике называют коэффициентом конкордации
W [4], а так же построить диаграмму распределения мест
ранжируемых проектов (объектов). Отражение результатов работы модуля после
вызова процедуры «Расчёт» осуществляется на листах книги с наименованиями
«результаты» и «график». Кнопка создана с помощью панели инструментов Формы.

                Посмотрите,
как работает приложение.

Описание процедур
обработки событий для приложения – «ранжирование объектов»

Процедура – Очистить
поле

         Прежде,
чем заполнить таблицу, пользователь удаляет с листа под наименованием «данные»,
те числа, которые могут остаться после предыдущей работы. Для этого достаточно
нажать на кнопку «Очистить поле». В качестве примера, как можно использовать
макрос в программе обработки события при нажатии на кнопку, поступим следующим
образом. Создадим макрос с помощью макрорекордера, который назовём «Очистить».
Запустим макрорекордер, выделим на листе с именем «данные» область
A7:P48, выполним
команду
Delete (Удалить), откроем лист с именем «результаты», выделим
область
A2:R26, всё удалим,
откроем лист с именем «график», удалим содержимое из области
A2:R2, откроем лист
с именем «данные», установим указатель курсора в ячейку
A7, остановим запись макрорекордера. В итоге,
программный код для удаления данных от предыдущих расчётов будет сформирован
(самим ничего писать не пришлось), который показан на рис 49. Может быть, это
не самый лучший вариант создания кода, т.к., на всякий случай, выделяли
избыточное количество ячеек на листах, но результат достигнут – получен макрос
(создан модуль). Тогда достаточно для кнопки  написать всего один оператор: Call Очистить, где оператор
Call (вызвать)
использует в качестве метода макрос под именем «Очистить».

Рис. 49. Программные коды макроса и процедуры
обработки события
Click при нажатии на командную кнопку с наименованием
«Очистить поле»

                Процедура по удалению данных со
всех листов книги
Excel работает автономно, это сделано специально.
Пользователь должен иметь возможность неоднократно проводить расчёты с уже
введёнными данными, расширять количество столбцов и количество строк в исходной
таблице или вносить изменения в некоторых ячейках таблицы (часто это делают,
когда задаются вопросом «что будет, если?», т.е. исследователь начинает
изменять данные и просматривать новый вариант результатов).

Процедура — Подготовка
к вводу данных

         Автор
не стремился создать универсальную программу для ввода данных на лист
Excel. Это вызвано тем обстоятельством, что основной целью
разбора, используемых приёмов при составлении программы, демонстрация правил
работы с
VBA и некоторых его возможностей. Процедура подготовки к
вводу данных представлен на рис 50.

Рис. 50. Программные коды процедуры подготовки к вводу
данных

                В разрабатываемых процедурах, будут использоваться
переменные, которые содержат данные и сведения о количестве, рассматриваемых
проектов (количество заполненных столбцов), а так же сведения о количестве
экспертов, чьи мнения необходимо учесть при выполнении расчётов (количество
строк в таблице), это целые числа. Матрица с оценками должна храниться в виде
массива. Поэтому, введены операторы
Global для описания указанных
переменных, действие которых распространяется на все процедуры.

                Ещё один приём создания объекта
в виде диалогового окна в программе на
VBA отображён программными кодами (рис 50):

 
ThisWorkbook.Sheets(«данные»).Activate

      u = InputBox(«ВВЕДИТЕ К-ВО
ПРОЕКТОВ», «ВВОД ПАРАМЕТРОВ»)

    u1 = InputBox(«ВВЕДИТЕ К-ВО
ЭКСПЕРТОВ», «ВВОД ПАРАМЕТРОВ»)

                Где, ключевое слово This указывает, что на листе с именем «данные» формируются
диалоговые окна для ввода данных.

Оператор: If u = «» Or u1 = «» Then проверяет
одновременно содержимое введённых пользователем данных в диалоговые окна, в
случае, если пользователь не заполнит одно из окон, программа даст сообщение с
помощью оператора
MsgBox. Для задания имени листа, с
которым необходимо работать, в программе требуется указать оператор
With
(совместно с), который заканчивается
оператором
End With. Внутри
этой конструкции можно вставлять любые операторы и функции, которые будут
участвовать в обработке данных на указанном листе книги. Как видите, для
каждого листа осуществляется очистка рабочего диапазона ячеек методом
Clear (очистить). Обратите внимание, что в каждом цикле (их
три) используется переменная
i, действие которой распространяется только на момент
работы оператора цикла.

Процедура
выполнения расчётов

                Для того, чтобы заменить бальные
оценки экспертов на ранги, необходимо выполнить несколько последовательных
действий, которые выделены в отдельные блоки в программе.

Первый блок (рис 51) предназначен для считывания с
листа под наименованием «данные» введённые баллы по проектам от каждого
эксперта. Вначале объявляются переменные оператором
Dim, которые участвуют в различных блоках программ.
Переменные
a() и b() являются массивами для хранения бальных оценок от
эксперта и преобразованные в дальнейшем в ранги. Обратите внимание, что
оператор .Cells(i + 6, 1) = i начинается
с точки, в котором ячейке с заданными параметрами (номер строки и номер
столбца) на листе с наименованием «данные» присваивается порядковый номер
эксперта, что отображается на листе в ячейках, начиная с ячейки
A7 и ниже. Точка перед методом Cells ставится без
указания имени книги и листа, что было назначено в операторе With Worksheets(«данные»).

Рис. 51. Программные коды для обработки строки с
введёнными баллами от одного эксперта

                Второй блок (рис 52)
предназначен для выяснения величин баллов в просматриваемой строке оценок,
которые присвоил эксперт, рассматриваемым проектам. В массиве
o3() создаём просто номера с 1 до n, где n – число
проектов, которые оценивал каждый эксперт. При нахождении максимального числа
баллов в строке (цикл просмотра строки ниже), осуществляется хранение в
переменной
f — максимального числа, 
а в переменной
j1 — порядкового
номера в строке.

Рис. 52. Выбор наибольшего балла в строке оценок

                Третий блок (рис 53)
предназначен для преобразования баллов в ранги. Преобразование бальных оценок в
ранги (порядковые места) несколько позволяет независимо от выбранной шкалы
экспертами для оценки проектов, свести все мнения экспертов к единой порядковой
шкале. Комментарии, которые находятся на рис 53, созданы для того, чтобы
просматривался алгоритм перехода от одной шкалы измерения к другой. Основой
этого алгоритма является – работа с массивами данных, поэтому для этой цели
использована конструкция оператора
For Next.

                Четвёртый блок (рис 54)
предназначен для записи рангов (порядковых мест, которые были получены после
преобразования баллов) на лист с наименованием «результаты». Обратите внимание,
что в первом блоке обработка введённых данных осуществлялась по строкам,
поэтому, в четвёртом блоке результаты передаются на лист с наименованием
«результаты» тоже по строкам. Но, необходимо было обработать все строки, для
этой цели, в начале программы был введён оператор For ij = 1 To m, действие которого заканчивается в четвёртом блоке
оператором  Next ij.

Рис. 53. Преобразование баллов в ранги

Рис. 54. Перенос оценок в виде порядковых мест на лист
с наименованием «результаты»

                Пятый блок (рис 55) предназначен
для вычисления коэффициента конкордации (
W) и для отображения результатов в виде гистограммы на
листе с наименованием «график». Коэффициент
W вычисляется по
стандартной формуле [4], который очень полезен для анализа, полученных
результатов. Статистически доказано, что значимость коэффициента конкордации
зависит от числа рассматриваемых объектов (в данном примере под объектом
понимают проекты) и количества экспертов, которые принимали участие в
оценивании объектов. Используя соответствующие таблицы [5], можно сделать заключение
о приемлемости результатов (чем величина коэффициента конкордации ближе к
единице, тем лучше). Пользователь приложения может удалить из общего массива
оценки того эксперта, которые значительно отличаются от оценок большинства
экспертов, а затем снова провести расчеты, чтобы убедиться, что согласованность
мнений экспертов стала выше.

Рис. 55. Программные коды для отображения результатов
на листе с наименованием «график»

                Наглядное представление
выполненных расчётов всегда помогает исследователю (пользователю программы)
принимать решение о том, на сколько, его удовлетворяют результаты. На листе с
наименованием «график» отображается гистограмма, которая содержит сведения о суммарных
количествах рангов по каждому, оцениваемому объекту (проекту). На рис 5
6 показан лист с наименованием «график».

Рис. 56. Результаты оценки семи проектов девятью
экспертами

                Для
того чтобы построить диаграмму, используя язык
VBA, потребуется воспользоваться методом Add Charts, указать ссылку на тот диапазон, на основе которого
строится диаграмма, задать тип диаграммы, ввести в свойства текстовые значения
наименования осей и названия диаграммы (как это делается при работе с мастером
диаграмм). Получится достаточно большое количество программных кодов. Можно всё
сделать гораздо проще, как это выполнено в данном примере. А именно, на листе с
наименованием «график» с помощью мастера построения диаграмм задан диапазон
ячеек с данными (в данном случае ограничились 15 ячейками второй строки листа,
в котором отображаются суммарные величины рангов по проектам), выбран вид
диаграммы и внесены описания осей. После заполнения данных на первом листе
приложения, диаграмма появится автоматически.

Если вы полностью ознакомились с алгоритмом проведения
расчётов коэффициента конкордации при вводе бальных оценок проектов от
нескольких экспертов, то можете
использовать приложение для собственных исследований.


Список литературы

1.       Гарнаев А.Ю. Самоучитель VBA. – 2-е изд. Перераб. И допю – СПб.: БХВ-Петербург,
2004.

2.       Джон Уокенбах. Microsoft Office Excel 2007.
Библия пользователя.: Пер. с англ. – М.:
ООО «И.Д. Вильямс», 2008.

3.       Рудикова Л.В. Microsoft Excel для студентов. –Спб.:
БХВ-Петербург, 2007.

Hosted by uCoz

Тип урока: урок закрепления новых знаний и
выработки умений.

Цель урока: закрепление пройденного
материала по созданию пользовательской формы;
вставки надписей, полей, кнопок и картинки в
пользовательскую форму; программирование кнопок
пользовательской формы; вызов пользовательской
формы на рабочий стол редактора Excel; проверка
работы пользовательской формы.

Оборудование: компьютер, проектор, экран.

Продолжительность работы: 40 минут.

Домашнее задание: 5 минут.

  1. Открыть или создать файл для работы;
  2. Перейти в редактор Visual Basic (Сервис >
    Макрос
    > редактор Visual Basic);
  3. Создать пользовательскую форму (Insert> UserForm);

(Рис.1)

  1. На панели элементов выбрать пиктограмму “Label”
    — “Надпись”;
  2. (Рис.2)

  3. В пользовательской форме нарисовать окно для
    надписи.
  4. В окне сделать надпись “Расстояние”, для
    этого:
    — щелкнуть правой кнопкой по окну “Label1” и
    выбрать команду “Properties”;
  5. — в появившемся окне свойств выбрать:

    (Рис.3)

    — свойство “Caption”, в котором вместо слова “Label1”
    написать слово “Расстояние”;
    свойство “TextAlign”, в котором поставить
    цифру 2 – выравнивание по центру.


  6. Аналогичным образом сделать еще две надписи: “Время”
    и “Скорость”.

  7. Подключить пиктограмму “TextBox”“Поле”
    и под каждой надписью нарисовать окно.
  8. (Рис.4)

  9. Подключить пиктограмму “CommandButton”“Кнопка”.

    (Рис.5)

  1. Нарисовать в пользовательской форме 2 кнопки и
    подписать их “Выход из формы” и “Расчет
    Скорости”
    с помощью свойств “Caption” и “TextAlign”.

  2. Свернуть окно редактора Visual Basic.

  3. Войти в редактор Paint и нарисовать машинку в
    верхнем левом углу рабочего листа.
  4. Сохранить данный рисунок на Рабочем столе под
    именем “Машина”.

  5. Развернуть Пользовательскую форму.
  6. Нажать пиктограмму “Image”.

  7. img7.jpg (8061 bytes)

    (Рис.6)

  8. Нарисовать окно в пользовательской форме.
  9. В появившемся окне “Properties” выбрать:
    — свойство “Picture” и щелкните по слову “None”;
    — в появившемся окне “LoadPicture” войти на
    Рабочий стол, найти
  10. свой файл “Машина” и выполнить команду “Открыть”;
    — в свойстве “PictureAlignment” поставить “0”,
    должна появиться картинка
    Вашей машины.

  11. В получившейся пользовательской форме
    запрограммируйте кнопку “CommandButton1” для
    этого:
    — два раза щелкните по кнопке “Выход из формы”;
    — написать оператор UserForm1.Hide (закрыть
    пользовательскую форму №1);

(Рис.7)

  1. Запрограммировать кнопку “CommandButton2”“Расчет
    скорости”
    для этого:
  2. — два раза щелкнуть по кнопке;
    — написать программу:
    S = Val(TextBox1) — считываем значение из окошка TextBox1

    T = Val(TextBox2) — считываем значение из окошка
    TextBox2

    V = S / T — производим вычисление скорости

    TextBox3 = Str(V) — полученное значение записываем
    в окошко TextBox3

    (Рис.8)

  3. Перейти на рабочий лист редактора Excel.

  4. Подключить панель элементов (Вид > Панели
    инструментов > Панель элементов)
    .
  5. Начертить кнопку и подписать ее “Вызов
    формы”.

  6. Запрограммировать данную кнопку, для этого:
    ? два раза щелкнуть по кнопке левой кнопкой мыши;
    ? написать фразу – UserForm1.Show (Показать
    пользовательскую форму №1)
  7. (Рис.9)

  8. На панели элементов отключить Режим
    конструктора.
  9. (Рис.10)

  10. Вызвать получившуюся форму и проверить работу
    всех кнопок.

img12.jpg (34925 bytes) 

(Рис.11)

 Домашнее задание:

Создать пользовательскую форму по заданному
образцу и проверить ее работу.

См. приложение.

Кафедра физики, математики
и информатики ПСПбГПМУ им. И.П. Павлова

Практическая работа

практикум
по программированию

на
языке
Visual Basic for Application

Санкт–Петербург

2014

Методические
указания

У
вас уже есть начальные знания о работе
с табличным процессором, и вы знакомы
с рабочей книгой, рабочим листом Excel
и умеете ими пользоваться (создавать,
удалять, переименовывать, вставлять и
т.п.). Вы знаете
относительные и абсолютные
способы
адресации ячеек рабочего листа Excel,
умеете задавать и осознанно выбирать
формат ячейки, знакомы со способами ее
оформления
(шрифт, фон, рамки). Вы уже умеете
программировать
формулы

в Excel
и пользоваться встроенными функциями.
Наконец, вы сами можете отформатировать
пользовательскую таблицу, данные в
которой были бы организованы по строкам
и столбцам, имели вполне определенный
практический смысл и требовали бы некой
обработки, в частности, вычислений.

Термином
«макрос»
обычно называют файл, хранящий
последовательность действий, заданных
пользователем системы. Каждый макрос
должен иметь собственное
имя. Макрос

это именованная последовательность
заданных пользователем команд и действий,
хранящаяся в форме программы на языке
VBA
(Visual
Basic
for
Application).
Язык программирования (Visual
Basic)
поддерживает идеологию объектно–ориентированного
программирования, является языком
визуального проектирования приложений
и языком управления событиями. Событие
распознаваемое
объектом действие
,
для которого можно запрограммировать
отклик
.1
Файл

с макросами помогает автоматизировать
типовые технологические этапы при
работе с системой. Если макрос создан,
то после его запуска хранящаяся в нем
последовательность действий (команд)
будет автоматически исполнена.

Макрос
представляет собой программу и может
быть создан автоматически в специальном
режиме работы программной среды (в том
числе и Excel) или как результат
программирования (VBA),
отредактирован, могут быть устранены
ошибки и добавлены новые возможности.
Средство
VBA
в MS
Excel
является универсальным инструментом
для быстрого и точного решения любых
пользовательских задач в MS
Excel.
Готовый файл с макросами нужно сохранить.
Для этого необходимо войти по вкладке
«Файл», команда «Сохранить как…», в
выпадающем списке выбрать «Книга Excel
с поддержкой макросов» (рисунок 1).

Рисунок
1. Сохранение файла
с макросом

При
первоначальном запуске системы вкладка
«Разработчик», в группе «Код» которой
расположены «Visual
Basic»,
«Макросы», «Безопасность макросов»,
«Запись макроса» и «Относительные
ссылки» может отсутствовать, поэтому
необходимо изменить основные параметры
работы с Excel.
Для этого выберем вкладку «Файл»,
команду «Параметры» / «Настройка ленты»

и поставить галочку для вкладки
«Разработчик»
(рисунок 2):

Рисунок
2. Добавление вкладки «Разработчик» на
ленту

В
начале работы диалоговое окно Макрос,
вызываемое пунктом
Макросы
,
может показать пустой список. Вкладка
«Разработчик» / «Код» «Безопасность
макросов» открывает
дополнительное окно,
позволяющее задавать уровень безопасности
при его использовании (рисунок 3).

Рисунок
3. Параметры макросов

Рисунок
3. Параметры макросов

При
работе с Excel,
как, и с другими программами пакета
Microsoft
Office
,
для создания
макроса легче всего использовать
автоматический режим, вызываемый по
вкладке «Разработчик», группа «Код»
команда «Запись макроса». В этом случае
применяется стандартное средство записи
MacroRecorder,
посредством которого можно записывать
последовательность действий пользователя,
которые автоматически преобразуются
в программный код на языке VBA.

При
выборе команды «Запись макроса»
открывается диалоговое окно, позволяющее
задать имя макроса и, комбинацию клавиш,
с помощью которой он может быть вызван,
выбираем пункт Начать
запись
, по
умолчанию система предлагает стандартное
имя Макрос#,
напишите собственное
имя
макроса,
отличное от стандартного. С этого момента
все Ваши действия записываются
в файл макроса. Остановить запись макроса
можно кнопкой
«Остановить

запись» дополнительно открывшейся
панели инструментов или по вкладке
«Разработчик», группа «Код», команда
«Остановить запись». Записанный макрос
может быть сохранен
в текущей рабочей книге, в
личной книге

макросов. В последнем случае он может
быть доступен в любой открытой книге.

Удалить
макрос, созданный в текущей рабочей
книге, можно кнопкой «Удалить»
диалогового окна по вкладке «Разработчик»,
группа «Код», команда «Макросы».

После
записи макроса его можно редактировать,
для этого необходимо выделить макрос
и в диалоговом окне выбрать кнопку
«Изменить», откроется окно редактора
Visual
Basic
for
Application.

Рисунок
4. Редактирование макроса

Редактор
Visual Basic вызывается
по вкладке «Разработчик», группа «Код»,
команда «Visual
Basic».

Рисунок
5. Вызов редактора
VBA

Для
быстрого запуска макроса можно создать
кнопку и присвоить ей имя макроса. Для
этого выбираем вкладку «Разработчик»,
группу «Элементы управления» и кнопку
«Вставить», появляется выпадающее меню
«Элементы управления формы». Выбрав
элемент управления «Кнопка» размещаем
его на экране (рисунок 6). Появляется
окно «Назначить макрос объекту» (рисунок
7), в котором вводим название макроса
или выбираем из списка уже имеющийся.
Осталось только переименовать вновь
созданную кнопку (выделить старое
название «Кнопка1» и написать новое).

Рисунок
6. Добавление элементов управления


Рисунок
7. Назначение макроса объекту

Стиль
ссылок в формулах в среде
VBA

В
среде VBA
существует два типа записи ссылок на
ячейки в Excel
A1 и
R1C1.
По умолчанию,
при программировании формул, используется
стиль A1,
для которого адрес каждой ячейки
представляет собой строку символов,
содержащую имя столбца и номер строки.
Использование этого стиля позволяет
организовать относительную и абсолютную
адресацию (вводится символ $) к ячейкам
таблицы. Тем не менее, иногда при
записи макросов

Excel использует
тип ссылки R1C1.
В обозначении этого типа присутствуют
первые буквы английских слов Row (строка)
и Column (колонка). Обратите внимание на
то, что, в отличие от типа A1, при
использовании типа ссылок R1C1
сначала записывается строка
,
а потом столбец.
При использовании абсолютной
адресации
после
символов R и C указывается собственно
номер строки и столбца. При использовании
относительной адресации в стиле
R1C1,
после
обозначения строки или колонки в
квадратных скобках указывается смещение
по отношению к текущей ячейке
.

  • RC
    — относительная ссылка на текущую ячейку

  • R3C2
    — то же самое, что $B$6 (абсолютная ссылка)

  • RC5
    — ссылка на ячейку из пятого столбца в
    текущей строке

  • RC[-1]
    — ссылка на ячейку из предыдущего столбца
    в текущей строке

  • RC[2]
    — ссылка на ячейку, отстоящую на два
    столбца правее в той же строке

  • R[2]C[-3]
    — ссылка на ячейку, отстоящую на две
    строки ниже и на три столбца левее от
    текущей ячейки

  • R5C[-2]
    — ссылка на ячейку из пятой строки,
    отстоящую на два столбца левее текущей
    ячейки

Для
включения стиля R1C1
необходимо перейти по вкладке «Файл»
команда «Параметры» / «Формулы» и
поставить галочку в разделе «Работа с
формулами» стиль ссылок
R1C1.

Основные
понятия языка
VBА2

Объекты
– рабочая книга, рабочий лист и его
составляющие

Примеры
объектов:

Sheet,
Worksheets
– лист Excel

Cell
– ячейка

Range
– диапазон ячеек

Application
– приложение

UserForm
– пользовательская форма

Доступ
к объекту возможен через его методы и
свойства.

Примеры:

Cells(1,
1) – ячейка А1

Cells(1,
2) — ячейка В1

Range(Cells(1,
1) , Cells(5, 3)) – диапазон
А1:С5

Методы

Над
объектом можно совершать различные
действия, которые называются методами.

Например,
ячейку можно очистить (Clear),
приложение закрыть (Quit),
пользовательскую форму показать (Show)
или скрыть (Hide).

Selection

выбирает объект или группу объектов.
Activate

активизирует выбранный объект.

Название
метода отделяется от названия объекта
точкой: объект.метод.

Примеры
использования методов:

Range(“B2:E2”).Select
– выбрать диапазон ячеек B2:E2;

Range(“C1:C5”).Clear
– очистить диапазон ячеек C1:C5;

Worksheets(“Лист1”).Activate
– активизирует Лист1;

UserForm2.Hide
– скрыть форму № 2;

UserForm5.Show
– показать форму № 5;

Application.Quit
– выйти из приложения.

Свойства

Свойствами
описываются характеристики объектов.
Например, размер и цвет шрифта, положение
формы на экране или состояние объекта
(доступность, видимость). Чтобы изменить
характеристику объекта, надо просто
изменить значение свойства, т.е. присвоить
ему определенное значение.

Объект.Свойство
= ЗначениеСвойства

Примеры:

Range(“D1”).Value
= 2005 – поместить в ячейку D1
значение 2005

Range(“A11”).Value
= “информатика” – поместить в ячейку
A11
текст «информатика»

Методы
и свойства некоторых объектов
VBA

Sheets(“Исследования”).Select
– выбрать лист Исследования

Sheets(“Исследования”).Range(“B4:B10”).Select
– выделить диапазон B4:B10
на листе Исследования

События

Событие
представляет собой действие, распознаваемое
объектом (например, щелчок мышью или
нажатие клавиши), для которого можно
запрограммировать отклик, т.е. реакцию
объекта на произошедшее событие –
выполнение программы. Такая программа
называется процедурой обработки событий
и имеет стандартное имя.

Элементы
языка
VBA

Объекты

Константы

числовые (целое, вещественное число) и
символьные (заключаются в “”)

Переменные
– данные, которые меняются в ходе
выполнения программы, задается имя и
тип. В имени нельзя использовать “.”,
“ “, “!”, “%”, “&”, “$”, “#”, “@”.
Длина имени не должна превышать 255
символов.

Основные
типы переменных, их размеры и диапазоны
принимаемых значений приведены в таблице
1.

Таблица
1. Типы переменных

Тип
данных

Размер
(байт )

Диапазон
значений

Byte
(байт)

1

от
0 до 255

Boolean
(логический)

2

True
или False

Integer
(целое число)

2

от
–32768 до 32767

Long
(длинное целое)

4

от
–2147483648 до 2147483647

Single
(число с плавающей запятой обычной
точности)

4

для
отрицательных значений
от -3,4E38
до -1,4Е-45
для
положительных значений
от 1,4-45
до
3,4E38

Double
(число с плавающей запятой двойной
точности)

8

для
отрицательных значений
от -1,79E308
до -4,94Е-342
для
положительных значений
от 4,94-324
до
1,79E308

Currency
(денежный)

8

числа
с четырьмя десятичными знаками
от
–922 337 203 685 477.5808
до
922 337 203 685 477,5807

Date
(дата и время)

8

от
1 января 100 до 31 декабря 9999 г.

String
(строковый переменной длины)

10+длина
строки

от
0 до 231

String
(строковый постоянной длины)

задается
при выполнении оператора Dim

от
1 до 216

Variant

для
чисел – 16

значения
соответствуют типу данных Boolean,
Byte,
Integer,
Long,
Currency,
Single,
Double
или Date,
определяемому автоматически

для
строк – 22+длина строки

от
0 до 231

Object

4

используется
при объявлении объектов, аналогичен
Variant

В
таблице 2 приведен пример некоторых
функций.

Объект
Application
позволяет вызвать функции при помощи
конструкций вида:

Application.Функция
(действия
над объектами)

Примеры:

Application.Sum(Sheets(“Исследования”).Range(“B2:B15”))
– суммируются значения из ячеек диапазона
B2:B15,
расположенного на листе «Исследования».

Range(«F2:F5»)
= Rnd(5)
– в диапазон от F2
до F5
записывается случайное число от 0 до 5.

Sheets(“Числа”).Cells(5,1)
= Int (Rnd() * 100) – 50.

Таблица
2. Функции

Функция

Выражение

Математические
функции

Abc(x)

Модуль
(абсолютная величина числа)

Cos(x)

Косинус

Exp(x)

Экспонента,
т.е. результата возведения основания
натурального логарифма в указанную
степень

Log(x)

Натуральный
логарифм

Sin(x)

Синус

Sqr(x)

Квадратный
корень

Rnd()

Rnd(x)

генерирует
случайное число от 0 до 1

генерирует
случайное число от 0 до х

Int()

округляет
до целого числа

Функции
времени и даты

Date

Текущая
дата

Now

Текущая
дата и время

Day

День
месяца

DateDiff

Разность
двух дат

WeekDayName

Название
дня недели

Структура
редактора
VBA

Редактор
активизируется вкладкой
«Разработчик»/»Код»/»Visual
Basic»
(рисунок 8):


Меню


Панель
инструментов

Возврат в
рабочую книгу нажатием кнопки MS
Excel

Окно проекта

Окно свойств

Окно
редактирования кода

Окно редактора
состоит из следующих компонентов:

Рисунок
8. Структура редактора
Visual
Basic

Процедуры
и модули для кода
VBA

Программа

последовательность операторов, включая
оператор комментариев (для этого вводится
(‘) или слово Rem
вместо апострофа, комментируется текст
до конца строки).

Модуль
совокупность
объявлений (описательная часть) и
процедур, хранящихся как единое целое

Процедура
– совокупность кода VBA,
рассматриваемая как единое целое, имеет
свое уникальное имя. Выполнение процедуры
является реакцией на какое-либо событие,
т.е. процедура обрабатывает событие,
ограничивается ключевыми словами Sub
….. End
Sub.

Описание
данных начинается с оператора Dim.
Тип переменных лучше указывать, так как
от типа данных зависит время выполнения
процедур и ресурсы памяти.

Пример:

Dim
A As Integer, B As Byte, C As String

Для
объявления констант и их значений
используется оператор Const.

Пример:

Const
Рост_девочки
As Byte = 11

Управляющие
структуры
VBA

Управляющие
структуры определяют последовательность
выполнения программы.


Условные
операторы

1)
If
условие
Then
выражение
– для одной строки

If
условие
Then
выражение1,
выражение2 End
If

– в
случае истинности условия выполняется
последовательность операторов

If
условие
Then
выражение1,
Else
выражение2, … End
If

– в
зависимости от условия выполняются
разные блоки операторов

If
условие
Then
выражение1,
ElseIf
условие Then
выражение2,
Else
выражение3, … End
If
определяет
вложенность конструкций

2)
Select
Case
проверяемое
выражение

Case
список
выражений1

блок
операторов1

Case
список
выражений2

блок
операторов2

Case
список
выражений3

блок
операторов3

….

Case
Else
{не
обязательный блок}

End
Select

Каждый
список выражений может содержать одно
или более значений, которые отделяются
запятыми.


Операторы
цикла


фиксированное
число повторений

1) 
For
переменная
= M1
To
M2
[Step
M3]

операторы

Next

Если
шаг не указан, то он полагается равным
1.


переменное
число повторений

2)  Do
While
условие

операторы

Loop

Цикл
с предусловием.  Все операторы
выполняются до тех пор, пока условие
будет истинным.

3) 
Do

Loop
Until
<условие>

Цикл
с постусловием. Проверяется условие
перед началом цикла и цикл выполняется
до тех пор, пока оно False.
Как только условие цикла станет равно
True,
выполнение цикла прекратится.

Макрос3()

Range(«D2»).Select

ActiveCell.FormulaR1C1
= «=(RC[-1]*10000)/RC[-2]^2»

Selection.AutoFill
Destination:=Range(«D2:D5»), Type:=xlFillDefault

Range(«D2:D5»).Select

Range(«D6»).Select

ActiveCell.FormulaR1C1
= «=AVERAGE(R[-4]C:R[-1]C)»

Range(«E2»).Select

ActiveCell.FormulaR1C1
= _

«=IF(RC[-1]<18,»»low»»,IF(AND(RC[-1]>18,RC[-1]<24),»»middle»»,»»heigh»»))»

Selection.AutoFill
Destination:=Range(«E2:E5»), Type:=xlFillDefault

Range(«E2:E5»).Select

End
Sub

Пример
1
.
Рассмотрим таблицу, показанную на
рисунке 9. В ней необходи­мо рассчитать
индекс массы тела (ИМТ) каждого пациента,
рассчитать среднее значения индекса
по всем пациентам и выставить оценку
индекса. Записывался макрос с именем
Макрос3.

Рисунок
9. Таблица с расчетом ИМТ

Рассмотрим
листинг макроса.

Первый
исполняемый оператор программы
Range(“D2”).Select
создан системой в
виде выражения, которое содержит в
терминологии VBA свойс­тво Range в сочетании
с методом Select. Обратите внимание на то,
что свойство имеет записанный в круглых
скобках аргумент в виде строки символов
и отделяется от метода точкой. В нашем
примере аргумент свойс­тва представляет
собой ссылку на ячейку в стиле A1, с
которой началось программирование
макроса.

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

Отдельно
остановимся на
заливке ячеек, диапазона ячеек
.

Цвет
фона ячейки в Microsoft
Office
Excel определяется
свойством ColorIndex
объекта Interior
этой ячейки.

Так,
заливка ячейки осуществляется командой:

Cells(4,5).interior.colorindex
= 5, где
5 – синий
цвет
или

Заливка
некоторого диапазона –

Range(“A1:D1”).interior.colorindex
= 3, где
3 – красный
цвет

Установка
цвета текста:

Cells(4,5).Font.Color
= vbBlue

Range(“A1:D1”).
Font.Color
=vbRed

Числовой
индекс цветов и константы RGB
представлены в таблице 3.

Таблица
3. Числовой индекс цвета и константы
RGB

код

цвет

константы
RGB

цвет

1

черный

vbRed

красный

2

белый

vbBlack

черный

3

красный

vbGreen

зеленый

4

зеленый

vbYellow

желтый

6

желтый

vbBlue

синий

7

малиновый

vbMagenta

фиолетовый

33–42

пастельные
тона

vbCyan

бирюзовый

9–14,
18, 21, 25, 49, 51-56

темные
тона

Если
мало стандартных цветов (56 цветов) то
используют RGB
палитру, например

Cells(3,4).Interior.Color
= RGB(160,255,30)

Понравилась статья? Поделить с друзьями:
  • Практическая работа по ms excel создание бланков
  • Практическая работа по ms excel самостоятельная работа
  • Практическая работа по ms excel простые вычисления создайте книгу
  • Практическая работа по microsoft word оформление списков
  • Практическая работа по microsoft excel 2007