Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Приемы программирования в среде Visual Basic for Application. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
• получить на число
X=Application.InputBox("Укажите ячейку", , , , , , , 1)
• получаем ссылку на указанную ячейку
Set X=Application.InputBox("Укажите ячейку", , , , ,
, , 8)
в данном случае мы создаем объект и присваиваем ему данные объекта, с которым мы хотим работать.
Отметим, что в справочной системе подпрограмма
МsgВох
на­зывается функцией, т.к. ее можно использовать в арифметических выражениях. При этом в программу возвращается значение типа
Integer
тель. Приведем пример использования
, соответствующее кнопке, на которой кликнул пользова-
В программу
Pythagoras
этого:
введем расчет площади прямоуголь-
ного треугольника. Для этого седьмой оператор заменим тремя опе­раторами:
Sub Pythagoras() Dim a As Single Dim b As Single Dim c As Single Dim s As String 1: s = _ InputBox ("Введите длину 1 катета и нажмите ОК") 2: a = Val(s) 3: s = _ InputBox ("Введите длину 2 катета и нажмите OK") 4: b = Val(s) 5: c = Sqr(a^2 + b^2) 6: s = Str(c) Dim Ret As Integer Ret = MsgBox(s, vbYesNo, "Paccчитать площадь?") If Ret = vbYes Then MsgBox Str(a * b / 2) End Sub
При выполнении полученной программы изменится содержимое
окна с результатом расчета длины гипотенузы (рис.15). При клике на кнопке Уеs появится окно с результатом расчета площади треуголь­ника (рис.16).
В ряде заданий вам надо будет получить набор произвольных дан­ных, с которыми надо выполнить некоторые операции (найти макси­мальное или минимальное число, отсортировать, найти первое положи­тельное или отрицательное число и т.п.). В этом случае можно пользо-
- 61 -
ваться генератор случайных чисел с помощью функции «Rnd()».
Рис.15. Первое окно с результатом
расчета
Рис.16. Второе окно с результатом
расчета
Функция возвращает случайное число в интервале от 0 до 1 с рав­номерным распределением. Для получения различных наборов можно строить различные комбинации вычислений с использованием этой функции:
Public Sub InputDates() Dim X() As Integer N = InputBox("Введите размер массива(от 2 до 10") ReDim X(N) For i = 0 To N X(i) = Rnd() * 50 Next i End Sub
Здесь мы генерируем N целых чисел в интервале от 1 до 50 в ви­де одномерного массива Для генерации, например, чисел в интервале от -25 до 25 надо в строку
X(i) = Rnd() * 50
дописать
- 25
Чтобы получить вещественные числа достаточно просто описать мас­сив как
Double
.
Можно записать общую формулу для генерации чисел в заданном диапазоне, которая будет иметь вид – начало набора, dX – размер диапазона и
X=Xнач +СлЧисло*dX
СлЧисло
– случайное число.
, где
Хнач
Приемы работы в среде программирования VBA
Теперь разберем пошагово весь процесс создания своей про­граммы, начиная от простой функции пользователя до создания своей оконной формы пользователя.
Запуск среды VBA
Находясь в любом пакете MS Office, можно вызвать оболочку VBA комбинацией клавиш Alt+F11 или по следующей команде Сер-
висМакросРедактор Visual Basic. Открывается окно похожее
.
на рис.1 в зависимости от настроек системы. Переходы между оболоч-
- 62 -
кой программирования и самим пакетом происходят через указанную выше комбинацию горячих клавиш Alt+F11.
Создание функции пользователя
Создадим свою функцию, например, нам нужно часто использо­вать какое-либо достаточно большое уравнение. Назовем функцию «My_fun» и в дальнейшем будем использовать в наших расчетах. В качестве простейшего примера создадим полином следующего вида:
2
XAXAAY ⋅+⋅+=
210
В первом варианте примем, что наши коэффициенты А0, А1 и А2 известны и имеют соответственно следующие значения 21, 5 и 0.5. Нам надо задать значение Х и получить значение Y. Начинаем созда­вать свою первую программу.
Сначала вставляем в наш проект новый модуль, который собст­венно и содержит программный код. Для этого выполняем команду
InsertModule, здесь нельзя ошибаться и выбрать не Module, а Class Module, который создаст специальный модуль нового объекта,
что нам пока не надо. В рабочей области экрана появляется чистая область модуля, куда теперь можно вносить программный код.
Теперь можно вводить про­грамму, хотя гораздо проще пользо­ваться мастерами создания необхо­димых процедур. Для этого выпол­няем команду InsertProcedure, которая была до создания модуля не активна. Появляется окно, показан­ное на рис.17. В нем заполняем не­обходимую информацию. Вносим имя процедуры (Name) – это может быть любое имя, которое начинает­ся с русской или латинской буквы и может содержать также цифры и
Рис.17. Вставка процедуры
знак подчеркивания, если хотите разделить слова в имени.
Обязательно помните, что начинать имя процедуры с циф-
ры и ставить пробелы внутри него недопустимо!!!
Во-вторых, выбираем тип процедуры – функция (Function), так
как мы хотим иметь ее в качестве функции пользователя на листах данной книги. Затем выбираем область видимости процедуры
- 63 -
(Scope) как общую (Public). Если мы укажем ее как внутреннюю (Private), то она не будет видна на листах книги. Данное свойство
надо использовать только для внутренних процедур, о которых разго­вор будет далее. Теперь можно нажимать кнопку Ok, и в окне модуля получаем заготовку самой процедуры в виде следующего текста:
Public Function My_fun()
End Function
Начинаем писать программный код. Так как функция имеет входной параметр Х, то мы должны внести его имя в строку после имени процедуры внутри скобок. В пустую строку записываем код вычисления значения Y, используя правило – надо присвоить к пе- ременной с именем процедуры (без скобок, которые имеются в за­головке) возвращаемое значение. Самый простой вариант записи будет выглядеть так
Public Function My_fun(X) My_fun = 21 + 5 * Х + 0.5 * Х ^ 2 End Function
Если необходимо выполнить более сложные вычисления, то пе­ред присвоением результата имени функции могут располагаться и другие операторы. Это может выглядеть так
Y = 21 + 5 * Х + 0.5 * Х ^ 2 My_fun = Y
Теперь надо сохра­нить книгу Excel и пе­рейти на ее рабочий лист и попробовать ис­пользовать созданную функцию. Для этого на листе книги Excel в ячейку А1 введем лю­бое число, например,
10
,
и в ячейку В1 запишем следующую формулу
«=My_fun(A1)
». Для этого вводим знак =, ко­торый автоматически вызывает мастер созда­ния функции (рис.18.),
Рис.18. Мастер построения функций
- 64 -
выбираем категорию функции – Определенные пользователем, и в списке видим имя созданной нами функции, выбираем ее и нажима­ем Ok. Далее открывается окно мастера этой функции (рис.19), где в поле Х вводим ссылку на ячейку А1. Внизу окна сразу же выводится результат вычисления.
Теперь попробуем сделать данную функцию более гибкой в сво­ем использовании. Сделаем коэффициенты уравнения параметриче­скими, то есть они будут передаваться как аргументы функции.
Рис.19. Окно ввода аргументов в функцию пользователя
Внесем следующие изменения в программный код функции: до­бавим за именем функции в скобках перед параметром Х новые имена в список формальных параметров и пропишем их в самой функции. Для этого заменим наши константы 21, 5 и
0.5
в вычисляемом урав-
нении на соответствующие параметры А0, А1, А2.
Чтобы сохранять все созданные процедуры, будем перед ис­правлениями копировать весь код и изменять имя процедуры, добав­ляя к нему очередной номер. В приведенном ниже примере имя функции изменено на
Public Function My_fun1(A0, A1, A2, X) My_fun1 = A0 + A1 ^ X + A2 * X ^ 2 End Function
My_fun1
.
Чтобы использовать эту функцию на листе книги, необходимо подготовить исходные данные на листе. Для этого введем в ячейки А1–А3 имена коэффициентов, чтобы наглядно видеть в какие ячейки вводить исходную информацию, и сразу же иметь готовую таблицу для ее использования в отчетах. В ячейки В1–В3 введем значения самих коэффициентов уравнения.
- 65 -
Попробуем подготовить таблицу значений нашей функции. Для этого сделаем заготовку таблицы, введя заголовки столбцов X и Y в ячейки D1 и E1. Значение параметра Х введем в столбец D. В ячейки D2 и D3 введем
выделив ячейки маркер заполнения (это черный в правом нижнем углу выделенных ячеек), растянем эти данные до числа 22 (таблица справа). Теперь введем саму функцию в ячейку Е2, используя мастер функций, и увидим окно с аргументами функции (рис.20). Оно изменилось, в нем появились
10
и
10
и
12
соответственно,
12
и схватив за
A0 A1 A2
21
5
0,5
X 10 12
14 16 18 20 22
дополнительные параметры – коэффициенты уравнения. Введем необ­ходимые данные, причем значения коэффициентов вводим как ссылки на ячейки с абсолютной адресацией, используя клавишу F4.
После ввода функции, растягиваем эту формулу с помощью
маркера заполнения на группу ячеек Е3 – Е8.
Попробуем создать следующую функцию
My_fun2
, которая бу­дет вычислять полином любого порядка. Ее аргументами должны быть – степень полинома (N), массив коэффициентов Ai из N+1 эле­ментов и значение параметра Х. Программа показана ниже. Рекомен­дуем создать заготовку процедуры
My_fun2
, как было показано вы­ше, и в заголовок ввести формальные параметры, а внутри заготовки записать сам код
Рис.20. Окно ввода аргументов в функцию пользователя My_fun1
- 66 -
Public Function My_fun2(N, Ai, X) Dim Aa() ReDim Aa(N) i = 0 For Each Cl In Ai.Cells Aa(i) = Cl.Value i = i + 1 Next Y = Aa(0) For i = 1 To N Y = Y + Aa(i) * X ^ i Next i My_fun2 = Y End Function
Разберем процедуру более подробно. Первая строка после заго­ловка описывает динамический массив. Во второй строке массив пе­реопределяется под необходимый размер, здесь мы указываем его размер N. Далее заполняем его значениями коэффициентов, перебирая все ячейки, которые переданы в качестве аргумента Ai в процедуру, и присваивая их значения элементам массива коэффициентов Аа. Под­готавливаем переменную Y для суммирования членов полинома, при­равнивания ее нулевому коэффициенту полинома. Потом реализуем алгоритм вычисления полинома любого порядка суммированием ко­эффициентов, умноженных на значение Х в степени равной индексу коэффициента. Введем третью функцию на наш лист. Окно ввода ар­гументов функции показано на рис.21.
- 67 -
Рис.21. Окно ввода аргументов в функцию пользователя My_fun2
10
12
Список коэффициентов уравнения вводится как группа ячеек, которые так же задаются абсолютным адресом.
Попробуем свести все результаты вычислений в одну таблицу для оценки точности их результата. Как видим, результат вычисления во всех случаях остается одинаковым (см. таблицу ниже).
A0 21 A1 5 A2 0,5
14 16 18 20 22
X My_fun My_fun1 My_fun2
121 153
189 229 273 321 373
121 153
189 229 273 321 373
121 153
189 229 273 321 373
Создание макрокоманды (макроса)
Макрокоманды – это укрупненные наборы стандартных команд, которые могут выполняться одновременно друг за другом. Макроко­манды оформляются как подпрограммы (Sub) и могут вызываться по команде Excel СервисМакросы… или комбинацией горячих кла- виш Alt+F8. По ней открывается окно со списком всех, имеющихся в проекте макросов, из которых надо выбрать нужный и нажать кнопку
Выполнить.
При создании макроса можно существенно упростить процесс программирования, воспользовавшись режимом записи макроса по команде Excel Сервис Начать Запись….
Попробуем создать макрос, который будет форматировать фрагмент листа, как показано на таблицах выше: наружная рамка бу­дет нарисована двойной линией, а внутренние линии – одинарными линиями.
Каждая отдельная программа или группа связанных между со­бой программ могут располагаться в своем модуле, их число в проек­те не ограничено, но названия программ должны быть разными. По­этому для нашей новой процедуры лучше создать новый модуль, но мы этого пока делать не будем, а познакомимся с записью макроса.
Начнем запись нашего макроса по команде Excel Сервис
Начать Запись…. Появляется окно, в котором должны быть запол-
- 68 -
нены исходные данные по записываемому макросу (рис.22). Здесь можно задать имя макроса, сочетание горячих клавиш, которыми он будет вызываться, и внести небольшой комментарий к подпрограмме.
После нажатия кнопки Ok по-
является панель инструментов с эле­ментами управления записью, и на­чинается запись. Теперь все коман­ды, которые мы выполняем, записы­ваются в кодах VBA. Выполним следующие действия на новом листе книги:
• выделим несколько ячеек в виде
Рис.22. Окно параметров макроса
прямоугольника, например, пря­моугольник из 3 столбцов и 5 строк;
• вызовем команду форматирования ячеек с помощью горячих клавиш
Ctrl+1 или по команде ФорматЯчейки. В открывшемся окне выбираем закладку Границы (рис.23);
Рис.23. Оформление границ ячеек
• на ней выбираем тип линии «двойная» и щелкаем по кнопке
Внешние на панели Все;
- 69 -
• потом выбираем тип линии «одинарная» и щелкаем по кнопке
Внутренние на панели Все;
• заканчиваем запись макроса, нажимая кнопку Остановить за-
пись.
Переходим в VBA и смотрим изменения в нашем проекте. Там появился новый модуль2, и в нем подпрограмма
Макрос1
, которая
имеет следующее содержание
Sub Макрос1() ' Макрос1 Макрос ' Макрос записан 02.09.2007 (Ves) ' Range("B3:D7").Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous
- 70 -
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]