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

Тема в разделе "Софт и инструменты", создана пользователем Hermanicus, 21 апр 2017.

  1. Сегодня мой урок будет посвящен программированию на языке 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
    Предлагаю услуги по:
    1. Сделаю зеркало любого сайта в сети ТОR
    2. Блокировка ЛЮБОГО QIWI Номера (Быстро)


    [​IMG]
    Мануалы и софт выложены в ознакомительных целях вся ответственность за использования ложится на вас.
    Софт советую использовать на виртуалке.
     

Поделиться этой страницей