" мы вкратце познакомились с диалоговым сообщением msgbox. Но это было простейшее информационное сообщение. Теперь рассмотрим подробнее работу с функцией MsgBox и все виды диалоговых сообщений.
Синтаксис функции MsgBox
Функция MsgBox имеет следующий синтаксис:
MsgBox (сообщение [, константы сообщения] [, заголовок] [, файл справки hlp, контекст справки])
Обязательным параметром является «Сообщение», остальные могут быть опущены.
MsgBox “Текст сообщения ”
- Константы сообщения - позволяют определить вид диалогов.
- Заголовок – задает заголовок формы диалога.
- Файл справки hlp - строковое выражение, указывающее имя файла справки для диалогового окна.
- Контекст справки - числовое выражение, указывающее номер контекста файла справки для диалогового окна.
Диалоговое окно вида:
создается следующей командой:
MsgBox "Текст содержащий вопрос", vbYesNo, "Название сообщения"
Для создания сообщения такого вида:
команда будет выглядеть так:
MsgBox "Текст содержащий вопрос", vbYesNoCancel, "Название сообщения"
Сообщение такого вида:
создается командой:
MsgBox "Текст содержащий вопрос", vbAbortRetryIgnore, "Название сообщения"
т.е. из всех трех примеров в команде меняется только второй параметр (vbYesNo, vbYesNoCancel, vbAbortRetryIgnore). Это и есть значения (константы) определяющие вид сообщения. Параметры (vbYesNo, vbYesNoCancel) могут быть заменены на числовое значение, например диалог vbYesNo можно вызвать, указав 4: MsgBox "Текст содержащий вопрос", 4, "Название сообщения".
Ниже приведен полный список констант и эквивалентных им цифровых значений:
Константа | Значение | Описание |
vbOKOnly | Выводит сообщение с кнопкой OK |
|
vbOKCancel | Выводит сообщение с кнопками OK и Отмена |
|
vbAbortRetryIgnore | Выводит сообщение с кнопками Прервать , Повтор, Пропустить |
|
vbYesNoCancel | Выводит сообщение с кнопками Да , Нет , Отмена . |
|
Выводит сообщение с кнопками Да и Нет |
||
vbRetryCancel | Выводит сообщение с кнопками Повтор и Отмена |
В сообщениях можно слегка изменить внешний вид, назначить кнопку по умолчанию, добавить кнопку "Справка" путем сложения констант.
Например: MsgBox "Текст содержащий вопрос", vbYesNoCancel+vbInformation+ vbMsgBoxHelpButton+vbDefaultButton2, "Название сообщения" построит сообщение вида:
vbInformation
- добавляет иконку восклицания в сообщение
vbMsgBoxHelpButton
- добавляет кнопку "Справка"
vbDefaultButton2
- устанавливает фокус на второй кнопке ("Нет
")
Ниже таблица со списком констант иконок и констант, устанавливающих фокус на кнопках:
Константа | Значение | Описание |
vbCritical | Выводит иконку критического сообщения (красный овал с крестом) |
|
vbQuestion | Выводит иконку с вопросительным знаком |
|
vbExclamation | Выводит иконку с восклицательным знаком (в желтом треугольнике) |
|
vbInformation | Выводит иконку информационного сообщения |
|
vbDefaultButton1 | Устанавливает фокус по умолчанию на первой кнопке |
|
vbDefaultButton2 | Устанавливает фокус по умолчанию на второй кнопке |
|
vbDefaultButton3 | Устанавливает фокус по умолчанию на третьей кнопке |
|
vbDefaultButton4 | Устанавливает фокус по умолчанию на четвертой кнопке |
|
vbMsgBoxHelpButton | Добавляет кнопку Справка |
|
vbMsgBoxRight | Выравнивание текста сообщения по правой стороне |
|
vbMsgBoxRtlReading | Зеркально переворачивает все элементы в сообщении (см. снимок ниже) |
Как узнать какую кнопку в сообщении нажал пользователь?
Определяться выбор пользователя будет с помощью . В некоторых ситуациях можно использовать .
Например, вызовем сообщение двойным нажатием ЛКМ по любой ячейке на листе. В соответствии с выбором пользователя, выведем в эту ячейку текст.
Создаем новую книгу Excel и переходим в режим Visual Basic (Alt+F11). В окне проекта выбираем «Лист1 » и кликаем по нему два раза ЛКМ.
В открывшемся окне редактора кода вводим следующую процедуру:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean ) If
MsgBox("Текст содержащий вопрос", vbYesNo, "Название сообщения") = vbYes Then
|
В условии IF мы сравниваем результат возвращенный функцией MsgBox, с константой vbYes т.е. если в сообщении нажата кнопка «Да », тогда функция MsgBox возвращает значение vbYes (6). Полный перечень констант и их цифровых эквивалентов ниже. Теперь попробуйте на Листе 1 кликнуть два раза по любой ячейке.
Примечание: При вызове сообщения выполнение программы останавливается до тех пор, пока не будет получен ответ от пользователя.
Второй вариант вызова диалога с помощью .
Создадим вторую процедуру на Листе 2. Код процедуры следующий:
Private Sub
Worksheet_BeforeDoubleClick(ByVal
Target As
Range, Cancel As Boolean
) Select Case
mes |
В этом случае результат вызова MsgBox присваивается переменной mes и далее в Select Case ищется совпадение и согласно совпадения, выполняются действия.
Вот и все. Ниже прикреплен готовый пример, рассмотренный в этой статье.
Перечень констант и значений, возвращаемых функцией MsgBox:
Константа | Значение | Кнопка |
vbCancel | Отмена |
|
Прервать |
||
Повтор |
||
vbIgnore | Пропустить |
|
Осуществляется с помощью встроенных функций InputBox, MsgBox, с помощью изменения определенных свойств определенных объектов или применения к ним соответствующих методов.
Ввод данных
Ввод значений переменных может осуществляться:
С помощью функции InputBox , которая при выполнении программы выводит на экран свое собственное окно. Возвращаемое функциейInputBoxзначение имеет типstring. Поэтому для использования введенного значения как числовой переменной необходимо дополнительно преобразовать его к числовому типу с помощью функцииVal. Например, для ввода значения числа 5,25 в переменнуюанеобходимо записать следующую строку программного кода:
a = Val(InputBox("Введите а", "Ввод данных"))
2) С помощью текстового окна TextBox . На форме должно присутствовать текстовое окно, к примеру,Text1, а в событийной процедуре, например, для щелчка по командной кнопке, должен быть записан программный код, в котором используется свойствоtextобъектаText1:
Private Sub Command1_Click()
a = Val(Text1.text)
Свойство textобъектаText1, также имеет строковое значение, поэтому необходимо его преобразование в числовое значение с помощью функцииVal.
Вывод результатов
Для вывода результатов в VB существуют различные способы.
Основным оператором вывода значений переменных в языке VB является оператор Print, который в терминах объектно-ориентированного программирования рассматривается какметод , действующий на объект, на который и будут выводиться значения, указанные в списке. Основными объектами, для которых имеется методPrint, являются формаForm, и графическое окноPictureBox.
Если объект, к которому применяется метод Print, не указан, то список значений выводится на активную форму. Например, после выполнения строки программного кода:
Вывести значение переменной можно с помощью функции MsgBox, которая при выполнении активизирует свое собственное окно сообщений на экране.
Private Sub Command1_Click()
Вывод можно оформить в текстовое окно TextBox, изменяя его свойствоText
Text1.text=str(a)
При этом надо помнить, что свойство Textработает со строкой символов, поэтому выводимое число преобразуется в строку символов с помощью функцииstr.
Вывод можно оформить на метку Label, изменяя ее свойствоCaption:
Label1.Caption=”Результат” & str(a)
Значок & (+) означает сцепление двух строковых переменных.
Функция Format
При выводе результатов для большей наглядности часто используется функция Format, которая возвращает значение типаVariant (String),содержащее выражение, отформатированное согласно инструкциям, заданным в описании формата.
Синтаксис
Format (Expression[, Format[, FirstDayOfWeek[, FirstWeekOfYear]]])
Expression- обязательный аргумент - любое допустимое выражение, подлежащее форматированию.
Format - необязательный аргумент - любое допустимое именованное или определяемое пользователем выражение формата (шаблон формата).
При форматировании чисел без указания шаблона формата функция Format выдает тот же результат, что и функцияStr, т.е. возвращает строку, представляющую число. Отличие состоит в том, что при преобразовании положительного числа с помощью функцииFormatпробел в начале строки (на месте знака числа) теряется, а при преобразовании с помощью функцииStr останется
Примеры шаблонов форматов, применяемых для создания пользовательских форматов числовых величин
Print Format (6.789, "00.0000") " возвратит 06,7890
Print Format (6.789, "##.0000") " возвратит 6,7890
Условный оператор в VBA.
Часто необходимо, чтобы часть программы выполнялась бы только при выполнении определенных условий. Решение данной проблемы заключается в использовании специальных конструкций, использующих операторы ветвления.
Общий вид данной конструкции:
If <логическое выражение> Then <список операторов> End If
<логическое выражение> - это простое или сложное условие, или логическая константа (true или folse)
Сложное условие состоит из простых условий, соединенных логическими операциями AND или OR
Например: (а=b)
Алгоритм
2)Если значение логического выражения true, то выполняется список операторов
3)Если значение логического выражения folse, то ничего не выполняется
Дополнительная ветвь условного перехода:
If <логическое выражение> Then
<список операторов1>
<список операторов2>
Алгоритм
1)Вычисляется значение логического выражения
2)Если значение логического выражения true, то выполняется список операторов 1
3)Если значение логического выражения folse, то выполняется список операторов 2
Несколько вложенных друг в друга операторов:
If <логическое выражение1> Then
<список операторов1>
ElseIf <логическое выражение2> Then
<список операторов2>
ElseIf <логическое выражениеN> Then
<список операторовN>
Алгоритм
1)Вычисляется значение логического выражения 1
2)Если значение логического выражения 1 - true, то выполняется список операторов 1
3)Если значение логического выражения 1 - folse, то выполняется список операторов 2
4)Если значение логического выражения 2 - true, то выполняется список операторов 2
5)Если значение логического выражения 2 - folse, то выполняется список операторов 3
4)Если значение логического выражения N - true, то выполняется список операторов N
5)Если значение логического выражения N - folse, то ничего не выполняется
a = inputbox("введите A")
Cells – свойство позволяющее обращаться к конкретным ячейкам рабочего листа.
Cells(i,j) – ячейка и ее координаты – номер строки и номер столбца.
Например:
Cells(1,1) – обращение к ячейке A1
Чтобы поместить значение или формулу в ячейку:
Cells(2,2)=2 – в ячейку В2 поместить значение 2.
Cells(2,2).Value =2 в ячейку В2 поместить значение 2.
Cells(3,1) = a+b - в ячейку С1 поместить формулу суммы чисел a и b.
Cells(3,2) = cells(1,1).value + cells(1,2).value – в ячейку С2 поместить формулу суммы значений из ячеек А1 и А2.
Cells(i,j) = InputBox(“”) – в ячейку будет помещаться значение, которое мы введем в окошке inputbox.
Cells(i,j).Select – выделить конкретную ячейку
Cells.Select – выделить все ячейки на рабочем листе.
Cells(i,j).Activate – сделать ячейку активной.
Чтобы вывести значение находящееся в ячейке на экран:
Cells(1,1) =3 – в ячейку A1 помещаем значение 3.
Msgbox(cells(1,1)) – значение из ячейки выводится на экран.
Cells(1,1) = к+2 – в ячейку A1 помещаем формулу к+2, где к – заданное число
Msgbox(cells(1,1)) – результат вычисленной формулы, хранящийся в ячейке A1 выводится на экран.
MsgBox() - Выводит на экран окно сообщения (Message Box), и возвращает значение, в зависимости от того, какую кнопку нажал пользователь. Может служить для вывода результатов расчета на экран в виде сообщения.
MsgBox (prompt, buttons, title, helpfile, context)
MsgBox (подсказка, кнопки, заголовок, файл справки, контекст)
prompt (подсказка) – выводимое на экране сообщение.
buttons (кнопки) – константа, определяющая, какие кнопки будут содержаться в данном диалоговом окне.
title (заголовок) – заголовок диалогового окна.
helpfile (файл справки) – имя справочного файла.
context (контекст) – контекст для контекстно-зависимой справки, описывается в том случае, если есть helpfile.
InputBox - функция ввода исходных данных. Выводит диалоговое окно с сообщением и поле для ввода текста пользователя.
1. Функция InputBox
Функция InputBox имеет следующий синтаксис:
Переменная = InputBox (Приглашение[, Заголовок] [, по_умолчанию] [, Xпоз] [, Yпоз] [, файл_справки, содержание] )
Эта функция требует обязательного задания только аргумента Приглашение Значение аргумента Приглашение – единственный обязательный аргумент этой функции, служит текстовая строка, которая отображается в диалогом окне ввода в качестве сообщения. Этот текст должен быть заключен в двойных кавычках.
Аргумент Заголовок
Аргумент по_умолчанию задает значение, которое отображается по умолчанию в поле ввода, пока пользователь не введет свое значение. Если этот аргумент опустить, то поле ввода отображается пустым.
Необязательные аргументы Xпоз и Yпоз задают положение окна ввода на экране. Аргументы файл_справки и содержание
Возвращаемым значением функции InputBox является значение, введенное пользователем в поле ввода.
2. Функция MsgBox
Окно сообщения создаётся функцией MsgBox, которая имеет следующий синтаксис:
Переменная = MsgBox (Приглашение[, Кнопки] [, Заголовок [, файл_справки, содержание] )
Значение аргумента Приглашение – единственный обязательный аргумент этой функции, служит текстовая строка, которая отображается как сообщение в диалогом окне. Этот текст должен быть заключен в двойных кавычках. Отметим использование круглых скобок в синтаксисе MsgBox – они указывают на то, что в данном случае MsgBox является функцией, возвращающей какое-либо значение. Если скобки опущены, то для VBA это признак того, что данное выражение значение не возвращает. Если Вы хотите возвращать значение, надо использовать код, подобный следующему:
Dim i As Integer
Результатом работы такого кода в VBA будет диалоговое окно с тремя кнопками «Да», «Нет», «Отмена» и с пиктограммой восклицательный знак в желтом треугольнике.
Если не указан аргумент Кнопки , то VBA предлагает только одну кнопку «OK». Аргумент Кнопки позволяет управлять следующими параметрами окна сообщения:
¨ Количеством кнопок в окне.
¨ Типы кнопок и и х размещение в окне.
¨ Пиктограммы, отображаемые в окне.
¨ Какая кнопка назначается по умолчания.
¨ Режим (модальность) окна сообщения.
В табл.1 показаны возможные установки для этого аргумента. Первая группа значений устанавливает число и тип кнопок. Вторая позволяет выбрать пиктограмму, отображаемую в окне. Третья назначает кнопку по умолчанию. Четвертая группа устанавливает режим окна сообщения. Для создания конечного значении аргумента Кнопки можно использовать только одно значение из каждой группы, объединив их значком «плюс».
Группа | Константа | Значение | Описание |
Группа 1 | vbOKOnly | Отображает только кнопку OK (установка по умолчанию) | |
VbOKCancel | Отображает кнопки OK и Отмена | ||
VbAbortRetryIgnore | Отображает кнопки Стоп, Повтор и Пропустить. | ||
VbYesNoCancel | Отображает кнопки Да, Нет и Отмена | ||
vbYesNo | Отображает кнопки Да и Нет | ||
VbRetryCancel | Отображает кнопки Повтор и Отмена | ||
Группа 2 | VbCritical | Отображает запрещающую пиктограмму | |
VbQuestion | |||
VbExclamation | Отображает предупреждающую пиктограмму | ||
VbInformation | Отображает информационную пиктограмму | ||
Группа 3 | VbDefaultButton1 | Первая кнопка – кнопка по умолчанию | |
VbDefaultButton2 | Вторая кнопка – кнопка по умолчанию | ||
VbDefaultButton3 | Третья кнопка – кнопка по умолчанию | ||
VbDefaultButton4 | Четвертая кнопка – кнопка по умолчанию | ||
Группа 4 | VbApplicationModal | Режим приложения: пользователь должен закрыть окно сообщения перед продолжением работы в текущем приложении | |
VbSystemModal | Системный режим: все приложения недоступны, пока пользователь не закроет окно сообщения | ||
Дополнительная группа | vbMsgBoxHelpButton | Отображает кнопку Справка | |
vbMsgBoxSetForeground | Делает окно сообщения окном переднего плана | ||
vbMsgBoxRight | Отображает окно сообщения, выровненным по правому краю окна приложения | ||
vbMsgBoxRtlReading | Для иврита и арабского языка указывает, что текст должен выводиться справа налево. |
Табл. 1. Установки для аргумента Кнопки функции MsgBox
Чтобы не ошибаться при вводе значений аргумента Кнопки , используйте список констант, который появляется после ввода знака «+». Знак «+» используется для объединения нескольких констант при задании сложного аргумента Кнопки.
Аргумент Заголовок используется для задания текста, который помещается в строке заголовка окна ввода. Если этот аргумент не задан, то в строке заголовка отображается Microsoft Excel.
Аргументы файл_справки и содержание используются в том случае, если вы создаете для своего приложения собственную систему справок.
В табл.2 представлен список значений, возвращаемых функциейMsgBox. Возвращаемое значение зависит от нажатой пользователем кнопки.
Возвращаемое значение | Кнопка |
OK | |
Отмена | |
Стоп | |
Повтор | |
Пропустить | |
Да | |
Нет |
Табл. 2. Значения, возвращаемые функцией MsgBox
Наилучший тип Переменной возвращаемой функцией MsgBox является Integer.
Объекты Range и Cells
В VBA ячейки рабочего листа трактуются как объект Range. Это наиболее часто используемый объект.
Объект Range при работе с ячейками использует формат А1.
Формат А1. Ссылка состоит из имени столбца (обозначаются буквами от А до IV, 256 столбцов максимально) и номера строки (от 1 до 65536). Например, А77. Для ссылки на диапазон ячей указываются адреса левой верхней и правой нижней ячейки диапазона, разделенных двоеточием. Например, В10:В20, 7:7 (все ячейки в 7-й строке), 5:10 (все ячейки между 5-й и 10-й строками включительно), D:D (все ячейки в столбце D), H:J (все ячейки между столбцами H и J включительно). Признаком абсолютной ссылки является знак доллара перед именем строки или столбца
Объект Cells при работе с ячейками использует формат R1C1.
Формат R1C1 . В формате R1C1, после буквы «R» указывается номер строки ячейки, после буквы «С» -- номер столбца. Например, абсолютная ссылка R1C1 эквивалентна абсолютной ссылке $A$1 для формата А1. Для задания относительной ссылки указывается смешение по отношению к активной ячейке. Смешение указывается в квадратных скобках. Знак указывает направление смещения. Например, R[-3]С (относительная ссылка на ячейку, расположенную на три строки выше в том же столбце). RС (относительная ссылка на ячейку, расположенную на две строки ниже и на два столбца правее). R2С2 (абсолютная ссылка на ячейку, расположенную во второй строке и во втором столбце). R[-1] (относительная ссылка на строку, расположенную выше текущей ячейки), R (абсолютная ссылка на текущую строку).
Полный адрес ячейки может содержать также имя рабочего и адрес книги. После имени листа ставится знак «!», а адрес книги заключается в квадратные скобки. Например: [Книга1.xls]Лист5!D$2.
В качестве объекта Range и могут выступать:
§ отдельная ячейка;
§ выделенный диапазон ячеек;
§ несколько выделенных диапазонов ячеек (т.е. совокупность несмежных диапазонов);
§ строка и столбец;
§ трехмерный диапазон (т.е. состоящий из диапазонов, расположенных на разных рабочих листах).
Свойства объекта Range и Cells
Свойства | Описание и допустимые значения |
Value | Возвращает значение из ячейки или диапазона (в ячейку или диапазон): X=Range(“A1”).Value Range(“A1”).Value=10 |
Name | Возвращает имя диапазона: Range(“B1:B4”).Name=”Приложение” |
Address | Возвращает текущее положение диапазона |
Count | Возвращает количество ячеек в диапазоне |
Offset | Возвращает величину смещения одного диапазона относительно другого |
Resize | Позволяет изменять текущее выделение диапазона |
CurrentRegion | Возвращает текущий диапазон, содержащий указанную ячейку и ограниченный пустыми строкой и столбцом. |
WrapText | True (False) – разрешает (не разрешает) перенос текста при вводе в диапазон. |
EntireColumn, EntireRow | Возвращает строку и столбец. |
ColumnWidth, RowHeight | Возвращает ширину столбцов и высоту строк диапазона. |
Font | Возвращает объект Font (шрифт). Например: With Worksheets(“Z3”).Range(“F10”).Font .Size=22 .Bold=True .Italic=True End With |
Formula | Формула в формате А1. Например, так можно ввести формулу в ячейку C2: Range(“C2”).Formula=”=$B$2+$A$2” |
FormulaLocal | Формула в формате А1 с учетом языка пользователя (для неанглоязычных версий Excel). Например: Range(“C1”).FormulaR1C1= “=ПИ ()” |
FormulaR1C1 | Формула в формате R1C1. Например, Range(“C1”).FormulaR1C1= “=R1C1+2” |
FormulaR1C1Local | Формула в формате R1C1 с учетом языка пользователя (для неанглоязычных версий Excel). |
HorizontalAlignment | Горизонтальное выравнивание. Возможные значения: xlHAlignGeneral (обычное), xlHAlignCenter (по центру), xlHAlignCenterAcrossSelection (по центру выделения), xlHAlignJustify (по ширине), xlHAlignRight (по правому краю), xlHAlignLeft (по левому краю) и другие. |
VerticalAlignment | Вертикальное выравнивание. Возможные значения: xlVAlignBottom (по нижнему краю), xlVAlignCenter (по центру), xlVAlignTop (по верхнему краю) и другие. |
Методы объекта Range и Cells
Методы | Действия |
Address | Возвращает адрес ячейки. |
AutoFit | Автоматически настраивает ширину столбца и высоту строки. Например: Range(“B1:B3”).Columns.AutoFit Использование свойства Columns или Rows в данном случае необходимо, так как значением диапазона должны быть строки или столбцы, иначе будет выдаваться ошибка. |
Clear | Очищает диапазон. Например: Range(“В1:В20”).Clear |
Copy | Копирует диапазон в другой диапазон или буфер обмена (если параметр Destination не задан). Например, так можно скопировать значения диапазона с одного листа (Л1) на другой (Л2): Worksheets(“З1”).Range(“D1:D5”).Copy Destination:=Worksheets(“P2”).Range(“D5”) |
Cut | Копирует диапазон с удалением (вырезает) в другой диапазон или буфер обмена (если параметр Destination не задан). Например, скопируем диапазон ячеек с удалением в буфер обмена: Worksheets(“Лист1”).Range(“D1:E5”).Cut |
Delete | Удаляет диапазон. Параметр Shift определяет направление сдвига ячеек при удалении. Например: Range(“B6:D6”).Delete Shift:=xlShiftToLeft |
Insert | Вставляет ячейку или диапазон ячеек. Например, так можно вставить строку перед шестой строкой на листе «Лист2»: Worksheets(“Лист2”).Rows(6).Insert |
Select | Выделяет диапазон: Range(“A1:C7”).Select |
Методы объекта Range и Cells, реализующие команды Excel
Методы | Действия |
DataSeries | Создает прогрессию. DataSeries(rowcol,date,step,stop,trend) Вручную метод выполняется с помощью команды Правка\Заполнить\Прогрессия |
AutoFill | Автозаполнение. Автоматически заполняет ячейки диапазона элементами последовательности: Объект(Диапазон, Тип). |
AutoFilter | Автофильтр. Реализует запрос на фильтрацию данных на рабочем листе: Объект.AutoFilter(Поле, Условие1, Оператор, Условие2) Соответствует команде Данные\Фильтр\Автофильтр. |
AdvancedFilter | Расширенный фильтр. Соответствует команде Данные\Фильтр\Расширенный фильтр. |
Consolidate | Объединение данных из нескольких диапазонов в одну итоговую таблицу. Соответствует команде Данные\Консолидация. |
Find | Поиск данных. Вручную вызывается командой Правка\Найти. |
TblGoalSeek | Подбор параметра. Вручную выполняется с помощью команды Сервис\Подбор параметра. |
Sort | Сортировка данных. Вручную выполняется с помощью команды Данные\Сортировка |
Subtotal | Добавляет промежуточные итоги. Вручную вызывается командой Данные\Промежуточные итоги. |
Примечание . Следует особо отметить, что в VBA (в отличие от Excel) операция присваивания выполняется независимо от статуса ячейки и не меняет его. Т.е. для присвоение значения ячейке (или для получения её значения) совсем не обязательно, чтобы эта ячейка была активной (вспомните, что в Excel перед вводом в ячейку её необходимо активизировать), не станет она активной (если до этого не была таковой) и после присвоения ей какого-либо значения.
Подобно многим языкам программирования Visual Basic for Application (VBA) позволяет создать три типа процедур: Sub, Function, Property.
Процедура – это набор описаний и инструкций, сгруппированных для выполнения.
Процедура Sub – набор команд, с помощью которого можно решить определенную задачу. При ее запуске выполняются команды процедуры, а затем управление передается в приложение или процедуру, которая вызвала процедуру Sub. Записываемые макросы автоматически описываются как процедуры Sub, любой макрос или другой код VBA, который просто выполняет определенный набор действий, используя приложения Office, и обычно является процедурой Sub.
Процедура Function (или функция) также представляет собой набор команд, который решает определенную задачу. Различия заключается в том, что процедуры данного типа обязательно возвращают значение. При создании процедуры Function можно описать тип данных, который возвращает функция. Функции обычно используются при выполнении вычислений, операциями с текстом, либо возвращают логические значения.
Процедура Property используется для ссылки на свойство объекта. Данный тип процедур применяется для установки или получения значения пользовательских свойств форм и модулей. Процедуры облегчают хранение и применение информации, если использовать их сначала для сохранения в свойстве этой информации, а затем для ее чтения.
Структура процедуры
При записи процедуры требуется соблюдать правила ее описания. Упрощенный синтаксис для процедур Sub является следующим:
Sub имя ([ аргументы] ) Инструкции End SubСинтаксис описания функций очень похож на синтаксис описания процедуры Sub, однако, имеются некоторые отличия:
Function имя ([ аргументы] ) [ As Тип] Инструкции имя = выражение End FunctionИспользование операторов
Процедуры состоят из операторов – наименьших единиц программного кода. Как правило, операторы занимают по одной строке программного кода, и в каждой строке обычно содержится только один оператор, но это не обязательно. В VBA имеется четыре типа операторов: объявления, операторы присваивания, выполняемые операторы и параметры компилятора.
Объявления
Объявление – это оператор, сообщающий компилятору VBA о намерениях по поводу использования в программе именованного объекта (переменной, константы, пользовательского типа данных или процедуры). Кроме того, объявление задает тип объекта и обеспечивает компилятору дополнительную информацию о том, как использовать данный объект. Объявив объект, можно использовать его в любом месте программы.
Переменные – это именованные значения, которые могут изменяться во время выполнения программы.
Рассмотрим пример объявления переменной.
С помощью оператора Dim объявляется переменная с именем МоеЛюбимоеЧисло и объявляется, что значение, которое она будет содержать, должно быть целым:
Dim МоеЛюбимоеЧисло As Integer
Константы представляют собой именованные значения, которые не меняются.
Оператор Constant создает строковую константу (текст) с именем НеизменныйТекст , представляющую собой набор символов Вечность :
Constant НеизменныйТекст = "Вечность"Оператором Type объявляется пользовательский тип данных с именем Самоделкин , определяя его как структуру, включающую строковую переменную с именем Имя и переменную типа Date с именем ДеньРождения . В данном случае объявление займет несколько строк:
Type Самоделкин Имя As String ДеньРождения As Date End TypeОбъявление Private создает процедуру типа Sub с именем СкрытаяПроцедура , говоря о том, что эта процедура является локальной в смысле области видимости. Завершающий процедуру оператор End Sub считается частью объявления.
Private Sub СкрытаяПроцедура () инструкции End SubОператор присваивания
Оператор присваивания = приписывают переменным или свойствам объектов конкретные значения. Такой оператор всегда состоят из трех частей: имени переменной, или свойства, знака равенства и выражения, задающего нужное значение.
Оператор = присваивает переменной МоеЛюбимоеЧисло значение суммы переменной ДругоеЧисло и числа 12 .
МоеЛюбимоеЧисло = ДругоеЧисло + 12
В следующей строке кода, записывается, что свойству Color (Цвет) объекта AGraphicShape присваивается значение Blue (Синий) в предположении, что Blue является именованной константой:
AGraphicShape.Color = Blue
В следующеей строке, чтобы задать значение переменной КвадратныйКорень , для текущего значения переменной МоеЛюбимоеЧисло вызывается функция Sqr - встроенная функция VBA вычисления квадратного корня:
КвадратныйКорень = Sqr (МоеЛюбимоеЧисло)
В VBA выражением называется любой фрагмент программного кода, задающий некоторое числовое значение, строку текста или объект. Выражение может содержать любую комбинацию чисел или символов, констант, переменных, свойств объектов, встроенных функций и процедур типа Function, связанных между собой знаками операции (например, + или *). Несколько примеров выражений:
Выполняемые операторы
Выполняемые операторы делают главную работу в программе и используются для выполнения следующих задач:
- вызов процедуры;
- активизация метода некоторого объекта;
- управление порядком, в котором должны выполняться другие операторы, посредством организации циклов или выбором участка программного кода (из нескольких альтернатив) для последующего выполнения;
- выполнение одного из встроенных операторов VBA или функции.
Пример. Оператор, вызывающий для выполнения метод Rotate объекта AGraphicShape:
AGraphicShape. Rotate(90 )
Запись нескольких операторов
Как правило, каждый оператор занимает одну строку программного кода, но VBA не обязывает уместить оператор в одной строке. Если оператор слишком длинный, можно разместить его в двух или более строках, добавив в конце каждой из строк (кроме последней) символ подчеркивания (_).
Можно сделать и наоборот - разместить несколько операторов в одной строке программного кода. Например,
Dim A As Integer, В As Integer: A = 3 : B = 5 : A = A +B
Эта строка программного кода эквивалентна следующим четырем строкам:
Dim A As Integer , В As Integer A = 3 B = 5 А = А + ВСамыми простыми диалоговыми окнами являются окна сообщений (message boxes) - это диалоговые окна, которые выдают пользователю сообщения и снабжаются одной или более кнопками для выбора. В VBA они создаются с использованием функции MsgBox.
В своей самой простой форме MsgBox используется как оператор с одним аргументом – сообщением, которое должно отображаться. Например, приведенный ниже макрос создаёт сообщение, показанное на рисунке.
Sub Program () MsgBox "Это - окно сообщений" End SubMsgBox можно использовать для отображения числового значения.
Sub ShoeValue() Amount = 10 MsgBox Amount End SubПеременной Amount присваивается значение 10. На следующей строке для отображения значения Amount используется MsgBox. Вокруг Amount нет кавычек, поскольку это – значение переменной, которое нужно выдать на экран, а не слово "Amount".
Чтобы использовать вместе две отдельные строки в одном окне сообщения, следует использовать операцию конкатенации (&) - объединение.
Sub SayGoodNight() Name = "Саша" MsgBox "Пожелайте доброй ночи " & Name End SubПеременной Name присваивается строка "Саша". В строке кода с MsgBox задаётся текстовая строка "Пожелайте доброй ночи ", за которой следует & Name , указывая MsgBox присоединить значение переменной Name к предыдущей текстовой строке.
Опции MsgBox
необязательные аргументы, например, для того, чтобы вставить значок или изменить заголовок (title).
MsgBox "Это - замечательное окно сообщений" , _vbExclamation, "Персональное окно"
Существует четыре значка для окон сообщений. Каждый имеет определённое числовое значение, которое должно передаваться в качестве аргумента MsgBox. Однако вместо числа можно использовать константы со специальными именами, встроенные в VBA.
Таблица 1
Значки окна сообщений MsgBox
Отображение |
Константа |
Когда используется |
для сообщения, не требующего ответа |
||
для того, чтобы задать вопрос |
||
для выдачи важной информации |
||
для предупреждения |
MsgBox как функция
MsgBox является функцией и может возвращать значение, соответствующее той кнопке, которую нажимает пользователь. Одной из имеющихся опций окна сообщения является изменение кнопок, которое оно отображает. Вот окно сообщений, которое появляется, когда осуществляется выход из Excel, имея не сохраненные изменения в документе. Это окно имеет три кнопки.
После выбора соответствующей кнопки Excel получает информацию о том, какую кнопку выбрали.
Общий формат для функции MsgBox:
MsgBox(prompt [ , buttons] [ , title] )
где prompt - единственный обязательный аргумент. Для окна сообщений следует задавать текстовую строку с информацией. если вы хотите изменить заголовок, появляющийся в верхней части окна, задайте для заголовка (title ) текстовую строку. По умолчанию используется заголовок Microsoft Excel.
Таблица 2 Комбинации кнопок MsgBox
Отображение |
Константа |
Когда используется |
vbOKOnly |
Когда не требуется от пользователя принятия решения |
|
vbOKCancel |
Когда окно сообщений объясняет возможное действие. Позволяет пользователю сделать выбор с помощью кнопки Отмена |
|
vbYesNo |
Альтернатива константе vbOKCancel , когда кажется, что это сделает окно сообщений более понятным |
|
vbYesNoCancel |
Для таких ситуаций, как выход или закрытие файлов без сохранения (подобно ситуации, показанной на рисунке выше) |
|
vbAbortRetryIgnore | ||
vbRetryCancel |
При ответе на сообщения об ошибках диска или файла |
Если не указывать, какие кнопки необходимо отображать в окне сообщений, то используется значение по умолчанию, соответствующее кнопке Оk .
Примеры решения задач
Приведем несколько примеров решения задач на VBA.
Пример 1. Вычислить значение выражения a равного
При x = 3, y = 2.5
Решение.
Sub выражение1 () Dim A, x, y x = 3 y = 2.5 A = 2 * x - 3 * y MsgBox (A) End SubПояснение решения.
В строке Dim A, x, y объявляются переменные A, x, y .
Пример 2.
Пример 2. Вычислить значение выражения a равного
При x = 3, y = 2.5
Замечание: значения x и y вводит пользователь.
Решение.
Sub выражение2 () Dim A, x, y As Double x = InputBox("Введите x=" ) y = InputBox("Введите y=" ) A = 2 * x - 3 * y MsgBox (A) End SubПояснение решения.
В строке Dim A, x, y As Double описываются переменные A, x, y как числа двойной точности.
При использовании строки
X = InputBox("Введите x=" )
появиться окно
Пример 3
Пример 3. Вычислить значение выражения a равного
При x = 3, y = 2.5
Замечание: значения x и y вводит пользователь, ответ выводится в виде «a = <значение>».
Решение.
Sub выражение3 () Dim A, x, y As Double Dim ответ As String x = InputBox("Введите x=" ) y = InputBox("Введите y=" ) A = 2 * x - 3 * y ответ = "a=" + Str(A) MsgBox (ответ) End SubПояснение решения.
В строке Dim ответ As String описывается переменная ответ как строковая.
Код Str(A) преобразует значение переменной A в строку.
Пример 4
Пример 4. Вычислить значения выражений при x = 3, y = 2.5
Решение.
Sub выражение4 () Dim A, b, c, d, a1, x, y As Double x = InputBox("Введите x=" ) y = InputBox("Введите y=" ) A = 2 * x - 3 * y b = (2 * x - 3 * y) / 2 c = (2 * x - 3 * y) / 2 * x d = (2 * x - 3 * y) / (2 * x) a1 = (2 * x - 3 * y) / (2 * x) + (5 - x) / (3 + y) MsgBox ("a=" + Str(A) ) MsgBox ("b=" + Str(b) ) MsgBox ("c=" + Str(c) ) MsgBox ("d=" + Str(d) ) MsgBox ("a1=" + Str(a1) ) End SubПример 5
Пример 5. Выполнить пример 4, другим способом, с помощью вспомогательных переменных.
Решение.
Sub выражение5 () Dim A, b, c, d, a1, a2, b1, c1, c2, x, y As Double x = InputBox("Введите x=" ) y = InputBox("Введите y=" ) A = 2 * x - 3 * y b = (2 * x - 3 * y) / 2 c = (2 * x - 3 * y) / 2 * x d = (2 * x - 3 * y) / (2 * x) a1 = (2 * x - 3 * y) / (2 * x) + (5 - x) / (3 + y) ‘ новое решение b1 = A / 2 c1 = b * x c2 = b / (2 * x) a2 = d + (5 - x) / (3 + y) MsgBox ("a=" + Str(A) ) MsgBox ("b=" + Str(b) ) MsgBox ("c=" + Str(c) ) MsgBox ("d=" + Str(d) ) MsgBox ("a1=" + Str(a1) ) MsgBox ("b1=" + Str(b1) ) MsgBox ("c1=" + Str(c1) ) MsgBox ("c2=" + Str(c2) ) MsgBox ("a2=" + Str(a2) ) End SubПример 6
Пример 6. Вычислить площадь треугольника по трем известным сторонам. Например, a = 3 , b = 4 , c = 5 .
Решение .
Sub Герон1 () Dim A, b, c, p, s As Double A = 3 b = 4 c = 5 p = (A + b + c) / 2 s = Sqr(p * (p - A) * (p - b) * (p - c) ) MsgBox ("s=" + Str(s) ) End SubПояснение решения.
Для решения задачи используется формула Герона.
Пример 7
Пример 7. Вычислить площадь треугольника по трем известным сторонам.
Решение.
Sub Герон2 () Dim A, b, c, p, s As Double A = Val(InputBox("Введите a=" ) ) b = Val(InputBox("Введите b=" ) ) c = Val(InputBox("Введите c=" ) ) p = (A + b + c) / 2 s = Sqr(p * (p - A) * (p - b) * (p - c) ) MsgBox ("s=" + Str(s) ) End SubПояснение решения.
Код Val(InputBox("Введите a=")) преобразует введенное значение через InputBox в число, так как InputBox возвращает строку. Если такого преобразования не сделать, то программа правильно вычислять s не будет.
Пример 8
Пример 8. Вычислить гипотенузу прямоугольного треугольника по двум катетам.
Решение.
Sub гипотенуза() Dim a, b, c, p, s As Double a = Val(InputBox("Введите a=" ) ) b = Val(InputBox("Введите b=" ) ) c = Sqr(a ^ 2 + b ^ 2 ) MsgBox ("c=" + Str(c) ) End Sub