Язык визуального программирования приложений Visual Basic for Applications
Основные объекты VBA
Объекты Range и Selection
- Адресация ячеек
- Задание групп строк и столбцов с помощью объекта Range
- Связь объекта Range и свойства Cells
- Свойства и методы объекта Range
|
В иерархии Excel объект Range (диапазон) идет сразу после объекта worksheet. Объект Range является одним из ключевых объектов VBA. Объект Selection (выбор) возникает в VBA двояко — либо как результат работы метода Select, либо при вызове свойства selection. Тип получаемого объекта зависит от типа выделенного объекта. Чаще всего объект Selection принадлежит классу Range и при работе с ним можно использовать свойства и методы объекта Range. Интересной особенностью объектов Range и selection является то, что они не являются элементами никакого семейства объектов.
Адресация ячеек
При работе с объектом Range необходимо помнить, как в Excel ссылаются на ячейку рабочего листа. Имеются два способа ссылки на ячейки рабочего листа: относительная адресация (т. е. когда начало координат, задающее нумерацию строк и столбцов, связывается с объектом, вызвавшим Range) и абсолютная адресация.
Относительная адресация:
|
|
|
|
|
Формат А1
|
Имя ячейки состоит из имени столбца (их 256 — А, В, ..., Z, АВ, ..., HZ, IA, ..., IV) и номера (1, ...., 16384).
|
|
|
|
Например, A1, C2
|
|
|
Формат R1C1
|
Адресация задается индексом строки и индексом столбца. Например, R1C1, R2C3
|
|
|
|
|
|
Абсолютная адресация:
|
|
|
|
|
Формат А1
|
Признаком абсолютной адресации является знак "$", предшествующий имени строки (абсолютной адресации на строку) или столбца (абсолютной адресации на столбец). Например, $А10, А$10 и $А$10 задают абсолютную адресацию на столбец А, строку 10 и ячейку А10 соответственно
|
|
|
Формат R1C1
|
Указывается смещение по отношению к активной ячейке. Смещение приводится в квадратных скобках, причем знак указывает на направление смещения. Например, если активной ячейкой является касз, то R[i]C[-1] дает ссылку на ячейку кзс2
|
|
|
|
|
|
Адресация ячейки рабочего листа является лишь частью полного адреса ячейки, который в общем случае включает имя рабочего листа и адрес книги. При задании полного адреса за именем листа следует знак "!", а адрес книги заключается в скобки. Например,
А1
Лист2!А1
[МояКнига.хls]Лист2!А1
В первой строке данного примера дана относительная ссылка на ячейку AI активного рабочего листа, во второй — на ячейку AI рабочего листа листа активной книги, а в третьей на ячейку AI рабочего листа лист2 книги моякнига-xls текущего рабочего каталога.
Задание групп строк и столбцов с помощью объекта Range
Если в диапазоне указываются только имена столбцов или строк, то объект Range задает диапазон, состоящий из указанных столбцов или строк. Например, Range ("А: с") задает диапазон, состоящий из столбцов А, в и с, а Range {"2: 2") - из второй строки. Другим способом работы со строками и столбцами являются методы ROWS (строки) и Columns (столбцы), возвращающие коллекции строк и столбцов. Например, столбцом А является columns (1), а второй строкой - ROWS (2).
Связь объекта Range и свойства Cells
Так как ячейка является частным случаем диапазона, состоящим только из единственной ячейки, объект Range также позволяет работать с ней. Объект cells (ячейки) — это альтернативный способ работы с ячейкой. Например, ячейка А2 как объект описывается Range ("A2") или cells (1,2). В свою очередь объект ceils, вкладываясь в Range, также позволяет записывать диапазон в альтернативном виде, который иногда удобен для работы, а именно,
Range ("А2:C3") И Range(Cells(1,2), Cells(3,3))
Определяют один и тот же диапазон.
Свойства и методы объекта Range
Объект Range позволяет сочетать гибкость VBA и мощь рабочего листа Excel. Более 400 встроенных функций рабочего листа существенно упрощают и делают более наглядным программирование на VBA.
Далее приводятся наиболее часто используемые свойства и методы объекта
Range.
Перечислим основные свойства объекта Range.
|
|
|
|
|
Value
|
Возвращает значение из ячейки или в ячейки диапазона. В данном примере переменной х присваивается значение из ячейки C1 :
х = Range ("C1") .Value В следующем примере в диапазон AI : В2 введена 1 :
Range ("A1:B2") .Value = 1
|
|
|
Name
|
Возвращает имя диапазона. В данном примере диапазону А1:В2 присваивается имя итоги:
Range ( "Al :B2") .Name = "Итоги"
|
|
|
Count
|
Возвращает число объектов в наборе. В данном примере переменной х присваивается значение, равное числу строк диапазона AI : В2 :
х = Range ( "Al :B2") .Rows . Count
|
|
|
CurrentRegion
|
Возвращает число строк текущего диапазона. Текущим является диапазон, ограниченный пустыми строками и столбцами и содержащий данный элемент. В следующем примере переменной у присваивается значение, равное числу строк в текущем диапазоне, содержащем ячейку AI :
у = Range ( "Al" ). CurrentRegion. Rows . Count
|
|
|
WrapText
|
Позволяет переносить текст при вводе в диапазон. Допустимые значения True и False. В следующем примере в ячейку В2 вводится текст длинный текст и в этой ; ячейке устанавливается режим ввода текста с переносом: With Range ("B2") .Value = "Длинный текст" .WrapText = True End With
|
|
|
|
|
|
|
|
|
|
|
EntireColumn, EntireRow
|
Возвращает столбец и строку соответственно. В данном примере очищается содержимое строки и выделяется столбец с активной ячейкой:
ActiveCell . EntireRow. Clear ActiveCell .EntireColumn. Select
|
|
|
ColumnWidth, RowHeight
|
Возвращает ширину столбцов и высоту строк диапазона соответственно
|
|
|
Comment
|
Возвращает объект comment (примечание), который связан с левым верхним углом диапазона при отображении на экране. Объект comment является элементом семейства comments. Метод AddComment, примененный к диапазону, создает новое примечание. Среди методов объекта comment отметим только метод Text, который задает текст, выводимый в примечании. Синтаксис:
Text (Text, Start, Overwrite)
- Text — строка, выводимая в качестве примечания П start — с какого символа вводится текст в уже существующее примечание. Если аргумент опущен, то из примечания удаляется весь ранее введенный текст П overwrite — допустимые значения: True (вводимый текст записывается поверх уже существующего) и False (вводимый текст вставляется в уже существующий) Среди свойств объекта Comment отметим только свойство visible, устанавливающее отображение примечания при активизации диапазона, имеющего определенное примечание. В качестве примера рассмотрим следующие инструкции, которые создают и отображают примечание ячейки вз, поясняющее запланированное событие (рис. 3.1):
With Range ("ВЗ")
.AddComment
.Text Text:= "Чрезвычайно важно!" & Chr(10) & "Про это никак нельзя забыть ! "
.Visible = True End With |
|
|
|
|
|
Рис. 2.1. Пример отображения примечания на рабочем листе
|
|
|
|
|
Font
|
Возвращает объект Font (шрифт). Объект Font имеет следующие свойства:
- Name — строка, указывающая имя шрифта, например "Arial Cyr"
- FontStyle — СТИЛЬ, возможен Regular (обычный), Bold (ПОЛУЖИРНЫЙ), Italic(курсив), Bold italic (полужирный курсив)
- size - размер
- strikethrough — допустимы два значения: True (буквы имеют линию по центру, как будто они перечеркнуты) и False (не имеют линии по центру)
- Superscript — допустимы два значения: True (текст используется как верхний индекс) и False (не используется как верхний индекс)
- Subscript — допустимы два значения: True (текст используется как нижний индекс) и False (не используется как нижний индекс)
- Underline-допустимыми являются значения:
- xlNone (нет подчеркивания)
- xlSingie (одинарное, по значению)
|
|
|
|
|
|
|
|
|
|
|
|
- xlDoubie (двойное, по значению)
- xlsingleAccounting (одинарное, по ячейке)
- Accounting (двойное, но ячейке)
Например, в следующем примере устанавливается для диапазона AI : в2 полужирный шрифт, красного цвета и с высотой символов 1 4 :
With Range ("A1:B2").Font
.Size = 14
.FontStyle = Bold
.Colorlndex = 3
End With
|
|
|
Formula
|
Возвращает формулу в формате Al. Например, следующая инструкция вводит в ячейку с2 формулу =$А$4+$А$ю:
Range ("C2") . Formula = "=$А$4+$А$10"
|
|
|
FormulaArray 1
|
Возвращает формулу диапазона в формате А1. В отличие от обыкновенной формулы рабочего листа, формула диапазона вводится на рабочем листе не посредством нажатия на клавишу <Enter>, а с помощью комбинации клавиш <Ctrl>+<Shift>+<Enter>. Следующая инструкция вводит в диапазон Е!:ЕЗ формулу {=Sum(Al:A3*Bl:B3) }:
Range ( "El :E3") .FormulaArray = "=Sum(Al:A3*Bl:B3) "
|
|
|
FormulaHidden
|
Допустимые значения: True (формула спрятана, если рабочий лист или книга защищены) и False (в противном случае). Например, следующая инструкция скрывает формулы в столбце А: Columns ("A") . FormulaHidden = True
|
|
|
FormulaLocal
|
Возвращает неанглоязычные (местные) формулы в формате А1. Например, следующая инструкция вводит в ячейку В2 формулу =СУММ(С1:С4):
Range("B2"). FormulaLocal = "=СУММ (С1:С4) "
|
|
|
JormulaRlCl
|
Возвращает формулу в формате R1C1. Например,
Range ("Bl") . FormulaRlCl = "=SQRT (R3C2 ) "
|
|
|
FormulaRlCl Local
|
Возвращает неанглоязычные формулы в формате R1C1
|
|
|
Text
|
Возвращает содержание диапазона в текстовом формате
|
|
|
|
|
|
|
|
|
|
|
HorizontalAlignment
|
Горизонтальное выравнивание. Допустимые значения:
- xlceneral (обычное выравнивание, зависящее от типа вводимых значений)
- xlcenter (выравнивание по центру)
- xlRight (выравнивание по правому краю)
- xlLeft (выравнивание по левому краю)
- xUustify (выравнивание по ширине)
- xlCenterAcrossSelection (выравнивание по центру в выделенном диапазоне)
- xlFill (выравнивание по ширине
|
|
|
Vertical Alignment
|
Вертикальное выравнивание. Допустимые значения:
- xlBottom (выравнивание по нижнему краю),
- xlcenter (выравнивание по центру),
- xUustify (выравнивание по высоте),
- xlTop (выравнивание по верхнему краю)
|
|
|
Orientation
|
Ориентация. Допускается либо угол поворота текста в градусах от —90° до 90°, либо одно из допустимых значений:
- xlDownward (выравнивание по левому краю сверху вниз, соответствует углу —90°)
- xlHorizontal(выравнивание по горизонтали, соответствует нулевому углу )
- xlupward (выравнивание по правому краю снизу вверх, соответствует углу 90°)
- xlvertical (выравнивание по вертикали, нет соответствия в градусах)
|
|
|
ShrinkToFit
|
Допустимые значения: True (автоматическое изменение шрифта так, чтобы текст помещался в ячейку) и False (в противном случае)
|
|
|
|
|
|
Ниже приведены наиболее часто используемые методы объекта Range.
|
|
|
|
|
Address
|
Возвращает адрес ячейки.
Синтаксис:
Address (rowAbsolute, coluimAbsolute, referenceStyle, external, relativeTo)
Аргументы:
- RowAbsoiute — допустимы два значения True и False, если используется значение True или аргумент опущен, то возвращается абсолютная ссылка на строку
- ColumnAbsoiute — допустимы два значения True и False, если используется значение True или аргумент опущен, то возвращается абсолютная ссылка на столбец
- ref erenceStyle — допустимы два значения xlAl и
xiR1c1, если используется значение X1A1 или аргумент опущен, то возвращается ссылка в виде формата А1 П external — допустимы два значения True и False, если используется значение False или аргумент опущен, то возвращается относительная ссылка
- relativeTo — В случае, если rowAbsoiute и СolumnAbsoiute равны False, a referenceStyle X1R1C1, то данный аргумент определяет начальную ячейку диапазона, относительно которой производится адресация Следующий пример показывает различные результаты адресации.
MsgBox Cells (1, 1). Address ()
'
' В диалоговом окне отображается адрес $А$1 MsgBox Cells (1, 1) .Address (rowAbsoiute:=False)
'
' В диалоговом окне отображается адрес $А1 '
MsgBox Cells (1, 1) .Address (ref erenceStyle :=x1R1C1) '
' В диалоговом окне отображается адрес R1C1 '
|
|
|
|
|
|
|
|
|
|
|
Clear, ClearComments , Clear Contents, ClearFormats
И |
Метод clear очищает диапазон. В следующем примере очищается диапазон Al :G37 . Range ("A1:G37") .Clear
Методы ClearComments, ClearContents, ClearFormats и ClearNotes очищают В диапазоне |
|
|
AutoFit
|
Автоматически настраивает ширину столбца и высоту строки
|
|
|
ClearNotes
|
комментарии, содержание, форматы и примечания соответственно.
|
|
|
Copy
|
Копирует диапазон в другой диапазон или в буфер обмена.
Синтаксис:
Copy (destination)
- Аргумент destination определяет диапазон, куда копируется данный диапазон. Если аргумент destination опушен, то копирование происходит в буфер обмена. В данном примере диапазон AI : D4 рабочего листа Лист! копируется в диапазон Е5:Н8 листа лист2:
Worksheets ("Лист1" ) . Range ( "А1 : D4 " ) .Сору destination :=Worksheets ("Лист2") .Range ("E5")
|
|
|
Cut
|
Копирует диапазон с удалением в указанный диапазон или в буфер обмена,
Синтаксис:
Cut (destination)
- Аргумент destination определяет диапазон, в который копируется данный диапазон. Если аргумент destination опущен, то диапазол копируется в буфер обмена. В данном примере диапазон AI : D4 рабочего листа лист! копируется с удалением в буфер обмена:
Worksheets ( "Лист1 " ) . Range ( "А1 : D4 " ) . Cut
|
|
|
Delete
|
Удаляет диапазон. В данном примере удаляется третья строка активной рабочей страницы:
Rows (3) .Delete
|
|
|
Columns, Rows
|
Возвращают соответственно семейства столбцов и строк, из которых состоит диапазон. В следующем примере переменным i и j присваиваются значения, равные количеству столбцов и строк в выделенном диапазоне соответственно:
i = Selection. Columns . Count j = Selection. Rows . Count
|
|
|
Insert
|
Вставка ячейки или диапазона ячеек. В следующем примере вставляется новая строка перед четвертой строкой рабочего листа Лист1:
Worksheets ( "Лист1" ) . Rows (4 ) .Insert
|
|
|
Offset
|
Возвращает диапазон, смещенный относительно данного на величины, специфицированные в аргументах.
Синтаксис:
Of fset (rowOffset, columnOf f set )
Аргументы:
- rowOffset — целое число, указывающее сдвиг по строкам
- columnOf f set — целое число, указывающее сдвиг по столбцам Например, в следующем примере активизируется ячейка, расположенная на три строки ниже и на два столбца левее относительно предыдущей активной ячейки:
ActiveCell.Offset (rowOf fset :=3, columnOf fset : =-2) .Activate
|
|
|
|
|
|
|
Select
|
Выделение диапазона
|
|
|
PasteSpecial
|
Специальная вставка из буфера обмена.
Синтаксис:
BasteSpecial (paste, operation, skipBlanks, transpose)
Аргументы:
- Paste — определяет ту часть содержимого буфера обмена, которая должна быть вставлена в диапазон. Допустимые значения:
- xlAll (все)
- xl Formulas (формулы)
- xlvaiues (значения)
- xlFormats (форматы)
- xlNotes (примечания)
- xlAllExceptBorders (без рамки)
- Operation — определяет операции.Допустимые значения:
- xlNone (нет)
- xlAdd (СЛОЖИТЬ)
- xlSubtract (ВЫЧИСТЬ)
- xlMultiply (УМНОЖИТЬ)
- xlDivide (разделить)
- SkipBlanks — допустимые значения: True (пустые ячейки при вставке не учитываются) и False (пустые ячейки учитываются)
- Transpose — допустимые значения True (диапазон выводится транспонированным) и False (не транспонированным)
В приведенном ниже примере данные из диапазона C1:C5 рабочего листа лист1 вставляются в диапазон D1 : D5 того же листа, причем они не заменяют уже существующие данные в диапазоне D1:D5, а прибавляются к ним данные из диапазона C1 : С5 :
Worksheets ( "Лист1 " ) . Range ( "С1 : С5 " ) . Сору Worksheets ("Лист1") .Range ("D1: D5") . PasteSpecial operation : =xlAdd
Метод PasteSpecial программирует выполнение на рабочем листе команды Правка, Специальная вставка (Edit, Paste Special). Аргументы метода PasteSpecial соответствуют установкам диалогового окна Специальная вставка (Paste Special), отображаемого с помощью этой команды (рис. 3.2)
|
|
Рис. 2.2. Диалоговое окно Специальная вставка
|
|
|
|
|
AddComment
|
Добавляет примечание к диапазону.
Синтаксис:
AddComment (Text)
- Text — строковое выражение добавляемое в качестве примечания В следующем примере создается примечание внимание ! ячейки AI активного рабочего листа:
Range ( "А! " ) . AddComment "Внимание!"
|
|
|
|
|
|
к оглавлению ООП 3GL к 4GL - визуальному программированию
|