Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
24
Добавлен:
05.06.2015
Размер:
135.75 Кб
Скачать

Университет машиностроения

Кафедра «Автоматика и процессы управления»

Направление подготовки «Управление в технических системах»

Дисциплина «Информационные технологии»

Методические указания к лабораторно-практической работе

Использование средств автоматизации Excel и VBA

Создание макросов и функций-процедур

Тема: Исследование возможностей автоматизации Microsoft Excel, изучение методов создания макросов с помощью макрорекордера и непосредственно в редакторе Visual Basic for Application, исследование возможностей модификации макросов и разработки пользовательских функций-процедур, рассмотрение методов создания диалоговых окон.

Задачи:

Создать макрос с использованием макрорекордера Excel;

Создать макрос с использованием редактора Visual Basic for Application;

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

Изучить способы записи чисел и строк, а также методы адресации ячеек;

Исследовать возможности языка Visual Basic для создания ветвящихся и циклических алгоритмов в макрокомандах;

Изучить возможности разработки пользовательских функций-процедур.

Изучить методы создания диалоговых окон

Оборудование и принадлежности:

Персональный компьютер с установленной операционной системой Microsoft

Windows, система управления электронными таблицами Microsoft Excel с

установленной средой Visual Basic for Applications

Ход выполнения работы:

Перед началом работы лист с базой данных, находящийся в книге Microsoft Excel "Lab2_Excel VBA_пример.xls" необходимо скопировать в файл с именем обучающегося и сохранить.

Макрокоманда (macro-command) Excel - это упорядоченная последовательность команд, объединенных в единый блок для выполнения как единой команды. Приставку макро принято переводить в данном контексте как

"расширенная". В настоящее время этот термин принято сокращать до "макрос".

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

На современном этапе развития пакета Microsoft Office, система использования макросов трансформировалась в язык программирования Визуальный Бейсик для Приложений (Visual Basic for Application). Теперь,

используя редактор кода скриптов, можно управлять выполнением макроса,

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

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

Включение режима записи макроса выполняется выбором команды Сервис -

Макросы - Начать запись. В результате этих действий на экране появится окно ввода параметров нового макроса, где можно определить его название и горячую комбинацию клавиш для быстрого вызова. Название макроса рекомендуется вводить латинскими символами и цифрами, заменяя пробелы на знаки подчеркивания. Специальные символы, знаки препинания и скобки в названии не допускаются. В качестве горячих рекомендуется использовать, в сочетании с клавишей Ctrl, клавиши верхнего символьного ряда (QWERTY), поскольку остальные задействуют встроенные комбинации Excel. Например, сочетания Ctrl + C и Ctrl + V используются для копирования и вставки фрагментов текста, а Ctrl + A - для выделения.

2

После нажатия кнопки Ок начинается запись макрокоманды. Все действия пользователя в системе Excel протоколируются и преобразуются в код на Visual Basic.

Остановка записи макроса производится командой Сервис - Макросы -

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

- Макросы - Макрос, а редактирование командой Изменить в том же окне.

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

Для этого нужно, установив курсор в ячейку H3, включить запись макроса

(например, название: Vvod_Formuly_Skidki, сочетание клавиш: Ctrl + Q) и не изменяя выделение ячеек ввести с клавиатуры формулу расчета скидки:

=ЕСЛИ(G3>7;G3*F3*0,1;0)

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

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

Важно! При работе с макрорекордером в последних версиях Microsoft Excel

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

Просмотр кода макроса можно провести выполнив команду Изменить для выбранного макроса в окне Сервис - Макросы - Макрос. После выполнения данной команды раскроется окно среды Visual Basic, в котором курсор будет установлен на подпрограмму, отвечающую за обработку макроса. В приводимом примере, подпрограмма обработки может иметь следующий вид:

Sub Vvod_Formuly_Skidki()

' Макрос записан 1.01.2006

3

' Быстрый вызов Ctrl + Q

ActiveCell.FormulaR1C1="=IF(RC[-1]>7,RC[-1]*RC[-2]*0.1,0)"

Range("H4").Select

End Sub

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

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

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

вячейки рабочих листов Excel необходимо понимать метод адресации R1C1. В

данном примере, R[x]C[y] указывают на смещение целевой ячейки относительно активной, где R (Row) – это строка, а C (Column) – столбец в адресе ячейки. При внесении формулы в данном формате в ячейку, система автоматически подставит необходимые адреса. Для сокращения записи выражение «[0]» допускается опускать.

Второе важное различие лежит в методах задания функций и записи числовых значений между средой Excel и средой Visual Basic for Application. Дело

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

Попробуем модифицировать макрос таким образом, чтобы он заполнял также ячейку итоговой стоимости проката одного автомобиля в рублях. Для этого необходимо присвоить ячейке содержащей курс доллара имя «usd» (Присвоение имени ячейке выполняется по команде Вставить – Имя – Присвоить). Мы также

4

заставим систему переключаться к следующей строке, для ожидания команды заполнения очередной пары ячеек «скидка-стоимость_проката».

Модифицируем код макроса следующим образом:

Sub Vvod_Formuly_Skidki()

'Макрос записан 1.01.2006

'Быстрый вызов Ctrl + Q

Cells(ActiveCell.Row, ActiveCell.Column).FormulaR1C1 = "=IF(RC[-1]>7,RC[-1]*RC[-2]*0.1,0)"

Cells(ActiveCell.Row, ActiveCell.Column + 1).FormulaR1C1 = "=(RC[-2]*RC[-3]-RC[-1])*usd"

Cells(ActiveCell.Row + 1, ActiveCell.Column).Select

End Sub

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

кновой строке.

Вданном макросе использована другая форма обращения к ячейкам рабочего листа Excel через массив ячеек Cells(Row,Column). Для вычисления позиции нужной ячейки используются соответствующие свойства активной ячейки. Вместо использования объекта Range().Select для выделения используется схожий метод объекта ячейки Cells().Select. Задание наименования ячейки курса доллара использовалось для избежания возни с абсолютной адресацией.

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

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

Cells(ActiveCell.Row, ActiveCell.Column + 1).FormatConditions.Delete

Cells(ActiveCell.Row, ActiveCell.Column + 1).FormatConditions.Add Type:=xlExpression, Formula1:="=RC[-1]>0" Cells(ActiveCell.Row, ActiveCell.Column + 1).FormatConditions(1).Font.ColorIndex = 4

Помимо использования макрорекордера макрос можно создать двумя

способами:

5

В окне Сервис – Макросы – Макрос ввести имя нового макроса и нажать кнопку Создать, либо выполнить команду Сервис – Макросы – Редактор Visual Basic и непосредственно перейти в окно редактора. Различия между ними заключаются в том, что в первом случае в редактор будет вставлена «обертка» подпрограммы обработки макроса Sub – End Sub .

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

Excel, для этого в новый макрос поместим следующий код:

MsgBox( “ Выделена ячейка (" + Str(ActiveCell.Row) + ", " + Str(ActiveCell.Column) + " )")

Новому макросу может быть назначена «горячая клавиша» через команду

Параметры окна Сервис – Макросы – Макрос.

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

MsgBox(). Новым здесь является также использование функции Str(),

преобразующей числовое значение в строковое.

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

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

Код макроса будет иметь следующий вид:

Dim N As Integer

Range("N16").Select

Selection.Value = ""

N = Val(InputBox("Введите номер автомобиля в списке"))

If N > 0 And N <= 23 Then

Selection.Value = Cells(2 + N, 3).Value

Else

MsgBox ("Неверный номер автомобиля")

End If

В отличие от предыдущих способов адресации в данном случае применен

объект Selection, который позволяет применять требуемое действие сразу к

6

выделенному диапазону ячеек. Использование его в данном случае необходимо,

поскольку значение заносится в объединенную ячейку, которую Excel

воспринимает как диапазон из двух ячеек.

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

здесь реализовано ветвление алгоритма обработки макроса с помощью конструкции If условие Then группа команд при истинности условия Else

группа команд при ложности условия End If.

Дополнительное задание: Доработать макрос так, чтобы заполнялась также ячейка цены автомобиля, причем в зависимости от типа валюты в прайс-листе происходило необходимое преобразование.

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

Range("N17").Select

If Cells(2+N,4) = “usd” Then

Selection. Value = "=E" + Trim(Str(2 + N)) +”*usd”

Else

If Cells(2+N,4) = “eur” Then

Selection. Value = "=E" + Trim(Str(2 + N)) +”*eur”

Else

Selection. Value = "=E" + Trim(Str(2 + N))

End If

End If

7

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

Расчет ежемесячного платежа строится исходя из месячной ставки кредита,

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

(100% + годовой процент). После этого необходимо произвести циклическое начисление месячной ставки кредита на остаток с учетом равных помесячных платежей. В случае верного подбора размера платежа остаток кредита после последней выплаты должен равняться нулю.

Для задания функции-процедуры в редакторе Visual Basic используется директива Function вместо Sub. Кроме того, необходимо помнить, что функция-

процедура не имеет права изменять никакие ячейки, а должна только выдавать какое-нибудь значение. Только в этом случае среда Excel разрешить ее вставку в ячейку.

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

Function Raschet_Kredita(Cost As Double, God_Procent As Double, Srok As Integer, Plateg As Double) As Double

Dim Mesiats_Procent As Double

Dim I As Integer

Dim Sm As Double

Mesiats_Procent = Exp(Log(1 + God_Procent) / 12) ' Корень 12

степени

Sm = Cost

For I = 1 To Srok

Sm = Sm * Mesiats_Procent - Plateg

Next I

Raschet_Kredita = Sm

End Function

8

В данном примере использована еще одна возможность управления алгоритмом выполнения команд в макросе, а именно, оператор For … Next для циклического исполнения. Команды, заключенные в такие циклические скобки,

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

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

для расчета ежемесячного платежа не составляет труда.

Дополнительное задание: Доработать функцию-процедуру таким образом,

чтобы она учитывала сумму предварительного платежа при расчете остатка и определить ежемесячный платеж по второму типу кредитной программы.

Дополнительное задание: Разработать макрос для автоматического подбора ежемесячных платежей по обеим кредитным программам при выборе другого автомобиля.

Примечание: В Visual Basic запуск процедуры подбора параметра осуществляется следующим образом

Range("N21").GoalSeek Goal:=0, ChangingCell:=Range("N18")

9

Соседние файлы в папке IT_2013_S2_P1_VBA
  • #
  • #
    05.06.201541.98 Кб27IT_Excel_EA_В01.xls
  • #
    05.06.201523.55 Кб25IT_Excel_EA_В02.xls
  • #
    05.06.201523.55 Кб25IT_Excel_EA_В03.xls
  • #
    05.06.201523.55 Кб24IT_Excel_EA_В04.xls
  • #
    05.06.201523.55 Кб26IT_Excel_EA_В05.xls