1. Функция InputBox
Функция InputBox имеет следующий синтаксис:
Переменная = InputBox (Приглашение[, Заголовок] [, по_умолчанию] [, Xпоз] [, Yпоз] [, файл_справки, содержание])
Эта функция требует обязательного задания только аргумента Приглашение Значение аргумента Приглашение – единственный обязательный аргумент этой функции, служит текстовая строка, которая отображается в диалогом окне ввода в качестве сообщения. Этот текст должен быть заключен в двойных кавычках.
Аргумент Заголовок используется для задания текста, который помещается в строке заголовка окна ввода. Если этот аргумент не задан, то в строке заголовка отображается Microsoft Excel.
Аргумент по_умолчанию задает значение, которое отображается по умолчанию в поле ввода, пока пользователь не введет свое значение. Если этот аргумент опустить, то поле ввода отображается пустым.
Необязательные аргументы Xпоз и Yпоз задают положение окна ввода на экране. Аргументы файл_справки и содержание используются в том случае, если вы создаете для своего приложения собственную систему справок.
Возвращаемым значением функции InputBox является значение, введенное пользователем в поле ввода.
2. Функция MsgBox
Окно сообщения создаётся функцией MsgBox, которая имеет следующий синтаксис:
Переменная = MsgBox (Приглашение[, Кнопки] [, Заголовок [, файл_справки, содержание])
Значение аргумента Приглашение – единственный обязательный аргумент этой функции, служит текстовая строка, которая отображается как сообщение в диалогом окне. Этот текст должен быть заключен в двойных кавычках. Отметим использование круглых скобок в синтаксисе MsgBox – они указывают на то, что в данном случае MsgBox является функцией, возвращающей какое-либо значение. Если скобки опущены, то для VBA это признак того, что данное выражение значение не возвращает. Если Вы хотите возвращать значение, надо использовать код, подобный следующему:
Dim i As Integer
i = MsgBox (“Сохранить изменения в ‘ “ & ThisWorkbook.Name & “ ‘& “, vbYesNoCancel + vbExclamation)
Результатом работы такого кода в 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[2]С[2] (относительная ссылка на ячейку, расположенную на две строки ниже и на два столбца правее). 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 перед вводом в ячейку её необходимо активизировать), не станет она активной (если до этого не была таковой) и после присвоения ей какого-либо значения.