Пример простейших макросов

Автор: | 12.11.2014

Простейшие макросы

 Программирование в VBA ничем принципиально не отличается от большинства других языков программирования, если не использовать визуальные средства.

Язык программирования Бейсик, вернее, один из его диалектов или версий является частью VBA.

Когда вы программируете на VBA, то можете, также как и в Бейсик, вообще не описывать предварительно переменные, используемые в программе, чего Вы не можете сделать, например, в Паскале.

VBA – это разновидность VB для приложений. VBA встроен в Application Word, Excel, Power Point, Access.

Для каждого приложения есть свои нюансы VBA.

С помощью VBA приложения можно связывать между собой, вызывая в одной программе разные приложения и передавая данные между ними.

Такой процесс называется Автоматизацией. То приложение, откуда данные берутся, выступает в роли сервера, а то приложение, куда данные вставляются, играет роль клиента.

Лучше всего для сервера подходит Excel, а для клиента – Word.

Переменные, описанные с помощью оператора Dim, являются локальными, и действуют лишь внутри объявляемого модуля.

Переменные, объявленные как Public, действуют во всех программных модулях и доступны из любого модуля.

Значения Public не надо передавать другим модулям, так как они всегда доступны по их имени. Локальные переменные можно передавать другим модулям при их вызове.

Если вы работаете в Excel, то есть одна тонкость при обработке вещественных (с десятичной точкой) чисел.

Чаще всего на листе Excel числа набираются через запятую, а VBA такие числа воспринимает через точку. Поэтому десятичные числа лучше с листа считывать в символьные переменные, а затем программным способом менять запятую на точку. Тогда ошибок не будет наверняка.

Если Вы  хотите, чтобы в VBA нельзя было использовать не объявленные переменные, как в Паскале, то надо перед программой поставить режим Explicit в виде команды Option Explicit.

Давайте рассмотрим простейшую программу по решению квадратных уравнений с использованием алгоритма, известного из школы.

Эту задачу средствами VBA в EXCEL можно решить минимум тремя или четырьмя способами.

Первый способ использует ввод и вывод данных на самом листе Excel.

 Sub koren1()

Dim a As Integer

Dim b As Integer

Dim c As Integer

Dim d As Integer

Dim x1 As Integer

Dim x2 As Integer

‘ Тип данных можно сделать Long для больших целых чисел

‘ или Double для вещественных чисел

‘ или Variant для чисел любого типа

‘ Изменяя тип переменных, можно решать задачу в разных диапазонах данных

‘ читаем значения чисел в переменные

i = 2 ‘Задаем номер строки

a = Cells(i, 1)

b = Cells(i, 2)

c = Cells(i, 3)

d = b * b – 4 * a * c ‘Вычисляем дискриминант

‘Выводим его значение в строку 2, столбец 4

Cells(i, 4) = d

‘Применяем условие для решения квадратных уравнений

If d >= 0 Then

MsgBox “Решение есть”

x1 = (-b – Sqr(d)) / (2 * a)

x2 = (-b + Sqr(d)) / (2 * a)

Cells(i, 5) = x1

Cells(i, 6) = x2

Else

MsgBox “Решений нет”

End If

End Sub

Решим задачу вторым способом, задавая сами значения непосредственно в программе.

Sub koren2()

Dim a As Integer

Dim b As Integer

Dim c As Integer

Dim d As Integer

Dim x1 As Integer

Dim x2 As Integer

‘ Тип данных можно сделать Long для больших целых чисел

‘ или Double для вещественных чисел

‘ или Variant для чисел любого типа

‘ Изменяя тип переменных, можно решать задачу в разных диапазонах данных

‘ Заносим значения чисел в переменные

a = 1

b = 2

c = -35

MsgBox “Коэф. A=” + CStr(a) + vbCr + “Коэф. B=” + CStr(b) + vbCr + “Коэф. C=” + CStr(c)

d = b * b – 4 * a * c ‘Вычисляем дискриминант

‘Выводим его значение в строку 2, столбец 4

MsgBox “Коэф. A=” + CStr(a) + vbCr + “Коэф. B=” + CStr(b) + vbCr + “Коэф. C=” + CStr(c) + vbCr + _

Дискриминант D=B*B-4*A*C= + CStr(d)

‘Обращаю внмание на вывод нестроковых значений в операторе Msgbox

‘ Значение надо преобразовать в строковый тип данных

‘Применяем условие для решения квадратных уравнений

If d >= 0 Then

MsgBox “Решение есть”

x1 = (-b – Sqr(d)) / (2 * a)

x2 = (-b + Sqr(d)) / (2 * a)

MsgBox “Корень x1=” + CStr(x1) + vbCr + “Корень x2=” + CStr(x2)

Else

MsgBox “Решений нет”

End If

End Sub

Решим задачу 3-м способом, получая значения путем их ввода в интерактивном режиме непосредственно в программу.

Sub koren3()

Dim a As Integer

Dim b As Integer

Dim c As Integer

Dim d As Integer

Dim x1 As Integer

Dim x2 As Integer

Dim a1 As String

‘ Тип данных можно сделать Long для больших целых чисел

‘ или Double для вещественных чисел

‘ или Variant для чисел любого типа

‘ Изменяя тип переменных, можно решать задачу в разных диапазонах данных

‘ Вводим значения в переменные

a1 = InputBox(“Введите значение коэф.А”, “Ввод коэффициента”, 1)

a = Val(a1)

a1 = InputBox(“Введите значение коэф.B”, “Ввод коэффициента”, 2)

b = Val(a1)

a1 = InputBox(“Введите значение коэф.C”, “Ввод коэффициента”, -35)

c = Val(a1)

If a = 0 Then MsgBox “Уравнение имеет одно решение”

‘MsgBox “Коэф. A=” + CStr(a) + vbCr + “Коэф. B=” + CStr(b) + vbCr + “Коэф. C=” + CStr(c)

d = b * b – 4 * a * c ‘Вычисляем дискриминант

‘Выводим его значение в строку 2, столбец 4

MsgBox “Коэф. A=” + CStr(a) + vbCr + “Коэф. B=” + CStr(b) + vbCr + “Коэф. C=” + CStr(c) + vbCr + _

Дискриминант D=B*B-4*A*C= + CStr(d)

‘Обращаю внмание на вывод нестроковых значений в операторе Msgbox

‘ Значение надо преобразовать в строковый тип данных

‘Применяем условие для решения квадратных уравнений

If d >= 0 Then

MsgBox “Решение есть”

x1 = (-b – Sqr(d)) / (2 * a)

x2 = (-b + Sqr(d)) / (2 * a)

MsgBox “Корень x1=” + CStr(x1) + vbCr + “Корень x2=” + CStr(x2)

Else

MsgBox “Решений нет”

End If

End Sub

 

Решим задачу 4-м способом, получая значения путем их ввода в форму пользователя непосредственно в программе.

Создаем форму  пользователя Userform1

В форме располагаем несколько меток и текстовых окон, а также две командные кнопки.

По каждой кнопке вызывается исполняемый модуль

Текстовые окна имеют имена Koef_A, Koef_B, Koef_C, Disk_D, Koren_x1 и Koren_x2

Командные кнопки имеют имена cmdRun и cmdExit.

Private Sub cmdExit_Click()

UserForm1.Hide

End Sub

 

Private Sub CmdRun_Click()

Dim a As Double

Dim b As Double

Dim c As Double

Dim d As Double

Dim x1 As Double

Dim x2 As Double

Dim a1 As Double

UserForm1.Disk_D = “”

UserForm1.Koren_x1 = “”

UserForm1.Koren_x2 = “”

‘ Тип данных можно сделать Long для больших целых чисел

‘ или Double для вещественных чисел

‘ или Variant для чисел любого типа

‘ Изменяя тип переменных, можно решать задачу в разных диапазонах данных

‘ Вводим значения в переменные

If Trim(UserForm1.Koef_A) = “” Or Trim(UserForm1.Koef_B) = “” Or Trim(UserForm1.Koef_C) = “” Then

MsgBox “Введите значения коэффициентов”

Exit Sub

End If

a = UserForm1.Koef_A

b = UserForm1.Koef_B

c = UserForm1.Koef_C

If a = 0 Then MsgBox “Уравнение имеет одно решение”

d = b * b – 4 * a * c ‘Вычисляем дискриминант

‘Выводим его значение в строку 2, столбец 4

UserForm1.Disk_D = UserForm1.Koef_B + “*” + UserForm1.Koef_B + “-” + _

4* + UserForm1.Koef_A + ” *” + UserForm1.Koef_C + “=” + CStr(d)

‘Обращаю внмание на вывод нестроковых значений в операторе Msgbox

‘ Значение надо преобразовать в строковый тип данных

‘Применяем условие для решения квадратных уравнений

If d >= 0 Then

‘MsgBox “Решение есть”

x1 = (-b – Sqr(d)) / (2 * a)

x2 = (-b + Sqr(d)) / (2 * a)

UserForm1.Koren_x1 = x1

UserForm1.Koren_x2 = x2

Else

MsgBox “Решений нет”

End If

End Sub

Текст этой записи Простейшие макросы.doc

Файл Excel. содержащий рассмотренные примеры

 Перейти на запись об основах VBA

Перейти в рубрику Обучение с примерами макросов в Excel