Перед созданием программ, необходимо удалить лишние модули и подпрограммы. Для этого необходимо открыть окно VBA. Перейти в окно проекта. Выделить удаляемый модуль или процедуру, вызвать контекстное меню (щелкнуть правую кнопку мыши) нажать строчку удалить модуль. На запрос о сохранении удаляемого модуля, выбрать НЕТ.
Создание модуля осуществляется из меню Вставка/ Модуль.
Задание 2. Создайте модуль с именем VBAМод1. Опишите в конспекте каким образом присваивается имя модуля. Каким образом можно изменить имя модуля.
Конец задания 2.
Средства ввода- вывода данных.
Модули содержат процедуры и функции. Создание процедуры осуществляется из меню Вставка/ процедура. В диалоговом окне задается имя процедуры, тип.
Задание 3. Используя команду Вставка / Процедура Создайте процедуру ВводВывод:
Public Sub ВводВывод()
Dim strИмя As String
strИмя = InputBox ("Введите Ваше имя", "Окно ввода", "Неизвестный")
MsgBox Prompt:=strИмя & "! У Вас получилось! "
End Sub
Функция InputBox имеет параметры:
InputBox (“сообщение пользователю”, заголовок окна, значение по умолчанию)
Сообщение в окне диалога MsgBox представляет собой строку, включающую последовательность строковых констант в кавычках соединенных знаком & c именами переменных. Например, при использовании операторов
b = 10
MsgBox(“Значение переменной b = ” & b)
будет выведено - Значение переменной b = 10.
Свяжите созданную процедуру с кнопкой на панели инструментов. Для вывода кнопки запуска программы на созданную панель необходимо в окне Настройка перейти на вкладку Команды, выбрать в поле Категории Макросы, в поле Команды выбрать кнопку соответствующую программе, захватить кнопку мышкой перетащить на панель и бросить. Используя меню Изменить выделенный объект выбрать Основной стиль для кнопки или изменить значок.
Перейдите в окно текстового документа. Запустите в работу программу. Опишите в конспекте назначение операторов программы.
Конец задания 3.
Задание 4. Создайте подпрограммы:
1. расчета скорости по известным расстоянию и времени.
2. расчета длины окружности и ее площади по значению радиуса.
3. расчета объема цилиндра по известным высоте и радиуса.
Свяжите созданные процедуры с кнопками на панели инструментов.
Конец задания 4.
8.8. Решение задач при помощи стандартных средств VBA
В таблице 1 показано соответствия основных алгоритмических и программных структур.
Таблица соответствия алгоритмических и программных структур Таблица 1 | |||
№ п/п | Задача | Алгоритм | Программа на VBA |
Начало процесса, заголовок. | начало; | Public Sub ImProgram() | |
Описание структуры данных. | Список переменных: a, b, c – вещ; d, k – цел; mas(5, 5) – цел; mas1(5,5) – вещ; | Dim a, b, c As Single Dim d, k As Integer Dim mas(1 to 5, 1 to 5) As Integer Dim mas(5, 5) As Single | |
Ввод исходных значений. | Ввод(a, b, d, k); | a = InputBox(“Ввод a”) b = InputBox(“Ввод b”) d = InputBox(“Ввод d”) k = InputBox(“Ввод k”) | |
Проверка исходных данных. | Вывод(a, b, d, k); | MsgBox “Вывод a” & a MsgBox “Вывод b” & b MsgBox “Вывод d” & d MsgBox “Вывод k” & k | |
Линейные операции (действия). c = 2a + √b | c:= 2 * a + Sqr(b); | c = 2 * a + Sqr(b) (см. ниже ссылку 1) | |
Выбор альтернативного пути в зависимости от значения условия. | Если с > 10 то с:= с – 3*а; иначе с:= с + 2*b; конец- если; | If c > 10 Then с = с – 3*а Else с = с + 2*b End If | |
Выбор одного из нескольких альтернативных путей. | Если performance=1 то Bonus = salary * 0.1 Иначе Если performance=2или3 то Bonus = salary * 0.09 Иначе Если performance>=4 и performance<=6 то Bonus = salary * 0.07 Иначе Если performance>8 то Bonus = 100 Иначе Bonus = 0, где performance – переменная выбора, Bonus, salary – переменные. | Select Case performance Case 1 Bonus = salary * 0.1 Case 2, 3 Bonus = salary * 0.09 Case 4 To 6 Bonus = salary * 0.07 Case Is > 8 Bonus = 100 Case Else Bonus = 0 End Select | |
Выполнение последовательности одних и тех же действий заданное количество раз. | Цикл по i = 1 до 10 шаг 2; a:= 34/b; c:= √a + 2*c; b:= b + 1; Вывод (с); Конец цикла по i; | For i = 1 To 10 Step 2 a:= 34/b; c:= √a + 2*c; b:= b + 1; MsgBox “Вывод с” & с Next i | |
Выполнение последовательности одних и тех же действий с предварительной проверкой условия окончания действий. Последовательное приближение к результату, итерационный процесс. | Цикл – пока myNum > 10; myNum = myNum – 1; counter = counter + 1; Конец цикла; | Do While myNum > 10 myNum = myNum - 1 counter = counter + 1 Loop | |
Выполнение последовательности одних и тех же действий с проверкой условия окончания операций в конце последовательности операций. Последовательное приближение к результату, итерационный процесс. | Цикл – До myNum > 10; myNum = myNum – 1; counter = counter + 1; Конец цикла; | Do myNum = myNum - 1 counter = counter + 1 Loop While myNum > 10 | |
Завершение операций. | конец; | End Sub |
1. Справка по функциям и операторам VBA вызывается в окне Visual Basic по схеме: «? / Содержание и предметный указатель / содержание / Справочное руководство поVisual Basic / Функции или Обзор Visual Basic для приложений».
Ниже приведен текст программы нахождения наибольшего элемента массива. В программе использованы все основные структуры. В комментариях указано назначение программы. Прочитайте текст программы. Опишите назначение основных операторов.
8.9. Программа поиска наибольшего элемента массива
Public Sub Massiv() 'Начало
'Список данных
Dim a, b, c, d As Integer 'в ОЗУ отводится место для переменных
Dim mas(4, 4) As Integer 'в ОЗУ отводится место для массива
'Конец списка
'Ввод значений элементов массива размером 4 на 4
For i = 1 To 4 'начинаем цикл по переменной i, изменение первого индекса
For j = 1 To 4 'изменение второго индекса
'в следующем операторе используется функция InputBox для ввода данных
'при выполнении функции выводится окно диалога InputBox
mas(i, j) = InputBox ("Ввод значения элемента mas(" & i & ", " & j & ")",, 10)
Next j 'конец цикла по j
Next i 'конец цикла по i
'определение наибольшего элемента массива
b = mas(1, 1) 'переменной b присваивается значение элемента mas(1,1)
For i = 1 To 4
For j = 1 To 4
If mas(i, j) > b Then 'если очередной элемент массива больше
b = mas(i, j) 'записать его значение в переменную b
c = i 'в переменную с записать значение первого индекса
d = j 'в переменную с записать значение второго индекса
End If
Next j
Next i
'вывод значения наибольшего элемента массива в окно диалога MsgBox
MsgBox "Наибольший элемент массива mas(" & c & ", " & d & ")" & ", равен " & b
End Sub 'Конец
8.10. Линейные алгоритмы и ветвления
Ход занятия. Используя стандартные средства VBA разработать программы, для решения задач, связать их с кнопками на панелях инструментов. Программы разрабатывать в документе Word. Предлагаемый перечень задач:
ЗАДАЧА 1
Составить алгоритм на VBA для вычисления и печати значений функции Y, заданной формулой:
; |
в алгоритме предусмотреть ввод аргумента x и вывод на печать введенной информации и результатов решения.
ЗАДАЧА 2
Известно, что система уравнений
имеет решение:
Составить алгоритм на VBA для вычисления и печати значений x и y по известным численным значениям коэффициентам A1, B1, C1, A2, B2, C2, являющихся исходными данными для алгоритма.
ЗАДАЧА 3
Составить алгоритм на VBA в случае (а), обеспечивающий присваивание переменной A значение “1” при выполнении следующего условия:
а). переменная X принадлежит отрезку ]0;1[
ЗАДАЧА 4
Составить алгоритм на VBA для вычисления и печати значений функции Y, заданной формулой:
В алгоритме предусмотреть ввод аргументов X и Z на вывод на печать введенной информации и результатов расчета.
ЗАДАЧА 5
Разработать алгоритм для вычисления и печати значения переменной X равному квадрату наименьшего одного из двух чисел A и B.
8.11. Циклические алгоритмы
Теоретические сведения.
Типы циклов
· Do...Loop: повторяет набор инструкций, пока условие имеет значение True или пока оно не примет значение True
Sub ChkFirstWhile()
counter = 0
myNum = 20
Do While myNum > 10
myNum = myNum - 1
counter = counter + 1
Loop
MsgBox "Выполнено " & counter & " итераций цикла."
End Sub
· For...Next: использует счетчик. Повторяет набор инструкций указанное число раз.
· For Each...Next: повторяет набор инструкций для каждого объекта семейства
Sub TwosTotal()
For j = 2 To 10 Step 2
total = total + j
Next j
MsgBox "Сумма равна " & total
End Sub
В приведенном ниже примере для формирования приветствия в ответ на ввод имени пользователя используется конструкция цикла с параметром. Этот оператор позволяет организовать ввод пяти имен пользователей.
Public Sub ВводВывод()
Dim strImya As String
Dim i, a As Integer
For a = 1 To 5 Step 1
strImya = InputBox(" Введите ваше имя - ")
MsgBox (strImya & "! У Вас получилось вывести приветствие! Ура! ")
Next a
End Sub
Следующая ниже программа позволяет вводить имена пользователей и выводить приветствие до тех пор пока значение переменной а больше либо равно 1.
Public Sub ВводВывод()
Dim strImya As String
Dim i, a As Integer
a = 5
Do While a >= 1 'Выполняется пока условие истинно
a = a - 1
strImya = InputBox ("Введите ваше имя - ")
MsgBox (strImya & "! У Вас получилось вывести приветствие! Ура!")
Loop
End Sub
Существует второй вариант использования условия:
Public Sub ВводВывод()
Dim strImya As String
Dim i, a As Integer
a = 5
Do
a = a - 1
strImya = InputBox ("Введите ваше имя - ")
MsgBox (strImya & "! У Вас получилось вывести приветствие! Ура!")
Loop While a >= 1 'Выполняется пока условие истинно
End Sub
Во втором варианте условие проверяется в конце цикла. Это дает возможность выполнить операторы тела цикла хотя бы один раз не зависимо от условия.
Решение задач
ЗАДАЧА 6
Составить алгоритм на VBA, обеспечивающий выполнение следующих действий:
а). Переменной С присвоить значение суммы элементов массива:
ЗАДАЧА 7
Составить алгоритм, обеспечивающий вычисление и печать значений функции Y=f(x) в точках X1, X2,...,Xn:
а).
ЗАДАЧА 8
Переменная Х меняет свое значение от Хн до Хк с шагом Х. Разработать алгоритм, обеспечивающий вычисление и печать значений аргумента Х и функции Y=f(x) при каждом значении Х. Значения Хн, Хк и Х являются исходными и подлежат вводу.
а) Хн=-2, Хк=8, DХ=2.
ЗАДАЧА 9
Разработать алгоритм, обеспечивающий для заданного одномерного массива из n элементов {Ai}, i=1,2,.....,n выполнение следующих преобразований:
д) найти номер и величину наименьшего элемента Аi
8.12. Создание пользовательских форм с элементами управления
Цель практического занятия- приобретение и закрепление умений в использовании пользовательской формы для ввода вывода данных.
Алгоритм выполнения действий студентами при использовании формы для ввода вывода данных:
а) Открыть текстовый документ Word.
б) Сохранить текстовый документ под именем Пзi Фамилия, где i- номер занятия, Фамилия- фамилии студентов.
в) Используя команду Вид/ Панели инструментов/ Настройка создать панель VBAПрограммы, смотри рис.1.
В конце занятия результаты работы предъявить преподавателю.
Рис. 1.
г) Командой Сервис/ Макрос/ Редактор VBA запустить редактор VBA.
Привести редактор VBA к стандартному виду (панель Стандарт, слева закреплены окна проекта и свойств, справа окно модуля).
Командой Вставка/ UserForm вставить модуль формы.
Разработать в конспекте эскиз формы (смотри Рис. 2.).
Используя панель элементов поместить на форму элементы управления.
Рис. 2.
д) Изучить условия очередной задачи, определить вводимые и выводимые данные.
Задача: Составить блок- схему алгоритма и программу на VBA для вычисления и печати функции .
е) Перейти в текстовый процессор Word.
В текстовом документе, используя Автофигуры, для конкретной задачи составить ГСА и написать текст процедур (смотри Рис. 3.).
Ниже приведен алгоритм решения задачи:
Рис. 3.
ж) Скопировать тексты программ и перенести их в соответствующие модули, находящиеся в окне VBA.
Связать одну из процедур (имеющую атрибут Public) с кнопкой на панели VBAПрограммы (смотри Рис.4.)
Перейти в редактор VBA, запустить и отладить программы.
Рис. 4.
В результате работы программы в окне Word появляется форма:
Ход занятия. В папке VBA 33i (i- номер группы) создать файл "Пз4Фамилия", в файле создать панель Настраиваемая1, на панели поместить кнопку запуска программы с формой.
Примерный вид формы:
Текст процедур, обеспечивающих работу формы:
Private Sub Document_Open()
Load UserForm1
UserForm1. Show
'установка курсора на позицию 5
UserForm1.TextBox1.SelStart = 5
'передача фокуса текстовому полю
UserForm1.TextBox1.SetFocus
End Sub
Public Sub пр1()
Call Document_Open
End Sub
Private Sub CommandButton1_Click()
UserForm1. Hide
End Sub
Private Sub CommandButton2_Click()
'курсор в начало текстового поля
TextBox1. SelStart = 0
'курсор в начало текст. поля с выделением
TextBox1. SelLength = Len (TextBox1.Text)
'фокус в текстовое поле
TextBox1. SetFocus
End Sub
Private Sub CommandButton3_Click()
'получение результата расчета
'перезапись текста из окна в окно при нажатии кнопки
TextBox2.Text = Val (TextBox1.Text) * 10
End Sub
Ход занятия. В папке VBA 33i (i- номер группы) создать файл "Пз6Фамилия", в файле создать панель Настраиваемая1, на панели поместить кнопку запуска программы. Открыть окно VBA. В модуле ThisDocument написать процедуру, при помощи которой запускается форма:
Public Sub Форма()
UserForm2.Show
End Sub
связать процедуру с кнопкой на панели. Внимание! Панель инструментов и кнопку создавать в текстовом документе Word, а не в окне VBA.
Задание 1 Создать пользовательскую форму. Ниже приведен фрагмент программы. Попробуйте определить для чего он необходим. Используя сведения, полученные на лекции № 10 ответьте на вопросы: Что такое Value? Что такое Caption? Что такое ScrollBar1? Что обозначает надпись Label1.Caption? Создайте на форме необходимые элементы управления. Реализуйте текст программы в элементе формы. Запустите форму в работу. Опишите что вы наблюдаете.
Dim Var1 As Integer
Private Sub ScrollBar1_Change()
' Программа присваивания надписи значения, определяемого полосой прокрутки
Label1.Caption = Trim$ (Str$ (ScrollBar1.Value))
Var1 = ScrollBar1.Value
Label2.Caption = Trim$ (Str$ (Var1 * 8))
End Sub
Задание 2 Ниже приведены рисунок формы с элементами управления, и программы с помощью которых осуществляется настройка элементов управления формы, ввод данных и размещение их в соответствующих элементах.
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
Label1.Visible = True
Else
Label1.Visible = False
End If
End Sub
Private Sub SpinButton1_Change()
CheckBox1.Caption = "Вывод результата"
Label1.Font.Size = 26
SpinButton1.Min = 3
SpinButton1.Max = 60
TextBox1.Font.Bold = True
TextBox1.Font.Size = 26
TextBox1.AutoSize = True
TextBox1.Value = SpinButton1.Value
Label1.Caption = SpinButton1.Value * 100
End Sub
Создайте форму, введите в модуле формы программы, опишите что происходит с элементами управления на форме. Ответьте письменно на вопросы:
1. Какие объекты обозначают имена- CheckBox1, Label1, TextBox1, SpinButton1?
2. Каким оператором задается размер текста на надписи, равный 26 пунктам?
3. Для чего необходим оператор SpinButton1.Max = 60?
4. Какая процедура позволяет включать и выключать надпись?
5. Каким способом можно задать автоматическое изменение размеров текстового поля? (Size- обозначает размер)
6. Какой оператор присваивает надписи значение счетчика умноженное на число?
7. Запишите оператор при помощи которого можно задать автоматическое изменение размеров надписи в соответствии с длинной помещаемого в ней текста или числа?
8.13. Создание программы подготовки открыток
Ход занятия. В папке VBA 33i (i- номер группы) создать файл "Пз8Фамилия", в файле создать панель Настраиваемая1. Открыть окно VBA. В модуле ThisDocument написать процедуру, при помощи которой запускается программа:
Public Sub Поздравление()
(сюда поместить оператор запуска формы)
End Sub
связать процедуру с кнопкой на панели. Внимание! Панель инструментов и кнопку создавать в текстовом документе Word, а не в окне VBA.
Задание. В документе Пз8Фамилия создать проект, позволяющий формировать поздравления ваших знакомых, с использованием объекта Word Art. Рекомендуется соблюдать последовательность:
1.Создать форму, содержащую два текстовых поля, две надписи и две кнопки.
2.В первое текстовое поле вводится имя поздравляемого во второе текстовое поле вводится текст поздравления.
3.Назначение полей отразить при помощи надписей.
4.Создать две кнопки, предназначенные: первая - для управления выводом поздравления в виде объекта Word Art в документ; вторая - для закрытия формы.
5.Записать при помощи макрорекордера процедуру, позволяющую выводить в документ текст поздравления в виде объекта Word Art и связать ее с соответствующей кнопкой на форме. После записи внести в процедуру изменения, например, указать источник текста в соответствующей строке процедуры (…AddTextEffect(msoTextEffect16, UserForm1.TextBox2.Text, "Arial",…).
Объект Word Art вызывается нажатием кнопки с изображением синей наклонной буквы А на панели РИСОВАНИЕ.