Программирование на VBA. Решение простых задач

CLAY
Оффлайн
Регистрация
25.01.17
Сообщения
763
Реакции
225
Репутация
292
Сегодня мой урок будет посвящен программированию на языке Visual Basic Application(VB6).Урок будет состоять из листинга простейшей программы и подробным объяснением каждого слова в коде. После окончания урока будет задание, которое я рекомендую выполнить. И так, начнём!

1.О Visual Basic 6

Visual Basic 6 - является продолжением своего предка - языка Бейсик (Basic), у которого он унаследовал дух, стиль и отчасти синтаксис. Visual Basic сочетает в себе процедуры и элементы объектно-ориентированных и компонентно-ориентированных языков программирования. Что бы работать на VB6 достаточно иметь одно из приложений MS Office. В MS Office он используется для создания макросов.

2.Программирование на VBA.

Для начала зайдём в Excel, и от туда в редактор Visual Basic 6.

Итак, когда у нас уже открыт редактор, можно приступить к программированию. У нас задача создать программу, которая вычисляет площадь круга, по ведённому пользователем радиусу.

2.1.Начало

Любая программа в Visual Basic начинается с обозначением начала и конца программы. При открытии окна редактора у нас уже будут автоматически введены процедуры начала и конца программы.

Sub Площадь_круга()

End Sub

2.2.Обявление переменных и констант.

В Visual Basic что бы задать переменную используется Dim:

Dim <имя переменной> As <Тип>

Чтобы создать константу используется Const:

Const<имя переменной> As <Тип> = <значение>

Типы данных, которые будут использоваться в нашей программе:

String - строковый тип. Предназначен для хранения строк различной длинны. Возможная длинна строки, может, доходит до 2-х миллионов символов кодировки Unicode. Объем памяти для хранения переменной выделяется в зависимости от длинны строки.

Variant – данный тип добавлен в Visual Basic 5 из версии 2.0. Переменная типа variant может содержать данные любого типа

Currency - данный тип может иметь до 4 цифр после запятой, и до 14 - перед ней. Внутри данного диапазона вычисления будут точными. Идентификатор представляет собой символ "@".

И так, мы водим:

Где: raD-радиус; rslt- результат;

Per-выводимая строка; ptitle – постоянный заголовок программы; pi-ПИ

2.3.Ввод данных.

Что бы обеспечить запрос пользователю на ввод данных потребуется использовать функцию InputBox.Вот как она работает:

P = InputBox(prompt[, title] [, default] [, xpos] [, ypos])

P – возвращаемое значение функции;

Prompt - приглашение к вводу title - строка заголовка default - значение, предлагаемое по умолчанию

Xpos и Ypos – координаты левого верхнего угла окна. Если оставить не измененным, то окно появится по середине экрана.

В нашем случае мы запрашиваем значение для переменной(raD)

2.4.Вычисление.

Прежде чем вычислять, вспомним формулу площади круга:

S = πR2, где число π = 3.141592… — константа.

Переменная S(rslt) у нас есть, константа π(pi) тоже есть и R(rad) тоже присутствует. Делаем вычисления:

В последней строке объединяем текст и число с помощью знака &, а функция FormatNumber(Rslt, 2) служит для округления числа(Rslt), где 2 количество знаков которые останутся после запятой.

2.5.Вывод результата на экран.

Для вывода на экран в VBA используется функция MsgBox. Вот как она работает:

MsgBox(prompt[, buttons] [, title]) prompt - текст сообщения; buttons -набор кнопок; title – заголовок.

В нашей программе MsgBox будет выглядеть вот так:

Вот что у нас получилось:

Листинг : Описание

Sub Площадь_круга()

Dim raD As Variant, Rslt As Currency, peR As String

Const ptitle As String = "Вычеслительплощадикруга"

Const pi As Currency = 3.1416 peR = "Введитерадиускруга" raD = InputBox(peR, ptitle)

Rslt = pi * raD ^ 2 peR = "Площадькругаравна = " peR = peR & FormatNumber(Rslt, 2)

MsgBox peR, ok + vbOKCancel, ptitle

End Sub

И так, теперь у нас всё готово и мы можем запускать программу(значок play синего цвета на верхней панели инструментов):

Появляется окошко водим любое число(я ввёл 20).И нажимаем Ок.

Всё нормально работает)Вроде как…Стоп! А если пользователь ввёдет вместо цифр буквы то:

Значит, нам нужно доработать программу и сделать «защиту от дураков сбоев».

2.6. «Защита от сбоев»

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

If <Выражение> <число, переменная>

Then

<Действия, которые необходимо выполнить, если условие верное>

Else

<Действия, которые необходимо выполнить, если ложь.>

EndIf(окончание оператора)

Возьмём и изменим нашу основную часть программы:

Листинг : Описание peR = "Введите радиус круга" raD = InputBox(peR, ptitle)

Rslt = pi * raD ^ 2 peR = "Площадькругаравна = " peR = peR & FormatNumber(Rslt, 2)

MsgBox peR, ok + vbOKCancel, ptitle

На:

Листинг : Описание

1: peR = "Введитерадиускруга" raD = InputBox(peR, ptitle)

If IsNumeric(raD) = True Then

Rslt = pi * raD ^ 2 peR = "Площадькругаравна = " peR = peR & FormatNumber(Rslt, 2)

Else peR = "Введены некорректные данные!" & Chr(13) & "Введите число"

End If peR = peR & Chr(13) & "Выполнить расчет заново?"

If MsgBox(peR, ok + vbOKCancel, ptitle) = vbOK Then GoTo 1

И так, что получилось:

Оператор If проверяет условие IsNumeric(raD) = True(Содержимое является число), тогда выполняет вычисление и выводит на экран сообщение с результатом, противном случае выводит информацию о том, что введены некорректные данные и предлагает выполнить расчёт заново.

If MsgBox(peR, ok + vbOKCancel, ptitle) = vbOK Then GoTo 1

Эта строка выводит сообщение с текстом из переменой peR и если пользователь нажимает «Ок», то оператор GoTo 1 начинает выполнять программу с метки 1.

Проверим теперь программу:

Нажимаем "Ок"

Нажимаем "Ок"

Нажимаем "Ок"

Нажимаем "Отмена" и выходи из программы.

На этом наш урок подошолк концу.

А вот..чуть не забыл.

Задание:

Написать защиту от сбоев для этой программы:

Листинг : Описание

Sub Площадьтреугольника()

Dim var1 As Integer, var2 As Integer

Dim form As Integer, strmsg As String

Const ptitle As String = "Вычеслитель площади треугольника"

'var1 = ActiveSheet.Range("d12").Value

'var2 = ActiveSheet.Range("d13").Value var1 = InputBox("Введите значение стороны A", ptitle) var2 = InputBox("Введите значение стороны B", ptitle) form = var1 * var2 strmsg = "Площадь треугольника равна = " & form

MsgBox strmsg, vbInformation, ptitle

End Sub
 
Сверху Снизу