к лабораторным работам по дисциплине "Информатика" (Часть 2). VB МЕТОДИЧЕСКИЕ УКАЗАНИЯ

advertisement
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
к лабораторным работам по дисциплине "Информатика" (Часть 2).
Лабораторная работа №17. VBA. Элементы управления.
Лабораторная работа №18.VBA. Линейная программа (оператор присваивания)
Лабораторная работа №19.VBA. Условный оператор.
Лабораторная работа №20.VBA. Оператор выбора.
Лабораторная работа №21.VBA. Оператор цикла с параметром (For…Next).
Лабораторная работа №22.VBA. Циклы с предусловием и постусловием.
Лабораторная работа №23.VBA. Пользовательские функции.
Лабораторная работа №24.VBA. Пользовательские процедуры.
ЛАБОРАТОРНАЯ РАБОТА №17
VBA. ЭЛЕМЕНТЫ УПРАВЛЕНИЯ
Цель работы – ознакомиться с интерфейсом VBA, некоторыми его объектами, их свойствами и методами.
VBA относится к языкам объектно- ориентированного программирования (ООП). ООП
можно описать как методику анализа, проектирования и написания приложений с помощью
объектов. Объект – комбинация кода и данных , которая может рассматриваться как единое
целое, например элемент управления, форма и компонент приложения. Каждый объект определяется по принадлежности к классу. Все визуальные объекты , такие как рабочий лист (Worksheet), диапазон (Range), диаграмма (Chart), форма (UserForm), являются объектами.
Доступ к данному языку программирования можно осуществлять практически из любого приложения Windows. Мы будем работать вместе с Microsoft Excel, который будет являться
основным приложением для проекта VBA.
Редактор VBA активизируется командой Сервис, Макрос, Редактор Visual
Basic. Возвратиться из редактора VBA в рабочую книгу можно нажатием кнопки Вид Microsoft
Excel. Интерфейс VBA состоит из следующих основных компонентов: окно проекта, окно
свойств, окно редактирования кода, окна форм, меню и панели инструментов.
Окно проекта
Окно проекта в редакторе VBA активизируется выбором команды Вид, окно проекта или
нажатием кнопки Окно проекта
В окне проекта представлена иерархическая структура файлов форм и модулей текущего проекта
В проекте автоматически создается модуль для каждого рабочего листа и для
всей книги. Кроме того, модули создаются для каждой пользовательской формы макросов и
классов. По своему предназначению модули делятся на два типа- модули объектов и стандартные. К стандартным модулям относятся те, которые содержат макросы. Такие модули добавляются в проект командой Вставка Модуль. К модулям объектов относятся модули, связанные с рабочей книгой, рабочими листами, формами, и модули класса.
Формы создаются командой Вставка, UserForm, а модули класса - командой Вставка, Модуль класса. По мере создания добавления и удаления файлов из проекта эти изменения отображаются в окне проекта. Отметим, что удаление файла из окна проекта производится выбором
значка файла с последующим выполнением команды Файл, Удалить.
В окне проекта выводится проект всех открытых рабочих книг. Это позволяет легко копировать
формы и коды из одного проекта в другой, что убыстряет процесс создания новых приложений.
Для создания диалоговых окон, разрабатываемых приложений в VBA, используются формы.
Редактор форм является одним из основных инструментов визуального программирования.
Форма в проект добавляется с помощью команды Вставка, Форма (Insert, Form) или нажатием
кнопки Вставить UserForm
В результате на экран выводится незаполненная форма с панелью инструментов Панель элементов (рис. 1).
Рисунок 1
Используя панель инструментов Панель элементов из незаполненной формы, можно сконструировать любое требуемое для приложения диалоговое окно. Размещение нового управляющего элемента в форме осуществляется следующей последовательностью действий:
1. Щелкните значок того элемента, который вы собираетесь разместить в форме.
2. Поместите указатель мыши на то место, где будет располагаться управляющий элемент.
3. Нажмите левую кнопку мыши и, не отпуская ее, растяните появившийся прямоугольник до
требуемых размеров.
4. Отпустите кнопку мыши. Элемент управления на нужном место создан.
Размеры формы и расположенных на ней элементов управления можно изменять. Технология
изменения размеров стандартная для Windows: выделить изменяемый элемент, разместить указатель мыши на одном из размерных маркеров и протащить его при нажатой левой кнопки мыши так, чтобы объект принял требуемые размеры. Окно редактирования форм поддерживает
операции буфера обмена. Таким образом, можно копировать, вырезать и вставлять элементы
управления, расположенные на поверхности формы.
Любой управляющий элемент, который вы разместили на форме, обладает рядом свойств
Окно свойств
В окне свойств перечисляются основные установки свойств выбранной формы или элемента
управления. Используя это окно, можно просматривать свойства и изменять их установки. Для
просмотра свойств выбранного объекта надо либо щелкнуть кнопку Окно свойств , либо выбрать команду Вид, Окно свойств .
Окно свойств состоит из двух составных частей: верхней и рабочей. В верхней части окна
свойств располагается раскрывающийся список, из которого можно выбрать любой элемент
управления текущей формы или саму форму. Рабочая часть состоит из двух вкладок: По алфавиту (Alphabetic) и По категориям (Categorized), отображающие набор свойств в алфавитном
порядке или по категориям. В обоих вкладках свойство Name (имя элемента управления) будет
первым. Изменяются значения свойств одним из следующих способов:
 Вводом с клавиатуры значения свойства в соответствующее поле.
 Значения большинства свойств можно выбрать из раскрывающегося списка. Раскрывающийся список активизируется щелчком в соответствующем поле окна свойств.
ЗАДАНИЕ К ВЫПОЛНЕНИЮ
1. Расположите на форме следующие элементы:
- Label1;
- TextBox1;
- CommandButton1.
2. Активизируйте Label1, в окне свойств найдите свойство Caption и измените Label1 на название вашего факультета.
3. Те же действия произведите с CommandButton1, изменяя Caption на - "ок".
4. Активизируйте TextBox1 и измените свойство Text, набрав абравиатуру своей группы.
5. С помощью элемента Выбор объекта выделите все элементы на форме. В окне свойств хорошо видно какие свойства одинаковы для всех элементов. Изменяя свойства Font (полужирный, курсив, размер шрифта15), BackColor (светлая тень для кнопки), Visible(False),
проследите все изменения элементов управления на форме.
6. Осуществить запуск программы с помощью кнопки Запуск на панели инсрументов или меню Запуск/ Запуск программы.
7. Вернуться в режим конструктора VBA для этого нажмите крестик на форме.
8. Выделите опять все объекты и поменяйте только свойство Visible (True) и снова произведите запуск программы .
9. Самостоятельно изменяйте другие свойства элементов данной формы и пронаблюдайте их
изменения.
ЛАБОРАТОРНАЯ РАБОТА N 18
VBA. ЛИНЕЙНАЯ ПРОГРАММА
Программа (код программы) записывается в окне кода.
Окно кода используется при написании любой программы VBA, будь это код макроса, запуск которого осуществляется при нажатии кнопки в созданной пользователем форме, или
подпрограмма.
Под строкой заголовка окна расположены два списка. В первом списке выводятся все объекты
модуля, а во втором – список процедур, связанных с выбранным объектом.
Код программы вводится непосредственно в окно кода, так же как текст в любом текстовом редакторе.
Код программы может быть связан с формой -UserForm-(программа пишется для соответствующей формы) так и не связан с ней (пример программ на Паскале). В последнем случае
программу пишут в окне модуля.
Для того, чтобы получить окно модуля необходимо выполнить следующие действия:
Вставка  Модуль
Чаще в VBA имеют дело с формой (UserForm). Чтобы получить окно формы необходимо
произвести такие действия:
Вставка  UserForm
Если программа пишется под форму, то ее код будет включать ет ряд маленьких подпрограмм. Для каждого события, возникающего в форме необходимо написать процедуру (последовательность совместно выполняемых инструкций, имеющая имя) обработки.
В проекте VBA часто требуется создать собственную форму. Например, может понадобиться задать значения параметров перед выполнением некоторой операции.
В VBA, формы можно создать самостоятельно. Форма - это тоже самое, что и любое
диалоговое окно. Панель элементов позволяет разместить ряд элементов управления в форме.
Инструменты панели элементов
Допускается настройка панели элементов путем добавления к ней
страниц или элементов управления с помощью команды Дополнительные элементы... из меню Сервис.
При добавлении страницы в нее автоматически вставляется инструмент Выбор объектов.
Стандартные элементы управления панели элементов:
Выбор объектов
Это единственный инструмент на панели элементов, не соментов управления. Он служит для изменения размеров и по-
здающий никаких элеложения элементов формы.
Надпись
Позволяет отобразить в форме неизменяемый текст, например подпись к рисунку.
Поле
Содержит вводимый и изменяемый пользователем текст.
Поле со списком
Вставляет объект, являющийся сочетанием списка и поля. Пользователь может либо
выбрать нужное значение из списка, либо ввести его в поле.
Список
Вставляет список выбираемых пользователем элементов. Допускается прокручивание
списка, если не все его элементы видны одновременно.
Флажок
Создает ячейку, которая может быть помечена пользователем, как имеющая значение истина или ложь, а также использующуюся для предоставления выбора нескольких вариантов.
Переключатель
Используется для предоставления выбора одного варианта из многих.
Выключатель
Создает кнопку, имеющую два состояния: включено и выключено.
Группа
Позволяет установить графическую или функциональную группировку элементов
управления. Для создания группы следует сначала создать ее рамку, а затем внутри нее
создать необходимые элементы.
Кнопка
Создает кнопку, при нажатии которой выполняется команда.
Набор вкладок
Позволяет создать несколько станиц в одной и той же области окна или окна диалога.
MultiPage
Служит для представления нескольких экранов информации в виде единого набора.
Полоса прокрутки
Создает графический инструмент для быстрого перемещения по длинным спискам
элементов или по большим документам, отображающий текущее положение.
SpinButton
Прокручивающий элемент управления используется совместно с другими элементами
для увеличения или уменьшения числовых значений. Допускается его использование
для выбора объекта из диапазона значений или из списка элементов.
Рисунок
Отображает в форме точечный рисунок, значок или метафайл.
После размещения элементов управления на форме необходимо связать объект на форме с кодом.
В VBA очень просто связать объект с кодом. Для выполнения данной операции:
1. Дважды щелкните по элементу управления в форме. Появляется окно модуля для выбранного объекта. Выберите событие для которого требуется создать процедуру обработки, в списке, расположенном в верхнем правом углу окна модуля. Введите текст процедуры.
2. Вызвать контекстное меню необходимого объекта правой клавишей мыши и нажать поле
Программа.
Решение любой задачи имеет три части:
1. Ввод данных
2. Обработка данных
3. Вывод результата
Под вводом данных понимается описание всех переменных, констант и массивов, используемых в программе, а также код, обеспечивающий присвоение этим переменным вводимых
данных.
Под так называемой обработкой данных понимается код, состоящий из математических выражений, которые приводят к получению результата.
Вывод результата – это код программы, который позволяет отобразить полученный результат в необходимом виде: на экране (лист excel, форма), на принтере и т.д.
Сохранение программы
1) Если программу сохраняется первый раз или вас устраивает уже существующее имя, то
сохранять можно как в VBA, так и в Excel;
2) Если вас не устраивает уже существующее имя, то сохранять необходимо таким образом: выйти в Excel, выбрать пункт меню Файл, а в нем пункт - Сохранить как.
Решим задачу: найдем сумму а + в = с
Порядок выполнения работы:
1. Выполнить команду СЕРВИС /МАКРОС/РЕДАКТОР VBA
2. Выполнить команду ВСТАВКА/USER FORM
3. Поместить на форму элементы, требуемые для решения задачи, с панели элементов, и
расположить их нужным образом.
TextBox1, TextBox2, TextBox3 сооветственно
Label1, Label2, Label3
соответственно
CommndButton1
CheckBox1
4. Изменить свойства объектов на форме c помощью окна свойств.
Свойство
Label1.Caption
Label2.Caption
Label3.Caption
СоmmandButton1
CheckBox1.Caption
Для всех объектов свойство
.BackColor
Для Label1, Label2 ,Label3
Свойство
Font
Значение
A
В
С
Результат
Очистка окон
По своему вкусу выбрать цвет
Из палитры цветов
В диалоговом окне “Шрифт”, которое появится после щелчка по
Кнопке с изображением трех маленьких точек, расположенной
напротив свойства Font в окне
свойств, выбрать размер 16
5. Написать программный код. Для этого рекомендуется выполнить двойной щелчок по кнопке результат и перейти в окно программы, где набрать текст процедуры обработки события Click() для кнопки и для флажка(CheckBox1):
Private Sub CheckBox1_Click()
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox3.Visible = False
TextBox1.SetFocus
CheckBox1.Value = False
End Sub
Private Sub CommandButton1_Click()
Dim a As Integer
Dim b As Integer
Dim c As Integer
a = CInt(TextBox1.Text)
b = CInt(TextBox2.Text)
c=a+b
MsgBox "результат смотри в TextBox3"
TextBox3.Visible = True
TextBox3.Text = c
End Sub
Пояснения к программе:
1) Dim а As Integer
Эта инструкция описывает переменные как Integer — целые числа от -32768 и до
32767. При попытке присвоить а число, выходящее за пределы этого диапазона, возникает ошибка. При присваивании а дробного числа, выполняется округление.
Инструкция Dim - Описывает переменные и выделяет для них память.
2) CInt - функция преобразования типов данных (преобразовывает выражение в
скобках к типу Integer).
Синтаксис CInt(выражение)
3) c=a+b
Оператор присваивания ( = )-вычисляется значение выражения, стоящего справа от
знака присваивания, и присваивается переменной, стоящей слева от знака присваивания.
4) MsgBox "результат смотри в TextBox3"
Появляется на экране окно сообщений MsgBox, в котором отображается сообщение, записанное в кавычках, и выполнение программы останавливается до тех пор
пока не будет нажата кнопка "OK".
5) TextBox3.Text = c
Результат выполнения программы (с) выводится на форму в TextBox3
6) TextBox1.Text = "", TextBox2.Text = "", TextBox3.Text = ""
Производится очистка полей TextBox1, TextBox2, TextBox3.
7) TextBox1.SetFocus
Устанавливается фокус (курсор) в TextBox1.
8) CheckBox1.Value = False
Исчезает галочка у флажка CheckBox1.
Блок-схема к программе
Начало
Ввод а,b
c=a+b
Вывод с
Конец
ЗАДАНИЯДЛЯВЫПОЛНЕНИЯ
1.
2.
3.
4.
5.
6.
f(x,y¸z) = (x^2-y^2)/(1+z+x^2).
2.f(x,y,z) = (x+y+z)/(x^2+y^2+z^2).
f(x,y)=x./(1+y)+y/(1+x)+1/(x+y).
f(x,y,z)=(x+y+z)/(x*y*z).
f(a,b,c,x)=a*x^2+b*x+c.
Вычисления процентного отношения двух чисел(сколько процентов составляет величина
первого от величины второго).
7. Вычисления дискриминанта квадратного уравнения.
8. f(x,y)=(x+y)(x^2+y^2)(x^3+y^3).
9. f(x,y,z)=(x*y*z)/(x+y^2+z^3).
10. f(x,y,z)=x/(y+z)+y/(x+z)+z/(x+y).
11. f(x,y,z)=(x+1)/y/z+sin(z)/y/x+1n(y)/x/z.
12. f(x,y,z)=x^3+y^4+z^5.
13. f(x,y,z)=x*y/z+y*z/x+z*x/y.
14. f(x,y,z)=(x^3+1)/(y+z^2)
15. f(x,y)=(x^2+y^2)/(5*x*y)
16. f(x,y)=3*(x+y)/x*(x+y)
Лабораторная работа N19
VBA. УСЛОВНЫЙ ОПЕРАТОР
Цель работы: научиться разрабатывать алгоритмы и программы разветвляющейся структуры с
условным оператором IF . Познакомиться с некоторыми объектами VBA и с их свойствами
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:
1.В схемах алгоритмов выбор условия обозначается с помощью символа,
от которого отходит ветвление для указания дальнейших действий в зависимости от выбора
“ДА” или “НЕТ”.Выбор хода алгоритма , как правило ,зависит от значения переменной или
выражения, состояния объекта. Например,
А< 10
НЕТ
…
ДА
….
2.В программном коде, чтобы реализовать ветвление применяется условный оператор IF THEN
Условный оператор позволяет выбирать и выполнять действия в зависимости от истинности некоторого условия. Имеется два варианта синтаксиса: В первом случае он имеет вид:
IF <условие> Then [операторы 1] [Else [операторы 2]]
Во втором случае оператор расположен на нескольких строках:
IF <условие> Then
[операторы]
[ElseIf <условие – n> Then
[операторы-n ]…
[Else]
[ИначеОператоры]]
End If
Здесь условие обязательно в обоих вариантах. Оно может быть числовым или строковым выражением со значениями TRUE или FALSE. Операторы 1 и операторы 2 это последовательности из одного или нескольких разделенных двоеточием операторов. По крайней мере
одна из этих последовательностей должна быть непустой. Если условие истинно (TRUE), выполняется последовательность «операторы 1», если ложно, “операторы 2”.
Пример записи оператора:
‘Условный оператор в виде одной строки:
IF A>10 Then A=A+1: B=B+A: C=C+B ELSE C=A*B: A=C+2
‘тот же условный оператор в виде блока:
IF A>10 Then
A=A+1 : B=B+A : C=C+B
ELSE
C=A*B: A=C+2
End If
ПРИМЕРЫИСПОЛЬЗОВАНИЯОПЕРАТОРАУСЛОВИЯ
Пример1.
Если точка М(x1,y1) лежит:
 выше прямой y=kx+b, то выдать сообщение “Точка М лежит выше прямой”;
 ниже прямой, то выдать сообщение “Точка М лежит ниже прямой”;
 на прямой, то выдать сообщение “Точка М лежит на прямой”.
Решение задачи.
1 этап. Продумать задачу и уяснить, что будет входными данными, что выходными и есть ли
все необходимое для решения задачи.
2 этап. Нарисовать на бумаге интерфейс приложения, т.е. как будет выглядеть экран при решении задачи на компьютере.
Рис.Интерфейс приложения
3 этап. Определить ход решения задачи и составить алгоритм программы. В нашей задаче, чтобы определить положение точки относительно прямой, нужно подставить координату точки X1
в уравнение прямой и сравнить полученное значение Y c координатой точки Y1. Если значение
Y=Y1, точка лежит на прямой; если полученное значение Y >Y1, точка –ниже прямой, и
,наконец, если Y<Y1, точка – выше прямой.
СХЕМА АЛГОРИТМА ПРОГРАММЫ (См. ниже)
4 этап. Загрузить редактор VBA и разработать приложение.
НАЧАЛО
X1,Y1,k ,b
НЕТ
НЕТ
Точка М
лежит выше
прямой
Y=Y1
Y>Y1
Точка М
лежит на
прямой
Точка М
лежит ниже
прямой
Конец
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
4. Выполнить команду СЕРВИС /МАКРОС/РЕДАКТОР VBA
5. Выполнить команду ВСТАВКА/USER FORM
6. Поместить на форму элементы с панели элементов и расположить их нужным образом. Требуемые элементы:
4 элемента Label (текст)
4 элемента TextBox (поле ввода)
2 элемента CommandButton(кнопка)
1 элемент CheckBox(флажок)
.
Элемент для создания неизменяемого
текста на форме
Элемент для
создания
кнопки
Элемент для
создания
Поля ввода
данных
Элемент для создания
Флажка( имеет состояние вкл-выкл)
User Form1
Label1
label3
TextBox1
TextBox3
CommandButton1
TextBox2
Label2
label4
TextBox4
CommandButton2
4.Изменить свойства объектов на форме c помощью окна свойств следующим образом
Свойство
Label1.Caption
Label2.Caption
Label3.Caption
Label4.Caption
UserForm1.Caption
TextBox1.Text
TextBox2.Text
TextBox3.Text
TextBox1.Text
СоmmandButton1
СоmmandButton2
CheckBox1.Caption
Для всех объектов свойство
.BackColor
Для Label1, Label2 ,Label3
Label4, TextBox1, TextBox2,
TextBox3, TextBox4 свойство
.Font
Значение
Точка M(
)
Прямая y =
X+
Принадлежность точки прямой
X1
Y1
K
B
СТАРТ
ВЫХОД
Очистка полей ввода
По своему вкусу выбрать цвет
Из палитры цветов
В диалоговом окне “Шрифт”, которое
появится после щелчка по Кнопке с
изображением трех маленьких точек,
расположенной напротив свойства
Font в окне свойств, выбрать размер
16
Рекомендуется сопоставить рисунки “Интерфес приложения” и “Окно формы, чтобы
сделать вывод о назначении использованных свойств объектов”.
5 этап. Написать программный код. Для этого рекомендуется выполнить двойной
щелчок по кнопке СТАРТ и перейти в окно программы, где набрать текст процедуры обработки
события Click() для кнопки:
Private Sub CommandButton1_Click()
Dim x1, y1, k, b As Integer
x1 = CInt(TextBox1.Text)
y1 = CInt(TextBox2.Text)
k = CInt(TextBox3.Text)
b = CInt(TextBox4.Text)
y = k * x1 + b
If y = y1 Then
MsgBox "Точка лежит на прямой"
ElseIf y > y1 Then
MsgBox "Точка лежит ниже прямой"
Else
MsgBox "Точка лежит выше прямой"
End If
CheckBox1.Value = False
End Sub
В этой процедуре условный оператор If встречается дважды:
в первом случае – однострочный, во втором- в виде блочной структуры, завершающейся обязательно End If.
Аналогичным образом создаем процедуру для кнопки ВЫХОД:
Private Sub CommandButton2_Click()
Unload UserForm1
End Sub
И для объкта Флажок:
Private Sub CheckBox1_Click()
CheckBox1.Value = True
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox1.SetFocus
CheckBox1.Value = False
End Sub
Пример2.
Ввести Х, вычислить F по формуле:
F=
X/2, если Х>0
(X+1)/2, если Х<0
Рис. Интерфейс приложения
Код программы:
Private Sub CommandButton1_Click()
Dim x, F As Single
x = TextBox1.Value
If x = 0 Then MsgBox "Функция не определена", vbCritical, _
"Расчет функции"
If x > 0 Then F = x / 2 Else F = (x + 1) / 2
TextBox2.Value = F
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Выполнения самостоятельного задания.
1.Выбрать для решения одну из задач
2.Нарисовать интерфейс приложения.
3.Разработать схему алгоритма.
4. В редакторе VBA разработать приложение.
5.Выполнить приложение и подготовить отчет.
Содержание отчета.
Условие задачи
Интерфейс приложения
Схема алгоритма
Программный код
Использованные операторы и функции
1.
2.
3.
4.
5.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Что такое разветвляющаяся структура алгоритма?
2.Какой символ используется в схемах алгоритмов, чтобы показать выбор условия?
3.С помощью какого оператора можно организовать ветвление в программе? Написать
cинтаксис этого оператора для однострочной формы записи
4.Чем отличается блочная форма записи условного оператора от однострочной? Написать
синтаксис условного оператора в блочной форме или привести пример его использования.
6.
Назвать известные вам элементы ActiveX, используемые при разработке приложений VBA. Какие элементы и какие свойства этих элементов были использованы в вашей программе?
ЗАДАНИЯ К ВЫПОЛНЕНИЮ:
I
1.Вычислить значение функции:
_
0, если х=0,
f(x) =
квадрат х, если х <>0.
2.Вычислить значение функции:
_
sin(x), если х>0,
f(x) = 0, если х = 0,
сos(x), если х< 0.
3.Ввести три целых числа и определить, сумма каких двух является наибольшей.
4. Вычислить значение функции:
sin(x), если х>0,
f
=
0, если х< = 0,
5. Вычислить значение функции:
tg(x), если х=0,
_
f
=
tg(x)/2, если х< = 0,
6. Вычислить значение функции:
_
√x, если х=0,
f
=
tg(x)/2, если х< = 0
II
1.Ввести число Х и определить, делится ли оно:
1) на 2,
2) на3,
3) на 5.
4) На 8
2. Ввести число Х и определить, является ли оно четным.
3. Ввести число N и определить делится ли оно без остатка на число M.
2 часть. Программирование с использованием объектов EXCEL.
Разрабатывать приложения в редакторе VBA можно и с использованием объктов приложений Office(объктов EXCEL,WORD и др.) Рассмотрим разработку приложения примера2 с использованием объектов EXCEL. Будем использовать объекты:
 WORKSHEETS() –для обозначения листа EXCEL
 RANGE() – для обозначения диапазона ячеек или одной ячейки
 свойство .Value для обращения к значению ячейки.
Т.е., если мы хотим записать в ячейку значение F программным способом, нужно написать в
программе так:
Worksheets().Range().Value = F, где в скобках указать имя или номер листа EXCEL и адрес
ячейки. Например, чтобы :
Присвоить ячейке С1
Нужно написать
На листе “лист1” значение Worksheets(“лист1”).Range(“C1”).Value = F
переменной F
Изменить значение в ячейке
A1 на листе “лист1”
WorkSheets(“лист1”).Range(“A1”).Value=3
Установить формулу для Range(“B1”).Formula = “= - 5 + A1”
ячейки B1 на активном листе
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
1.
2.
3.
4.
5.
6.
7.
8.
9.
В Ячейку А1 ввести текст « Исходные данные»
В ячейку А2 ввести текст «Х=»
В ячейку В2 ввести значение Х.
В ячейку C1 ввести текст «результат при х>0»
В ячейку D1 ввести текст « результат при х<0»
Выполнить команду СЕРВИС /МАКРОС/РЕДАКТОР VBA
Выполнить команду ВСТАВКА/МОДУЛЬ
Ввести имя модуля SUB LL()
Набрать текст программы:
Sub LL ()
X=Worksheets(1).Range(“B2”).Value
IF Х>0 Then
F=X/2
Worksheets(1).Range(“C2”).Value = F
Else
F=(X+1)/2
Worksheets(1).Range(“D2”).Value = F
End If
End Sub
10. Выполнить программу и подготовить отчет. Содержание отчета указано в первой части работы
11.Решить одну из задач самостоятельно.
Контрольные вопросы.
1.Какие объекты Еxcel вы знаете?
2.Как обратиться к ячейке на рабочем листе из программы?
3.Какая форма записи условного оператора была использована в вашей программе?
Лабораторная работа №20
VBA. ОПЕРАТОР ВЫБОРА.
Цель: Познакомиться с инструкцией With и Select Case. И закрепить полученные знания на
практике.
Как известно, многие задачи в математике можно разрешить различными способами. В программировании также путь к решению задачи можно найти по-разному. Например, когда в
условии задачи часто используется постановка вопроса начиная с если, то в коде программы мы
реализуем оператор условия If...Then...Else ., причем ограничения на вложенность этого оператора нет. Если таковых вложенных условий два, три и даже пять, то это не сильно смущает программиста, т.к. программа вполне наглядна и "читаема". Но что делать, когда таких условий десять, пятнадцать? В этом случае для облегчения чтения программы вместо многократно вложенных инструкций If...Then...Else иногда предпочтительнее использовать инструкцию Select
Case. В то время как If...Then...Else для каждой инструкции ElseIf оценивает разные выражения, инструкция Select Case оценивает выражение только один раз, в начале управляющей
структуры.
Select Case выполняет одну из нескольких групп инструкций в зависимости от значения выражения.
Синтаксис: Select Case <выражение>
[Case <списокВыражений-n>
[инструкции-n]] ...
[Case Else
[инструкции_else]]
End Select
Синтаксис инструкции Select Case содержит следующие элементы:
<выражение> - oбязательный. Любое числовое выражение или строковое выражение.
<списокВыражений-n> - oбязательный при наличии предложения Case. Список с разделителями, состоящий из одной или нескольких форм следующего вида:
- выражение,
- выражение To выражение,
- Is операторСравнения выражение.
Ключевое слово To задает диапазон значений. При использовании ключевого слова To перед
ним должно находиться меньшее значение. Ключевое слово Is с операторами сравнения (кроме
Is и Like) задает диапазон значений. Если ключевое слово Is не указано, оно вставляется по
умолчанию.
<инструкции-n> - Необязательный. Одна или несколько инструкций, выполняемых в том случае, если выражение совпадает с любым компонентом списка <списокВыражений-n>.
<инструкции_else >- Необязательный. Одна или несколько инструкций, выполняемых в том
случае, если выражение не совпадает не совпадает ни с одним из предложений Case.
Если выражение совпадает с любым выражением из спискаВыражений в предложении
Case, выполняются все инструкции, следующие за данным предложением Case до следующего
предложения Case, или, для последнего предложения, до инструкции End Select. Затем управление передается инструкции, следующей за End Select. Если выражение совпадает с выражениями из списка в нескольких предложениях Case, выполняется только первый подходящий
набор инструкций.
Предложение Case Else задает список инструкции_else, которые будут выполнены, если не обнаружено ни одно совпадение выражения и компонента списокВыражений ни в одном
из остальных предложений Case. Хотя данное предложение не является обязательным, рекомендуется помещать предложение Case Else в блок Select Case, чтобы предусмотреть неожи-
данные значения выражения. Если ни в одном предложении Case списокВыражений не содержит компонента, отвечающего аргументу выражение, и отсутствует инструкция Case Else,
выполнение продолжается с инструкции, следующей за инструкцией End Select.
В каждом предложении Case допускается использование нескольких выражений или диапазонов. Например допустима следующая строка:
Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber
Примечание. Следует отличать оператор сравнения Is от ключевого слова Is, используемого в
инструкции Select Case.
Имеется также возможность задать диапазоны или несколько выражений для строковых
значений. В следующем примере предложение Case выполняется для строк, которые точно
совпадают со строкой "все", для строк, лежащих в алфавитном порядке между "орехи" и "яблоки", и для строк со значением, равных текущему значению переменной TestItem:
Case "все", "орехи" To "яблоки", TestItem
Допускаются вложенные инструкции Select Case. Каждой вложенной инструкции Select
Case должна соответствовать инструкция End Select.
Пр.: по введенному числу определить день недели
Select Case x
Case 1
MsgBox ("Пон-ник")
Case 2
MsgBox ("Вторник")
Case 3
MsgBox ("Среда")
Case 4
MsgBox ("Четверг")
Case 5
MsgBox ("Пятница")
Case 6
MsgBox ("Суббота")
Case 7
MsgBox ("Воскресенье")
Case Else
MsgBox ("Такого дня не существует")
End Select
Очень часто, работая с UserForms в VBA с различными объектами, возникает необходимость изменить непосредственно в коде программы не одно и не два, а целый ряд свойств
одного и того же объекта в силу каких либо обстоятельств или просто по требованию заказчика
(будущего пользователя). В этом случае многие начинающие программисты, изменяя свойства
объекта, указывают и его полное имя, что отнимает драгоценное время и место в коде. Например:
Label1.Height = 2000
Label1.Width = 2000
Label1.Caption = "Объект Label1"
Label1.Visible = True
Label1.Enabled =True
Во избежании этого и существует инструкция Whith…End With . Whith…End With - выполняет последовательность инструкций над одиночным объектом или определяемым пользователем
типом данных.
Синтаксис
With <объект>
[инструкции]
End With
Синтаксис инструкции With содержит следующие элементы:
ЭЛЕМЕНТ
ОПИСАНИЕ
объект - Обязательный. Имя объекта или определяемого пользователем типа.
инструкции - Необязательный. Одна или несколько инструкций, выполняемых над объектом.
Инструкция With позволяет выполнить последовательность инструкций над указанным объектом, не повторяя задание имени объекта. Например, если имеется несколько свойств , которые
необходимо изменить для одиночного объекта, то удобнее поместить инструкции присвоения
свойств внутрь управляющей структуры With, указав ссылку на объект один раз, вместо того,
чтобы ссылаться на объект при каждом присвоении его свойств. Следующий пример демонстрирует использование инструкции With для присвоения значений нескольким свойствам одного объекта.
WITHLABEL1
.Height = 2000
.Width = 2000
.Caption = "Объект Label1"
.Visible = True
.Enabled =True
End With
Примечание. После входа в блок With значение аргумента объект изменить невозможно. В
результате, невозможно использование одной инструкции With для воздействия на различные
объекты.
Допускается создание вложенных конструкций With внутри другого. Однако, поскольку ссылки на объекты внешних блоков With перекрываются во внутренних блоках, необходимо во
внутренних блоках With задавать полные ссылки на любой компонент объекта из внешнего
блока With.
Внимание! Нельзя выполнять переходы внутрь или из блоков With. Если не выполнены инструкции With или End With, возможно возникновение ошибок или непредсказуемое поведение объектов.
Пример
В данном примере инструкция With используется для выполнения набора инструкций над одним объектом. Объект MyObject и его свойства используются исключительно в иллюстративных целях.
With MyObject
.Height = 100
' Эквивалентно MyObject.Height = 100.
.Caption = "Привет" ' Эквивалентно MyObject.Caption = "Привет".
With .Font
.Color = Red
' Эквивалентно MyObject.Font.Color = Red.
.Bold = True
' Эквивалентно MyObject.Font.Bold = True.
End With
ENDWITH
Задания для выполнения
Результат выводить на форму в поле, при этом размерами его управлять программно в зависимости от результата.
1. По введенному числу определить пору года: 1 - зима и т.д.
2.
3.
4.
5.
6.
7.
8.
9.
По введенному числу определить месяц зимы: 1 - декабрь, ...
По введенному числу определить месяц весны: 1 - март, ...
По введенному числу определить месяц лета: 1 - июнь, ...
По введенному числу определить месяц осени: 1 - сентябрь, ...
По введенному числу определить день недели: 1 - понедельник, ...
По введенному числу определить областной город Беларусии: 1 - Брест, ...
По введенному числу определить государственный ВУЗ Могилева.
По введенному числу озвучить оценку:"5" - отлично, ...
Контрольные вопросы.
1. Каков принцип работы инструкции Select Case, особенности применения.
2. Когда и как рекомендуется использовать инструкцию With…End With .
Лабораторная работа№21
VBA. ЦИКЛ С ПАРАМЕТРОМ (For…Next)
КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ.
1. Цикл For.
Оператор цикла For позволяет повторять группу операторов заданное число раз. Синтаксис:
For счётчик_цикла =начало TO конец [step шаг]
Тело цикла
Next [счётчик_цикла]
Здесь счётчик_цикла—это числовая переменная. В начале выполнения цикла она
принимает значение, задаваемое числовым выражением начало. Числовое выражение конец—- задает заключительное выражение счётчика цикла. Числовое выражение шаг не обязательно и по умолчанию=1. Тело цикла— это последовательность операторов которая будет
выполнена заданное число раз. Если шаг положителен, цикл завершится, когда впервые выполнится условие:
счетчик_цикла>конец
Если шаг цикла отрицателен, условие его завершения:
счетчик_цикла<конец
Это условие проверяется перед началом выполнения цикла, а затем—после каждого
прибавления шага к счётчику цикла в операторе Next. Если оно выполнено, управление передается на оператор, следующий за Next, нет—выполняются операторы из тела цикла. Завершить цикл For…Next можно и с помощью оператора Exit For. Такие операторы могут быть
расположены в тех местах тела цикла, где требуется из него выйти не дожидаясь выполнения
условия завершения.
ПРИМЕР ИСПОЛЬЗОВАНИЯ ОПЕРАТОРА:
УСЛОВИЕ:
Вычислить значение функции:
, где n=1,2,…,5
n
Y= lnX/2
1
n
СХЕМА АЛГОРИТМА ПРОГРММЫ
начало
НАЧАЛО
Блок начала программы
N=1,5
х
у=у+lnx/2^i
Y
Ввод данных в цикле
Вычислительный
процесс
Вывод
результата
вычислений
конец
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
1. Заполнить диапазон ячеек А1:А5 значениями Х.
2. Текст программы:
Sub mm ()
N=5 : Y=0
For i=1 to n
X=Worksheets(1).Cells(i,1)
Y=Y+log(x)/2^i
Next i
Worksheets(1).Range (“A6”).Value = ”результат”
Worksheets(1).Range (“A7”).Value = Y
End Sub
2.Массивы.
a) Описание массивов
Dim <имя массива>(<начальное значение индекса> To <конечное значение индекса>) As
<тип элементов массива>
Пр: Dim A(1 To 10) As Integer - массив состоит из 10 элементов, тип каждого элемента - Integer.
б) Обращение к элементу массива
Обращение к элементу массива осуществляется следующим образом: указывается имя
массива, а затем в круглых скобках указывается номер элемнта в массиве.
Пр: A(1)=5 - первому элементу массива А присваивается значение 5
А(17)=А(1) - 17-ому элементу массива А присваивается значение первого элемента массива А.
в) Ввод массивов
Массивы можно вводить как с листа Excel, так и испрользуя встроенную функцию InputBox.
Пр: вводятся массивы А,В,С из 15 элементов:
For i=1 To 15
' Ввод массива A с листа Excel, используя свойство Range (элементы вводятся из столбца
А, строки изменяютя с 1 по 15.
A(i)=Worksheets(1).Range("A" & i).Value
' Ввод массива B с листа Excel, используя свойство Cells (строки изменяются с 1 по 15,
столбец 2 (столбец B)
B(i)=Worksheets(1).Cells(i,2)
' Ввод массива C через функциюInputBox
C(i)=InputBox("Введите " & i & "ый элемент массива")
Next i
г) Решение задачи из примера через массивы
1. Заполнить диапазон ячеек А1:А5 значениями элементов массива.
2. Текст программы:
Sub mm ()
Dim A(1 to 5) As Integer
N=5
Y=0
For i=1 to n
A(i)=Worksheets(1).Cells(i,1)
Next i
For i=1 To n
Y=Y+log(A(i))/2^i
Next i
Worksheets(1).Range (“A6”).Value = ”результат”
Worksheets(1).Range (“A7”).Value = Y
End Sub
ЗАДАНИЯ ДЛЯ ВЫПОЛНЕНИЯ
1. Найти количество положительных
2. Найти количество отрицательных чисел.
3. Найти сумму положительных
4.
Найти сумму отрицательных чисел.
5. Найти количество элементов массива больших или равных заданному
значению.
6. Найти произведение положительных элементов массива.
7. Найти сумму элементов, стоящих на четных местах .
8. Найти сумму элементов стоящих на нечетных местах.
9. Заменить отрицательные элементы нулями.
10. Обнулить элементы, имеющие четный индекс.
11. Найти произведение, элементов стоящих на четных местах.
12. Сформировать новый массив по правилу: с[i]=x*sqrt(a[i]), где х—
некоторая постоянная.
3.Двумерные массивы
а) Описание массивов
Dim <имя массива>(<начальное значение индекса по строкам> To <конечное значение
индекса по строкам >,
< начальное значение индекса по столбцам> To < конечное значение индекса по столбцам>)
As <тип элементов массива>
Пр: Dim A(1 To 10, 1 to 5) As Integer - массив состоит из 50 элементов (10 строк и
5столбцов), тип каждого элемента - Integer.
б) Обращение к элементу массива
Обращение к элементу массива осуществляется следующим образом: указывается имя
массива, а затем в круглых скобках через запятую указывается номер строки и номер столбца,
где размещен элемент в массиве.
Пр: A(1,4)=15 - элементу, находящемуся в первой строке и четвертом столбце массива А
присваивается значение 15
в) Ввод массивов
Массивы можно вводить как с листа Excel, так и испрользуя встроенную функцию InputBox.
1) for i=1 to 10
for j=1 to 4
A(i,j)=InputBox("Введите A(" & i & "," & j & ")")
next j
next i
2) for i=1 to 10
for j=1 to 4
A(i,j)=Worksheets(1).Cells(i,j)
next j
next i
г) Изображение ввода двумерных массивов в блок-схемах
i=1,10,1
j=1,4,1
A(i,j)
СОДЕРЖАНИЕ ОТЧЕТА
1. Название лабораторной работы.
2. Цель работы.
3. Задание
4. Схема алгоритма.
5. Текст программы.
6. Выводы.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1. Приведите форму записи оператора FOR?
2. Что такое счётчик цикла?
3. Что такое тело цикла?
Лабораторная работа №22
VBA. ЦИКЛЫ С ПРЕДУСЛОВИЕМ И ПОСТУСЛОВИЕМ.
Составим алгоритм следующей задачи, используя различные циклы с предусловием и
постусловием: вводите числа, пока их сумма не превысит введенного числа m.
1) Циклы с предусловием
Do While P
б) Do While P
S
S
[Exit Do]
Wend
Loop
Тело цикла S будет выполняться в том случае, когда условие P имеет значение истина
a)
P
S
(цикл продолжается при истинном значении условия P). Если условие P ложно, то выполняются
операторы, стоящие после цикла. В первом случае есть возможность досрочного выхода из
цикла (это реализовано через Exit Do.
Ниже приведен пример решение указанной выше задачи, используя цикл с предусловием Do While …Loop.
Public Sub uuu()
Dim x As Integer
Dim m As Integer
Dim s As Integer
Dim i As Integer
m = InputBox("Введите число")
MsgBox ("Вводите числа")
i=1
s = InputBox("Введите 1 число")
Do While s <= m
i=i+1
x = InputBox("Введите " & i & "число")
s=s+x
Loop
MsgBox ("Количество введенных чисел " & i)
End Sub
в) Кроме уже описанных выше циклов с предусловием существует еще один - это цикл
Do Until … Loop. Тело S этого цикла выполняется до тех пор, пока условие P не примет значение истина (цикл продолжается при ложном значении условия P). Есть возможность досрочного выхода из цикла. Его синтаксис следующий:
Do Unlil P
S
[Exit Do]
Loop
Далее смотрите код программы той же задачи, но с использованием цикла Do Until …
Loop.
Public Sub uuu()
Dim x As Integer
Dim m As Integer
Dim s As Integer
Dim i As Integer
m = InputBox("Введите число")
MsgBox ("Вводите числа")
i=1
s = InputBox("Введите 1 число")
Do Until s > m
i=i+1
x = InputBox("Введите " & i & "число")
s=s+x
Loop
MsgBox ("Количество введенных чисел " & i)
End Sub
2) Циклы с постусловием.
S
P
а) Do
S
[Exit Do]
Loop While P
Тело цикла S будет выполняться в том случае, когда условие P имеет значение истина
(цикл продолжается при истинном значении условия P). Если условие P ложно, то выполняются
операторы, стоящие после цикла.Предоставлена возможность досрочного выхода из цикла
Далее приведен код программы, с использованием цикла Do …Loop While.
Public Sub uuu()
Dim x As Integer
Dim m As Integer
Dim s As Integer
Dim i As Integer
m = InputBox("Введите число")
MsgBox ("Вводите числа")
i=0
s=0
Do
i=i+1
x = InputBox("Введите " & i & "число")
s=s+x
Loop While s <= m
MsgBox ("Количество введенных чисел " & i)
End Sub
б) Do
S
[Exit Do]
Loop Until P
Тело S этого цикла выполняется до тех пор, пока условие P не примет значение истина
(цикл продолжается при ложном значении условия P). Есть возможность досрочного выхода из
цикла.
Ниже находится код все той же задачи, но с использованием последнего описанного
цикла.
Public Sub uuu()
Dim x As Integer
Dim m As Integer
Dim s As Integer
Dim i As Integer
m = InputBox("Введите число")
MsgBox ("Вводите числа")
i=0
s=0
Do
i=i+1
x = InputBox("Введите " & i & "число")
s=s+x
Loop Until s > m
MsgBox ("Количество введенных чисел " & i)
End Sub
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Задание для самостоятельного выполнения.
Присутствует ли во введенном массиве введенное число (количество элементов массива ввести).
Присутствует ли в массиве два равных соседних элемента. Если да, то под какими
номерами имееи место первое равенство.
Начиная с какого номера n имеет место неравенство n!>xn, x - любое действительное
число.
Вводить последовательность до тех пор, пока не встретятся три подряд идущих положительных числа. Тогда прервать ввод и сообщить, сколько во введенной последовательности было всего чисел.
Вводить последовательность до тех пор, пока не встретятся три подряд идущих положительных числа. Тогда прервать ввод и сообщить, сколько во введенной последовательности было положительных чисел.
Вводить последовательность до тех пор, пока не встретятся три подряд идущих положительных числа. Тогда прервать ввод и сообщить, сколько во введенной последовательности было отрицательных чисел.
Определить сколько натуральных подряд идущих четных чисел нужно сложить
(найти минимальное число таких слагаемых), чтобы их сумма была больше введенного числа.
Дано натуральное N и первый член бесконечного ряда: Y1=1. Вычислить сумму членов бесконечного ряда, образованного по следующему реккррентному соотношению: Yi=2*Yi-1 (то есть S=1+2+4+8+16+...). Вычисление суммы продолжать до тех
пор, пока соблюдается условие |Yi-Yi-1|<N.
Последовательно вводятся числа до тех пор, пока во введенной совокупности не
окажется три нуля. Вывести количество введенных чисел.
Присутствуют ли во введенном массиве отрицательные числа.Если да, то под каким
номером встречается первое из них.
Лабораторная работа №23
VBA. ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ.
Приведем некоторые общие сведения об организации программ в VBA. Программа VBA состоит из одного или нескольких модулей. Модуль — это лист с текстом программы, вставленный в
рабочую книгу. Обычно текст программы VBA начинается с опций, которые управляют описанием переменных, способом сравнения строк и т. д. Затем следует объявление глобальных переменных или констант для данного модуля, т. е. таких переменных, которые используются во
всех процедурах модуля. Далее располагается непосредственно текст функций пользователя и
процедур, составляющих саму программу.
При написании программ удобно внутрь текста помещать комментарии. Комментарии — это
пояснительный текст, который можно записать в любом месте программ. Каждая строка комментариев начинается со знака апострофа. Комментарии игнорируются компилятором, и поэтому никакого влияния на программу не оказывают. Комментарии удобно использовать также
при отладке операторов для их временного отключения.
Правильно организованной программой является такая программа, которая достигает результата наименьшим количеством итераций и при этом использует оптимальный вариант решения
поставленной задачи. Это достигается многими компонентами, одним из которых и является
функция.
Возьмем к примеру ситуацию, когда при проектировании программы вы замечаете, что одну и
ту же многошаговую операцию необходимо будет произвести с различными переменными. Разумным шагом в сложившейся ситуации является следующий - один раз написать код многошаговой операции и использовать его во всех необходимых местах данной программы, а в последствии и при написании других программ.
Процедура Function представляет собой набор команд, с помощью которого можно решить
определенную задачу. Отличие процедуры Function от процедуры Sub состоит в том, что процедуры данного типа обязательно возвращают значение. При создании процедуры Function можно
описать тип данных, который возвращает функция.
Синтаксис описания функции выглядит следующим образом:
Function имя ([аргументы] )[As тип]
Инструкции
имя=выражение
End Function
1. Ключевые слова Function и End Function используются в описании любой функции.
2. Параметр имя определяет имя функции.
3. Необязательные параметры аргументы позволяют передать в функцию требуемые значения.
4. Параметр As тип позволяет явно задать тип данных, который возвращает функция. Если
он опущен, то по умолчанию возвращается значение типа Variant.
5. Внутри функции обычно имеется инструкция имя=выражение, которая используется
для задания возвращаемого значения. Обратите внимание, что имя функции стоит слева
от знака равенства, а параметр выражение определяет значение, которое должно быть
совместимым с объявленным в параметре As тип типом данных для функции.
Процедуры Function возвращают значение, поэтому они обычно используются при выполнении
вычислений, например, можно создать функцию, которая возвращает длину окружности заданного радиуса:
Function Circumference (Radius As Double) As Double
Const Pi = 3.14159
Circumference = 2 * Pi * Radius
End Function
1. Функция Circumference возвращает значение типа Double.
2. Внутри тела функции определяется константа Pi и выполняется расчет длинны.
3. Обратите внимание, что в вычисляемом выражении участвуют аргумент Radius и константа Pi, а результат расчета присваивается переменной Circumference, которая является
именем функции.
Задания к выполнению
1. Создать программу, которая обеспечит ввод данных y при помощи InputBox, произведет
вызов функции g с двумя условиями:
и выведет результат в MsgBox.
2. Создать программу, которая обеспечит ввод данных t при помощи InputBox, произведет
вызов функции z с тремя условиями:
и выведет результат в MsgBox.
Лабораторная работа №24
VBA. ПОЛЬЗОВАТЕЛЬСКИЕ ПРОЦЕДУРЫ.
Процедура – это набор описаний и инструкций, сгруппированных для вычисления. Существует
три типа процедур Sub, Function, Property. Имя процедуры всегда определяется на уровне модуля. В процедурах должны содержаться все исполняемые программы. Вложенность процедуры в
другие процедуры не допускается. Для того, чтобы вставить процедуру необходимо вызвать редактор VBA и в меню редактора Вставка выбрать подменю Модуль. Затем снова выбрать
Вставка и, в открывшемся подменю выбрать Процедура…. Появляется диалоговое окно
Вставка процедуры следующего вида:
В окне Имя пишется название процедуры. В рамке Тип выбирается необходимая процедура. А
в рамке Область определения выбирается необходимая область определения для вашей процедуры.
Инструкция Sub описывает имя, аргументы и текст программы, составляющий тело процедуры
Sub.
Синтаксис
[Private | Public] [Static] Sub имя [(списокАргументов)]
[инструкции]
[Exit Sub]
[инструкции]
End Sub
Синтаксис инструкции Sub содержит следующие элементы:
Элемент
Public
Private
Описание
Необязательный. Указывает, что процедура Sub доступна для всех других процедур во всех модулях. При использовании в личном модуле (модуле, который содержит инструкцию Option Private) такая процедура является недоступной вне
проекта.
Необязательный. Указывает, что процедура Sub доступна для других процедур
только того модуля, в котором она описана.
Необязательный. Указывает, что локальные переменные процедуры Sub сохраняются в промежутках времени между вызовами этой процедуры. Атрибут Static
не действует на переменные, описанные вне процедуры Sub, даже если они используются в процедуре.
имя
Обязательный. Имя процедуры Sub, удовлетворяющее стандартным правилам
именования переменных.
списокАргументов Необязательный. Список переменных, представляющий аргументы, которые передаются в процедуру Sub при ее вызове. Имена переменных разделяются
запятой.
инструкции Необязательный. Любая группа инструкций, выполняемых в процедуре Sub.
Static
Дополнительные сведения
Процедуры Sub, тип которых не указан явно с помощью слов Public или Private, являются общими по умолчанию. Если не используется слово Static, значения локальных переменных не
сохраняются между вызовами процедур.
Допускаются рекурсивные процедуры Sub; т.е. они могут вызывать сами себя для выполнения
определенных задач. Однако рекурсия может приводить к переполнению стека. Ключевое
слово Static обычно не используется с рекурсивными процедурами Sub.
Все выполняемые команды должны содержаться в процедурах. Не допускается определение
процедуры Sub внутри другой процедуры Sub, Function или Property.
Инструкция Exit Sub приводит к немедленному выходу из процедуры Sub. Выполнение программы продолжается с инструкции, следующей за инструкцией, содержащей вызов процедуры
Sub. В любом месте процедуры Sub допускается наличие любого числа инструкций Exit Sub.
Подобно процедурам Function, процедура Sub является самостоятельной процедурой, которая
может получать аргументы, выполнять последовательность инструкций и изменять значения
своих аргументов. Однако в отличие от процедуры Function, которая возвращает значение,
процедура Sub не может применяться в выражении.
Если в процедуре используются общие переменные (Public) и они получают там новые значения , то при вызове этой процедуры другой процедурой Sub, в которой так же используются
эти переменные они будут содержать уже полученные значения. А вызвать одну процедуру
другой можно следующим способом:
Процедура Sub вызывается в выражении по своему имени, за которым следует список аргументов в скобках. Для вызова процедур Sub обычно используют инструкцию Call.
Call Primer(0)
Вышеуказанная строка вызывает процедуру Primer с аргументом 0 .
Переменные, используемые в процедурах Sub, разбиваются на две категории: явно описанные
внутри процедуры и не описанные внутри процедуры. Переменные, которые явно описаны в
процедуре (с помощью ключевого слова Dim или эквивалентного ему), всегда являются локальными для этой процедуры. Переменные, которые используются, но явно не описаны в процедуре, также являются локальными, если они явно не описаны на более высоком уровне. Примером явного описания на более высоком уровне являются общие переменные:
Public Girl As Integer
Такого рода переменные описываются в отдельном модуле.
Примечание. Для входа или выхода из процедуры Sub нельзя использовать инструкции
GoSub, GoTo или Return.
Пример для выполнения
Необходимо вычислить площадь параллелепипеда со сторонами a, b, c. Для этого нужно создать две процедуры – Plosh и Argum. В процедуре Plosh обеспечить ввод a, b, c и вывод результата S. А в Argum обеспечить расчет площади S. Причем, процедура Plosh должна получить
результат S путем вызыва процедуры Argum.
Решение
Public a As Integer ' Описываются общие переменные в отдельном модуле
Public b As Integer
Public c As Integer
Public S As Integer
Public Sub Plosh()
a = Range("a1").Value
b = Range("a2").Value
c = Range("a3").Value
Call Argum
' Вызов процедуры Argum
Range("a5").Value = S
End Sub
Public Sub Argum()
S=a*b*c
End Sub
Задания к самостоятельному выполнению:
1. Создать одномерный массив из 10 элементов. Его ввод обеспечить используя InputBox .
Необходимо отсортировать массив по возрастанию, а так же найти сумму всех его элементов. Задачу разрешить при помощи создания трех процедур.
2. Создать одномерный массив из 10 элементов. Его ввод обеспечить используя InputBox .
Найти максимальный и минимальный элементы, а так же найти среднее арифметическое
массива. Задачу разрешить при помощи создания трех процедур.
3. Создать одномерный массив из 10 элементов. Поменять местами соседние элементы массива и вывести произведение элементов, стоящих на чётных местах преобразованного массива.
Download