Метод Cells делает указанную ячейку активной. Синтаксис метода следующий:
Cells[(N строки, N столбца)]
N строки - номер строки текущего листа Excel,
N столбца – номер столбца текущего листа Excel (при обращении к этому методу столбцы нумеруются).
В данном варианте синтаксиса предполагается, что на активном листе Excel ячейка, находящаяся на пересечении N строки и N столбца, становится активной.
С помощью метода Cells можно сделать активной ячейку, чтобы затем вводить или выводить данные.
Если с помощью этого метода осуществляется ввод данных из ячейки рабочего листа в переменную, то Cells стоит в правой части оператора присваивания, а если осуществляется вывод из переменной в ячейку рабочего листа, то Cells стоит в левой его части.
Структура ввода , с использованием метода Cells следующая:
<
имя
>=Cells (
< имя > - простая переменная или элемент массива.
Структура вывода с использованием метода Cells следующая:
Cells(
< выражение > - любое выводимое значение.
Рассмотрим, пример следующей программы:
Sub ввод_ввывод_Cells()
Cells(5, 1) = "c="
До запуска этого макроса рабочий лист Excel имел вид (см. рис. 13):
А после запуска макроса он выглядит так (см. рис. 14):
Управляющие структуры VBA. Условный оператор. Оператор безусловного перехода
Управляющие структуры позволяют управлять последовательностью выполнения программы. Без операторов управления все операторы программы будут выполняться слева направо и сверху вниз. Рассмотрим одну из управляющих структур VBA – условный оператор .
Условный оператор применяется, когда необходимо выполнить один или группу операторов в зависимости от значения некоторого условия.
Синтаксис условного оператора:
Короткая форма Þ If <условие> Then <оператор>
If < условие > Then
< оператор > /< Группа операторов 1 >
Полная форма ÞIf < условие > Then
< оператор 1 > / < Группа операторов 1 >
< оператор 2> < Группа операторов 2 >
В блок схеме условный оператор изображается так:
Обычно условие является простым сравнением, но оно может быть любым выражением с вычисляемым значением. Это значение интерпретируется как False (Ложь), если оно нулевое, а любое ненулевое рассматривается как True (Истина). Если условие истинно, то выполняются все выражения, стоящие после ключевого слова Then . Если условие ложно, то выполняются все выражения, стоящие после ключевого слова Else .
Допускаются многократно вложенные конструкции, имеющие столько уровней вложения сколько необходимо.
Рассмотри еще одну управляющую структуру - оператор безусловного перехода . Его синтаксис:
GoTo метка ,
где метка – это любая комбинация символов.
Этот оператор принудительно изменяет последовательность выполнения программы. Оператор GoTo передает управление оператору с меткой, т.е. следующим за оператором GoTo будет выполняется оператор, указанный с помощью метки.
Управляющие структуры VBA. Операторы цикла.
Иногда требуется многократно выполнять некоторый набор инструкций автоматически, либо решить задачу по-другому в зависимости от значения переменных или параметров, заданных пользователем во время выполнения. Для этого служат условный оператор и операторы циклы.
Рассмотрим операторы цикла VBA. Цикл с известным числом повторений (цикл с параметром) реализован в VBA с помощью оператора For Next следующей структуры:
For <параметр цикла>= <начальное значение> To <конечное значение>
<операторы VBA>
Next <параметр цикла>
<параметр цикла> – имя (идентификатор) параметра цикла;
<начальное значение> – начальное значение параметра цикла;
<конечное значение> – конечное значение параметра цикла;
<шаг> – шаг изменения параметра цикла (необязательный параметр, если он отсутствует, шаг изменения равен 1);
<операторы VBA>
В блок-схеме этот оператор изображается так:
В теле этого цикла можно использовать оператор Exit For , с помощью которого можно завершить цикл For Next до того, как параметр примет свое конечное значение.
Циклы с неизвестным числом повторений реализуются на VBA с помощью операторов Do While … Loop, Do Until … Loop, Do … Loop While, Do … Loop Until .
Рассмотрим структуру оператора Do While … Loop.
Do While <условие>
<операторы VBA>
Здесь <условие> – логическое выражение;
<операторы VBA> - операторы VBA, реализующие тело цикла.
<условие>, если <условие> принимает значение Истина(True), то выполняются операторы до служебного слова Loop. Затем вновь проверяется условие, и так продолжается до тех пор, пока условие не станет ложным(False).
Рассмотрим структуру оператора Do Until … Loop.
Do Until <условие>
<операторы VBA>
Оператор выполняется следующим образом. Проверяется <условие>, если <условие> принимает значение Ложь(False), то выполняются операторы до служебного слова Loop. Затем вновь проверяется условие, и так продолжается до тех пор, пока условие не станет истинным (True).
В блок схеме этот оператор изображается так:
Мы рассмотрели операторы цикла, которые реализуют цикл с предусловием.
Рассмотрим, операторы цикла, которые реализуют цикл с постусловием. Это операторы Do … Loop While и Do … Loop Until. Структура этих операторов следующая:
<операторы VBA>
Loop Until <условие>
<условие>, если <условие> принимает значение Ложь(False), то опять выполняются операторы до служебного слова Loop. Так продолжается до тех пор, пока <условие> не станет истинным (True).
В блок схеме этот оператор изображается так:
<операторы VBA>
Loop While <условие>
Оператор выполняется следующим образом. Выполняются операторы до служебного слова Loop. Затем проверяется <условие>, если <условие> принимает значение Истина(True), то опять выполняются операторы до служебного слова Loop. Так продолжается до тех пор, пока <условие> не станет ложным (False).
В блок схеме этот оператор изображается так:
В VBA существует оператор, позволяющий осуществить досрочный выход из циклов с неизвестным числом повторений. Для выхода из этих циклов нужно использовать оператор Exit Do .
В этой статье Вы научитесь создавать окно сообщения в VBA Excel, которое может отображать различную информацию.
Функция MsgBox отображает окно сообщения и ждет, когда пользователь нажмет кнопку, а затем действие будет выполнено на основе кнопки, нажатой пользователем.
Синтаксис
MsgBox(prompt[,buttons][,title][,helpfile,context])
Параметр Описание
- Запрос - обязательный параметр. Строка, отображаемая в виде сообщения в диалоговом окне. Максимальная длина приглашения - около 1024 символов. Если сообщение распространяется более чем на одну строку, то строки могут быть разделены с использованием символа возврата каретки (Chr (13)) или символа перевода строки (Chr (10)) между каждой строкой.
- Кнопки - необязательный параметр. Числовое выражение, которое указывает тип отображаемых кнопок, стиль значка для использования, идентификатор кнопки по умолчанию и модальность окна сообщения. Если оставить пустым, значение по умолчанию для кнопок равно 0.
- Заголовок - необязательный параметр. Строковое выражение отображается в строке заголовка диалогового окна. Если заголовок оставлен пустым, имя приложения помещается в строку заголовка.
- Файл справки - необязательный параметр. Выражение String, которое идентифицирует файл справки, который будет использоваться для предоставления контекстно-зависимой справки для диалогового окна.
- Контекст - необязательный параметр. Числовое выражение, которое идентифицирует номер контекста справки, присвоенный автору справки, в соответствующий раздел справки. Если контекст предоставлен, также должен быть предоставлен справочный файл.
Параметр Buttons может принимать любое из следующих значений:
- 0 vbOKOnly - отображает только кнопку OK.
- 1 vbOKCancel - отображает кнопки «ОК» и «Отмена».
- 2 vbAbortRetryIgnore - отображает кнопки отмены, повтора и игнорирования.
- 3 vbYesNoCancel - отображает кнопки «Да», «Нет» и «Отмена».
- 4 vbYesNo - отображает кнопки «Да» и «Нет».
- 5 vbRetryCancel - отображает кнопки повтора и отмены.
- 16 vbCritical - отображает значок критического сообщения.
- 32 vbQuestion - отображает значок предупреждения.
- 48 vbExclamation - отображает значок предупреждающего сообщения.
- 64 vbИнформация. Отображает значок информационного сообщения.
- 0 vbDefaultButton1 - первая кнопка по умолчанию.
- 256 vbDefaultButton2 - вторая кнопка по умолчанию.
- 512 vbDefaultButton3 - Третья кнопка по умолчанию.
- 768 vbDefaultButton4 - Четвертая кнопка по умолчанию.
- 0 vbApplicationModal Application modal - текущее приложение не будет работать, пока пользователь не ответит на сообщение.
- 4096 vbSystemModal System modal - все приложения не будут работать, пока пользователь не ответит на сообщение.
Вышеуказанные значения логически разделены на четыре группы: первая группа (от 0 до 5) указывает кнопки, которые будут отображаться в окне сообщения. Вторая группа (16, 32, 48, 64) описывает стиль значка, который будет отображаться, в третью группу (0, 256, 512, 768) указывает на то, какая кнопка должна быть по умолчанию, а четвертую группу (0, 4096) определяет модальность окна сообщения.
Возвращаемые значения
Функция MsgBox может возвращать одно из следующих значений, которое может использоваться для идентификации кнопки, которую пользователь нажал в окне сообщения.
- 1 - нажата кнопка vbOK - OK.
- 2 - vbCancel - нажата кнопка Отмена
- 3 - vbAbort - нажата кнопка Abort
- 4 - vbRetry - нажата кнопка Retry
- 5 - vbIgnore - нажата кнопка Ignore
- 6 - vbYes - нажата кнопка «Да»
- 7 - vbNo - Нет щелчка
Sub MessageBox_Demo() "Простое сообщение MsgBox ("Привет") "Сообщение с заголовком и кнопками да, нет и отмена a = MsgBox("Вам нравится синий цвет", 3, "Выберите ответ") "Код нажатой кнопки MsgBox ("Значение ответа " & a) End Sub
MsgBox по шагам
Шаг 1 - Вышеуказанная функция может быть выполнена либо нажатием кнопки «Выполнить» в окне VBA, либо нажатием на кнопку, которую Вы сами добавили на лист Excel.
Шаг 2 - Простой текстовый ящик отображается с сообщением «Добро пожаловать» и кнопкой «ОК»
Осуществляется с помощью встроенных функций 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
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 перед вводом в ячейку её необходимо активизировать), не станет она активной (если до этого не была таковой) и после присвоения ей какого-либо значения.
Любая процедура состоит из трех частей: ввода, выполнения и вывода. Ввод - это информация, необходимая для выполнения процедуры; вывод - это то, что получилось в результате выполнения процедуры.
Свойства объектов, значения ячеек и значения переменных - все это примеры ввода. Данные ввода можно получить во время выполнения процедуры от пользователя. Это называется пользовательским вводом.
Наиболее простая форма пользовательского ввода - это щелчок на кнопке в окне сообщения. Немного сложнее - это ввод одного значения в поле ввода диалогового окна.
4.1.1 Окно сообщения
С помощью окна сообщения функции MsgBox() вы можете задать вопрос, а затем, в зависимости от ответа, выполнить то или иное действие.
Функция MsgBox() имеет пять аргументов:
MsgBox(Prompt:=[, Buttons:=] [, Title:=] [, HelpFile:=, Context:=])
АргументPrompt определяет сообщение, которое появится в диалоговом окне. Наберите текст (в кавычках). Используйте переменную типа string или объединенные строковые переменные и строки со значком &, например:
“Этот экран высотой в "& AppIication.UsableHeight &" точек"
АргументButtons определяет, какие кнопки появятся в окне сообщения. Укажите их, используя такие константы, как vbExclamation или vbOK. Эти константы VBA представляет как числа. Хотя вместо констант можно применять числа для обозначения кнопок, однако рекомендуем использовать константы, поскольку при этом вы получите легко читаемый код. Параметры аргумента Button можно разделить на несколько групп. Две наиболее важные - это пиктограммы и кнопки. В окне сообщения вы можете поместить четыре типа пиктограмм и шесть типов кнопок. Другие параметры определяют, какая кнопка считается нажатой по умолчанию и работа какого приложения приостанавливается, когда появляется диалоговое окно, – только Excel или вообще всех приложений. В таблице 4.1 приведены эти параметры.
Таблица 4.1 – Значения константы аргумента Button функции MsgBox
Константа | Значение | Описание |
VbOKonly | Выводит кнопку ОК | |
VbOKCancel | Выводит кнопки ОК и Отмена | |
VbAbortRetryIgnore | Выводит кнопки Прекратить, Повторить и Игнорировать | |
VbYesNoCancel | Выводит кнопки Да, Нет и Отмена | |
VbYesNo | Выводит кнопки Да и Нет | |
VbRetryCancel | Выводит кнопки Повторить и Отмена | |
VbCritical | Выводит пиктограмму Critical Message (Критическое сообщение) | |
VbQuestion | Выводит пиктограмму Question mark (Предупреждающий запрос) | |
VbExclamation | Выводит пиктограмму Exclamation (Предупреждение) | |
VbInformation | Выводит пиктограмму Information | |
VbDefaultButton1 | Принимает по умолчанию первую кнопку | |
VbDefaultButton2 | Принимает по умолчанию вторую кнопку | |
VbDefaultButton3 | Принимает по умолчанию третью кнопку | |
VbApplicationModal | Excel прекращает работу закрытия окна сообщения | |
VbSystemModal | Приостанавливается работа всех приложений до закрытия окна сообщения |
Для того чтобы в окне сообщения отобразилось несколько кнопок, соедините константы знаком «плюс». Нельзя вывести в окне сообщения две пиктограммы, но можно управлять как пиктограммой, так и типом появляющихся кнопок. Окно сообщения появляется всегда только в центре экрана. Если никакая другая кнопка не указана, в окне сообщения отображается только кнопка ОК.
Аргумент Title определяет заголовок окна сообщения. Как и Prompt, этот аргумент должен быть строкой, строковой переменной или объединением строк и строковых переменных. Вы можете не указывать этого аргумента, тогда по умолчанию названием окна сообщения будет Microsoft Excel.
Для того чтобы указать текущую справку, используйте четвертый и пятый аргумент (или проигнорируйте их). Аргумент HelpFile - имя файла справки, а аргумент Context указывает раздел в нем. Если вы указали один из этих аргументов, то должны указать и второй. При этом Excel автоматически добавит кнопку справки в окно сообщения.
Следующий код отображает два окна сообщения: первое с заголовком - "Системн_информ" - содержит пиктограмму с восклицательным знаком и сообщение об используемой высоте экрана; второе с заголовком - "Системная информация" - содержит сообщение об используемой ширине экрана.
Sub ShowMessageOK()
MsgBox Prompt:=" Высота этого экрана составляет" _
& Application.UsableHeight & " точек", Buttons:=vbExclamation, Title:="Системн_информ"
MsgBox "Ширина этого экрана " & Application.UsableWidth & _
" точек", vbInformation, "Системная информация"
4.2 Принятие решения
Очень просто вывести на экран несколько кнопок: используйте константы, указанные в таблице 3.1. Вы можете вывести окна сообщения с кнопками Да и Нет, кнопками Да, Нет и Отмена, а также кнопками Прекратить, Повторить, Игнорировать. Проанализировав в коде значение, возвращенное функцией MsgBox (таблица 4.2), можно определить, какая кнопка нажата, и направить выполнение программы по нужному пути.
Таблица 4.2 – Значения, возвращаемые функцией MsgBox
Константа | Значение | Нажатая кнопка |
VbOK | ОК | |
VbCansel | Отмена | |
VbAbort | Прервать | |
VbRetry | Повторить | |
VbIgnore | Пропустить | |
VbYes | Да | |
VbNo | Нет |
Следующий пример кода выводит окно сообщения с кнопками Да и Нет. Если пользователь щелкнет на кнопке Да, то появится другое окно сообщения с надписью "Продолжаю. . . ". Если пользователь щелкнет на кнопке Нет, появится сообщение "Процесс прерван". Второй аргумент использует vbQuestion плюс vbYesNo: окно сообщения будет содержать знак вопроса и кнопки Да и Нет.
Sub VoprosYesNo()
Dim Indik As Integer
Indik = MsgBox("Хотите продолжать?", vbQuestion + vbYesNo, "Вопрос пользователю")
If Indik = vbYes Then
MsgBox "Продолжаю. . .", vbInformation, "Системное сообщение"
MsgBox "Процесс прерван", vbCritical, "Системное сообщение"
В этом примере кода показаны два способа использования функции MsgBox. В первом случае круглые скобки ставятся сразу после слова MsgBox и после третьего аргумента. Это означает, что используется возвращаемое значение функции MsgBox. Следующие две функции не используют возвращаемого значения, поэтому круглые скобки не ставятся. Кнопки, расположенные в окне сообщения, определяют значение возвращаемой величины. Возвращаемое значение функции MsgBox является константой, которая начинается с vb и заканчивается словом, написанным на кнопке, например ОК или Отмена. Если в окне сообщения находятся кнопки Да и Нет, то функция MsgBox возвращает значение vbYes или vbNo.
В данном коде переменная Indik равна результату функции MsgBox. Команда If проверяет, равняется ли значение Indik vbYes; если да, она выполняет соответствующие действия.
4.3 Окно ввода
Функция InputBox() немного сложнее, чем MsgBox(), и позволяет ввести реальное значение или текстовую строку. Поскольку InputBox() получает значение, её бессмысленно применять, не используя введенное значение. Поэтому эта функция всегда записывается с круглыми скобками.
Функция InputBox() может иметь до семи аргументов:
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
Необходимым является только первый - Prompt, в котором указывается сообщение в окне. Вторым является Title.
Третьим – значение окна ввода, принимаемое по умолчанию. Четвертый и пятый аргументы указывают положение окна ввода. Если они пропускаются, окно будет располагаться посередине экрана.
Шестой и пятый аргументы определяют файл справки и его раздел. Если вы используете один из них, то необходимо использовать и другой. Тогда Excel добавит к окну ввода кнопку Справка.
Функция InputBox() всегда возвращает строку. Даже если пользователь введет число – в действительности это строка. В большинстве случаев VBA переводит строку в число. Однако иногда перевод осуществляется неправильно. В таком случае нужно перевести возвращаемое значение в другой тип данных. Используйте для этого одну из функций перевода, например функцию Сint (значение), которая переводит возвращаемое значение в целое число.
Щелкая на кнопке Отмена, вы ожидаете, что возвращаемой величиной будет vbCancel. Однако это неверно. Поскольку InputBox() возвращает строку, щелчок на кнопке Отмена приведет к тому, что будет возвращена пустая строка (набор кавычек - ""). Рассмотрите следующий пример, если ничего не введено (пустая строка), то происходит выход из подпрограммы.
Sub Vvod_lnputBox()
Dim s As String, sreal As Single
s = InputBox(Prompt:="Какая зарплата?:", _
Title:="Вопрос", Default: =550)
If s = "" Then Exit Sub
sreal = CSng (s)
MsgBox "Зарплата составляет" & s & " налоги " & sreal * 0.13
Иногда необходимо, чтобы пользователь ввел только конкретный тип данных. В этом случае используйте метод InputBox() вместо функции InputBox(). Поставив Application. перед InputBox(), вы укажете VBA, что необходимо использовать метод Excel InputBox(), а не функцию VBA. У метода InputBox() имеется еще и восьмой аргумент - Type. Указав тип, вы тем самым требуете (от пользователя) ввести только определенный тип данных. Чтобы разрешить ввод нескольких типов данных, добавьте значения различных типов данных. Однако если вы используете метод InputBox(), щелчок на кнопке Отмена возвращает значение False, а не пустую строку.
4.4 Ввод-вывод при помощи ячеек Excel
Для ввода исходных данных из конкретных ячеек рабочего листа Excel, а также для вывода результатов расчета в ячейки может быть эффективно применен объект ActiveCell. Объект Range используется для указания ячеек. Объект ActiveCell указывает на ячейку (или объект Range), который имеет фокус при вводе данных с клавиатуры. Для этого используется свойство Value. Например, в ячейку с адресом А5 необходимо записать значение переменной Rost:
Range(“A5”).Select
ActiveCell.Value = Rost
Обратная процедура выполняется аналогично:
Rost = ActiveCell.Value
Если есть необходимость считывать большое число данных из различных ячеек, адреса которых можно вычислить, целесообразно использование метода Offset(R,C), где R – смещение на R строк вниз относительно строки активной ячейки, C – смещение на С столбцов вправо относительно столбца активной ячейки. Например, следующая строка записывает значение переменной Rost в ячейку В7.