èСоздать рабочую книгу из двух листов. Содержимое и названия листов должно соответствовать заданию.
Этап №2. Создание программного модуля.
Цель этапа. Так как макрос представляет собой программу, которая размещается в программном модуле. Поэтому начать создание макроса нужно с создания программного модуля.
è Создать в рабочей книге программный модуль. Для этого выполнить команду меню СЕРВИС\Макрос\Макросы. Открывается окно Макрос (рис.1).
è В появившемся окне задать имя макроса Kvit (без пробелов), в строке Находится в выбирать Эта книга и нажать кнопку Создать (рис.1).
è Открывается редакторVisual Basic for Applications. Вид экрана – рис.2
Рис.1. Окно создания нового макроса.
Рис.2. Вид экрана редактора Visual Basic for Applications
Этап №3. Создание внешнего вида окна.
Цель этапа. Макрос предназначен для формирования квитанции. Выбор фамилии плательщика должен происходить из диалогового окна со списком фамилий и кнопкой ОК. Данный этап начинает формирование внешнего вида диалогового окна.
è Командой ВСТАВКА \ User Form создать заготовку пустого окна (рис.3). На экране появляются:
- окно проектировщика форм«Книга 1 – User Form 1(User Form)», которое представляет собой заготовку будущего окна диалога и предназначено для задания его внешнего вида;
- панель элементов «Элементы управления», содержащая кнопки для добавления в окно стандартных элементов интерфейса Windows.
Рис. 3. Вид окна с пустой формой диалогового окна макроса.
Правила работы. Поместить элемент на форму можно, нажав кнопку на панели элементов, а затем щелкнуть левой кнопкой мыши в нужном месте окна. Будем использовать компоненты: метка кнопка А), поле со списком (кнопка на панели элементов управления), строка ввода (кнопка ab| на панели элементов управления), кнопки (кнопка ).
èРазместить компоненты в окне проектировщика форм согласно рис. 4 сначала левый столбец, затем правый.
Особенность. При помещении компонента на форму название помещается в поле с выпадающим списком окна со свойствами объекта.
Рис.4. Внешний вид окна макроса
Этап №4. Задание свойств компонентов окна.
Цель этапа. Ввести осмысленные подписи к компонентам окна. Данный этап завершает формирование внешнего вида диалогового окна.
èЗадать текст метки 1 (Label1). Для этого активизировать метку - щелкнуть левой кнопкой мыши в окне макроса на метке Label1. Метка выделится по периметру квадратиками.
è Найти в списке окна Properties строку с надписью Caption. Это свойство компонента Label1, отвечающее за текст, выведенный в метке.
è Щелкнуть левой кнопкой мыши в правой части строки, набрать текст «Фамилия» и нажать Enter. Набранный текст появится в окне.
è По аналоги задать надписи для остальных меток (рис.5). Если размеры метки будут недостаточны для вывода введенного текста, то изменить размер, взявшись левой кнопкой мыши за квадратики, расположенный по периметру метки.
è Задать название кнопки. Для этого активизировать кнопку, найти в списке свойств строку Caption и ввести текст «Формирование квитанции» (рис.5).
è Задать заголовок формы: активизировать форму, в строке свойства Caption задать «Формирование квитанции». Текст поместиться в заголовок окна. Внешний вид окна сформирован.
è Задать вывод окна при запуске макроса из меню Сервис\Макросы. Для этого в окне с заголовком Книга1 – Module1 (Code) в процедуру
Sub Kvit()
End Sub
добавить строку UserForm1.Show
è Выйти из редактора VBА – команда File\Close and Return to Microsoft Excel.
è Сохранить книгу в своей папке под именем Макрос.
è Проверить работу макроса: выполнить команду Сервис\Макрос\Макросы. В окне «Макрос» в строке «Имя макроса» выбрать Kvit и нажать кнопку «Выполнить». На экране должно появиться окно макроса.
èОкно пока не выполняет никаких действий. Поэтому закрыть окно и открыть редактор VBA.
Этап №5. Программирование работы окна
Цель этапа. Задать реакцию на действия пользователя в окне. Этап посвящен программированию процедур, отвечающих за реакцию макроса на действия пользователя.
Внимание. Анализ задачи показывает, что в макросе должны выполняться такие действия:
1. При работе с окном макроса выпадающий список «Фамилия» должен быть заполнен данными из 1 столбца таблицы «Квартиросъемщики». Формирование этого списка должно выполняться перед появлением окна на экране. При появлении окна генерируется событие Activate, связанное с формой. Обработчик данного события может выполнить все подготовительные действия по формированию окончательного вида окна. Итак, первое обрабатываемое макросом событие - это Activate, связанное с окном.
2. При выборе из списка фамилии нужно, чтобы остальные поля автоматически заполнялись данными об этом человеке, взятыми из таблицы на листе «Исходные данные». При выборе строки из списка возникает событие Change. Обработчик данного события может выполнить все действия, изменяющие содержимое компонентов. Итак, второе обрабатываемое макросом событие - это Change, связанное со списком.
3. Нажатие на кнопку «Формирование квитанции» должно приводить к заполнению шаблона квитанции на листе «Квитанция» данными, содержащимися в окне. Нажатие на кнопке вызывает событие Click, относящееся к кнопке. Если сделать обработчик данного события, то можно выполнять все действия, изменяющие содержимое шаблона на листе «Квитанция». Итак, третье обрабатываемое макросом событие - это Change, связанное с кнопкой.
è Вывести на экран окно редактора кода. Для этого выполнить двойной щелчок левой кнопкой мыши на пустом месте формы. Открывается окно редактора кода (рис.6).
è Создать обработчик события Activate. Для этого в поле выбора компонента (см. рис.6) выбрать UserForm. В окне генерируется заготовка процедуры обработки щелчка кнопки в окне.
è Выбрать в списке возможных событий (см.рис.6) Activate. При этом в редакторе кода генерируется такой шаблон:
Private Sub UserForm_Activate()
End Sub
èВводим между этими строкам код метода
Dim i As Integer
i = 0
While Worksheets("Исходные данные").Cells(3 + i, 1) <> ""
ComboBox1.AddItem Worksheets("Исходные данные").Cells(3 + i, 1)
i = i + 1
Wend
Внимание!. Пояснения к фрагменту:
ComboBox1 – имя переменной, отвечающей за объект «Поле ввода со списком».
AddItem – метод, добавляющий в конец списка выбора указанное далее строковое значение. Нумерация строк в списке выбора начинается с нуля. Доступ к номеру можно получить с помощью свойства ListIndex.
Worksheets – коллекция, содержащая объекты для доступа к листам активной рабочей книги. В скобках указывается порядковый номер листа (нумерация с 1) или его название в двойных кавычках.
Cells – обращение к листу рабочей книги как к двумерной таблице. В скобках на 1-м месте указан порядковый номер строки, на втором порядковый номер столбца. Можно использовать константы, переменные и т.п.
Порядок работы фрагмента: В первой строке объявляется переменная i целого типа, необходимая для работы цикла. В следующей строке этой переменной присваивается значение 0. Затем организуется цикл, который выполняет проверку содержимого ячейки, расположенной на пересечении строки 3+i и столбца 1. Если i=0, это ячейка А3 листа «исходные данные» (см. задание), если i=1, это А4, i=2 – это А5 и т.д.). В случае, когда ячейка не пуста, ее содержимое добавляется в качестве очередной строки в список выбора. Затем увеличивается значение переменной i и проверяется следующая ячейка. При попадании на пустую ячейку (в примере А7) работа цикла завершается.
è Добавить обработчик события выбора строки из списка. Для этого перейти щелчком мыши в окно проектировщика форм «Книга 1 – User Form 1(User Form)».
èВыполнить двойной щелчок на списке с подписью «Фамилия». В редакторе кода появится заготовка для процедуры обработки выбора строки из списка:
Private Sub ComboBox1_Change()
End Sub
è Заполнить ее кодом:
i = ComboBox1.ListIndex
TextBox1.Value = Worksheets("Исходные данные").Cells(3 + i, 2)
TextBox4.Value = Worksheets("Исходные данные").Cells(3 + i, 3)
TextBox2.Value = Worksheets("Исходные данные").Cells(3 + i, 4)
TextBox3.Value = Worksheets("Исходные данные").Cells(3 + i, 6)
TextBox5.Value = Worksheets("Исходные данные").Cells(3 + i, 5)
ot = TextBox3.Value * Worksheets("Исходные данные").Cells(10, 1)
TextBox6.Value = ot
gaz =TextBox5.Value * Worksheets("Исходные данные").Cells(10, 2)
TextBox1.Value – обращение к содержимому TextBox1 как к числовому значению. Если используем другое свойство (TextBox1.Text), то обращаемся к тому же самому как к текстовому значению. В данном случае происходит задание содержимого строки ввода TextBox1.
Cells – обращение к листу рабочей книги как к матрице. В скобках на 1-м месте - № строки, на втором - № столбца. Можно использовать константы, переменные и т.п. Например, следующий код заполняет вычисленными значениями ячейки 3-го столбца строк с 13 по 20 при щелчке на форме:
Range() – метод, позволяющий обратится к заданному в скобках диапазону ячеек листа рабочей книги. Можно указывать адрес или название диапазона.
è Добавить кнопку для закрытия окна. Для этого поместить в окно проектировщика форм «Книга 1 – User Form 1(User Form)»еще одну кнопку (см.рис.7).
Рис.7. Внешний вид окна макроса.
èЗадать ей заголовок «Закрыть»
èСгенерировать обработчик события щелчка на кнопке, для чего выполнить двойной щелчок на кнопке «Закрыть». Появится заготовка процедуры:
Private Sub CommandButton2_Click()
End Sub
è В заготовку поместить строку:
Unload Me
Внимание!. Пояснения к фрагменту:
Unload – оператор, удаляющий объект из памяти. За оператором следует название объекта, который удаляется. Можно указать имя, например UserForm1, или ссылку на форму, которой принадлежит метод – Me. Данная строка производит удаление текущего окно из памяти. При этом оно закрывается на экране и удаляется из памяти.
èДля того, чтобы можно было запускать макрос из меню Сервис\Макросы, в окне редактора с заголовком, например, Книга1 – Module1 (Code) в процедуру
Sub Kvit()
End Sub
добавить строку
UserForm1.Show.
Внимание!. Пояснения к фрагменту:
UserForm1.Show – обращение к процедуре Show, которая при запуске макроса выводит на экран созданное окно.
Этап №6. Проверка работы макроса Kvit
Цель этапа. Проверить правильность реакции макроса на действия пользователя в окне.
èЗапустить макрос на выполнение. Для этого из главного меню редактора VBA выполнить команду Run или нажать клавишу F5. При появлении окна Macros нажать в нем кнопку Run. Макрос начинает работу. Вид экрана представлен на рис.8.
Рис.8. Вид окна Excel с запущенным на выполнение макросом Kvit.
èПроверить работу макроса. Для этого выбрать в списке фамилия строку «Сидоров Н.В.». Остальные элементы окна должны заполниться информацией, соответствующей данному квартиросъемщику (рис.9).
Рис.9. Вид окна макроса Kvit с данными о квартиросъемщике Сидорове Н.В.
èСформировать квитанцию для Сидорова Н.В. Для чего нажать в окне макроса кнопку «Формирование квитанции».
è Закрыть макрос нажатием на кнопку «Закрыть». Происходит возврат в окно редактора VBA.
èВыйти из редактора VBА, используя команду File, Close and Return to Microsoft Excel (или нажать комбинацию Alt+Q) ой.
èПерейти на лист «Квитанция». Его внешний вид должен соответствовать рис.10.
Рис.9. Вид листа «Квитанция» после работы макроса с фамилией Сидоров Н.В.
è Сохранить книгу в своей папке под именем «Квитанция».
è Проверить работу макроса, запустив его из рабочей книги. Для этого выполнить команду Сервис\Макрос\Макросы. В окне Макрос в строке «Находится в» выбрать «Эта книга», в строке имя выбрать Kvit и нажать «Выполнить».
è Выбрать другую фамилию, сформировать квитанцию, закрыть макрос и проверить правильность заполнения квитанции.