|
Ниже приведены наиболее часто используемые методы объекта Range.
Address | Возвращает адрес ячейки. Синтаксис: Address(rowAbsolute, columnAbsolute, _ referenceStyle, external, relativeTo) Аргументы: -rowAbsolute — допустимы два значения True и False, если используется значение True или аргумент опущен, то возвращается абсолютная ссылка на строку - columnAbsolute — допустимы два значения True иFalse, если используется значение True или аргумент опущен, то возвращается абсолютная ссылка на столбец - referenceStyle — допустимы два значения x1A1 и: x1R1c1, если используется значение x1A1 или аргумент опущен, то возвращается ссылка в виде формата А1 - external — допустимы два значения True и False, если используется значение False или аргумент опущен, то возвращается относительная ссылка - relativeTo — В случае, если rowAbsolute и columnAbsolute равны False, a referenceStyle — x1Rlc1, то данный аргумент определяет начальную ячейку диапазона, относительно которой производится адресация Следующий пример показывает различные результаты i адресации. MsgBox Cells(1, 1).Address() ' В диалоговом окне отображается адрес $А$1 MsgBox Cells(1, 1).Address(rowAbsolute:=False) ' В диалоговом окне отображается адрес $А1 MsgBox Cells(1, 1).Address(referenceStyle:=x1R1C1) ' В диалоговом окне отображается адрес R1C1 |
AutoFit | Автоматически настраивает ширину столбца и высоту строки |
Clear, ClearCoiranents, ClearContents, ClearFormats и ClearNotes | Метод clear очищает диапазон.; В следующем примере очищается диапазон A1:G37. Range("A1:G37").Clear Методы ClearCoiranents, ClearContents, ClearFormats и ClearNotes очищают в диапазоне комментарии, содержание, форматы и примечания соответственно. |
Сору | Копирует диапазон в другой диапазон или в буфер обмена. Синтаксис: Copy(destination) - Аргумент destination определяет диапазон, куда копируется данный диапазон. Если аргумент destination опущен, то копирование происходит в буфер обмена. В данном примере диапазон А1: D4 рабочего листа лист1 копируется в диапазон Е5:Н8 листа Лист2: Worksheets("Лист!").Range("Al:D4").Сору destination:=Worksheets("Лист2").Range("E5") |
Cut | Копирует диапазон с удалением в указанный диапазон или в буфер обмена. Синтаксис: Cut(destination) - Аргумент destination определяет диапазон, в который копируется данный диапазон. Если аргумент destination опущен, то диапазон копируется в буфер обмена. В данном примере диапазон А1:D4 рабочего листа Лист1 копируется с удалением в буфер обмена: Worksheets{"Лист1").Range("Al:D4").Cut |
Delete | Удаляет диапазон.В данном примере удаляется третья строка активной рабочей страницы: Rows(3).Delete |
Columns, Rows | Возвращают соответственно семейства столбцов и строк, из которых состоит диапазон. В следующем примере переменным i и j присваиваются значения, равные количеству столбцов и строк в выделенном диапазоне соответственно: i = Selection.Columns.Count j = Selection.Rows.Count |
Insert | Вставка ячейки или диапазона ячеек. i В следующем примере вставляется новая строка перед i четвертой строкой рабочего листа Лист1:: Worksheets("Лист1").Rows(4).Insert i |
Offset | Возвращает диапазон, смещенный относительно данного на величины, специфицированные в аргументах. Синтаксис: Offset(rowOffset, columnOffset) Аргументы: - rowOffset — целое число, указывающее сдвиг по строкам - columnOffset — целое число, указывающее, сдвиг по столбцам Например, в следующем примере активизируется ячейка, расположенная на три строки ниже и на два столбца левее относительно предыдущей активной ячейки: ActiveCell.Offset(rowOffset:=3, columnOffset:=-2).Activate |
Select | Выделение диапазона |
PasteSpecial | Специальная вставка из буфера обмена. Синтаксис: PasteSpecial(paste, operation, skipBlanks, transpose) Аргументы: - Paste — определяет ту часть содержимого буфера обмена, которая должна быть вставлена в диапазон. Допустимые значения: • xlAll (все) • xlFormulas (формулы) • xlValues (значения) • xlFormats (форматы) • xlNotes (примечания) • xlAllxceptBorders (без рамки) - Operation — определяет операции. Допустимые значения: • xlNone (нет) • xlAdd (сложить) • xlSubtract (вычисть) • xlMultiply (умножить) • xiDivide (разделить) - skipBlanks — допустимые значения: True (пустые ячейки при вставке не учитываются) и False (пустые ячейки учитываются) - Transpose — допустимые значения True (диапазон выводится транспонированным) и False (не транспонированным) В приведенном ниже примере данные из диапазона C1:C5 рабочего листа лист1 вставляются в диапазон D1:D5 того же листа, причем они не заменяют уже существующие данные в диапазоне D1:D5, а прибавляются к ним данные из диапазона C1:C5: Worksheets("Лист1").Range("C1:C5").Copy Worksheets ("Лист1").Range ("Dl:D5"). PasteSpecial operation:=xlAdd Метод PasteSpecial программирует выполнение на рабочем листе команды Правка, Специальная вставка (Edit, Paste Special). Аргументы метода PasteSpecial соответствуют установкам диалогового окна Специальная вставка (Paste Special), отображаемого с помощью этой команды (рис. 3.2)
|
Рис. 2.2. Диалоговое окно Специальная вставка
AddComment | Добавляет примечание к диапазону. Синтаксис: AddComment (Text) - Text — строковое выражение добавляемое в качествепримечания: В следующем примере создается примечание внимание ячейки A1 активного рабочего листа: Range("А1").AddComment "Внимание!" |
1.3 Переменные, массивы, условные конструкции, условные переходы
ТИПЫ ДАННЫХ
Типы данных относятся к самым фундаментальным понятиям любого языка программирования. Тип данных определяет множество допустимых значений, которое может принимать указанная переменная.
В VBA имеются следующие основные типы данных:
Тип данных | Размер (байт) | Диапазон значений |
Byte (байт) | От 0 до 255 | |
Boolean (логический) | True или False | |
Integer (целое число) | От -32 768 до 32 767 | |
Long (длинное целое число) | От -2 147 483 648 до 2 147 483 647 | |
Single (число с плавающей запятой обычной точности) | От -3.402823Е38 до -1.401298Е-45 для отрицательных значений | |
Double (число с плавающей запятой двойной точности) | От -1,79769313486232Е308 до -4,94065645841247Е-324 для отрицательных значений; от 4,94065645841247Е-324 до 1,79769313486232Е308 для положительных значений | |
Decimal (масштабируемое целое число) | +/-79228162514264337593543950335 с 28 знаками справа от запятой; минимальное ненулевое значение имеет вид +/-0,0000000000000000000000000001
| |
Date (даты и время) | От 1 января 100 г. до 31 декабря 9999г. | |
Object (объект) | Любой указатель объекта | |
String (строка переменной длины) | 10 + длина строки | От 0 до приблизительно 2 миллиардов |
String (строка постоянной длины) | Длина строки | От 1 до приблизительно 65 400 |
Variant (числовые подтипы) | Любое числовое значение вплоть до границ диапазона для типа Double | |
Variant (строковые подтипы) | 22+длина строки | От 0 до приблизительно 2 миллиардов |
Тип данных, определяемый пользователем (с помощью ключевого слова Туре) | Объём определяется элементами | Диапазон каждого элемента определяется его типом данных |
ОПИСАНИЕ ПЕРЕМЕННЫХ
Описание типа каждой переменной делает программу надежнее и, кроме того, убыстряет ее работу, т. к. VBA не требуется тратить время на распознавание типа неописанной переменной при каждом обращении к ней.
Синтаксис:
Dim [WithEvents] ИмяПеременной[([Индексы]]] [As [New] Тип] _
[, [WithEvents] ИмяПеременной [([Индексы] I ] [As [New] Тип]]...
Аргументы:
WithEvents | Ключевое слово, указывающее, что аргумент ИмяПеременной является именем объектной переменной, которая используется при отклике на события, генерируемые объектом ActiveX (т. е. объектом, который может быть открыт для других приложений и средств программирования).
|
ИмяПеременной | Имя переменной, удовлетворяющее стандартным правилам именования переменных |
Индексы | Размерности переменной массива; допускается описание до 60 размерностей. Для задания аргумента Индексы используется следующий синтаксис: [Нижний То] Верхний [, [Нижний То] Верхний]... Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией option Base- Если отсутствует инструкция option Base, нижняя граница массива равняется нулю |
New | Ключёвое слово, включающее возможность неявного создания объекта. Если указано ключевое слово New при описании объектной переменной, новый экземпляр объекта создается при первой ссылке на него, поэтому нет необходимости присваивать ссылку на объект с помощью инструкции Set |
Тип | Тип данных переменной. Для каждой описываемой переменной следует использовать отдельное предложение Asтип |
Племенные, описанные с помощью ключевого слова Dim на уровне модуля, доступны для всех процедур в данном модуле. Переменные, описанные на уровне процедуры, доступны только в данной процедуре.
Инструкция Dim предназначена для описания типа данных переменной на уровне модуля или процедуры. Например, следующая инструкция описывает переменную с типом Integer.
Dim N As Integer
Инструкция Dim предназначена также для описания объектного типа переменных. Далее приводится описание переменной для нового экземпляра рабочего листа.
Dim X Аs New Worksheet
Если при описании объектной переменной не используется ключевое слово New то для использования объекта, на который ссылается переменная, существующий объект должен быть присвоен переменной с помощью игструкции Set.
Если тип данных или тип объекта не задан, и в модуле отсутствует инструкция DefТип, по умолчанию переменная получает тип Variant. Для обязательного описания всех переменных надо поместить в начале модуля инструкцию Оption Explicit. Использование этой инструкции полезно при отладке программ, т. к. она позволяет легче отслеживать возможную путаницу в именах при наборе программы.
ДОПУСТИМЫЕ ИМЕНА
В VBA пользователь определяет имена переменных, функций, процедур, типов, постоянных и других объектов. Вводимые пользователем имена должны отражать суть обозначаемого объекта так, чтобы делать программу легко читаемой. В VBA имеются следующие ограничения на имена:
1. Длина имени не должна превышать 255 символов.
2. Имя не может содержать точек, пробелов и следующих символов - %, &,!, #.©,$.
3. Имя может содержать любую комбинацию букв, цифр и символов, начинающуюся с буквы.
4. Имена должны быть уникальны внутри области, в которой они определены.
5. Не следует использовать имена, совпадающие с ключевыми словами VBA и именами встроенных функций и процедур.
Хотя регистр букв (верхний или нижний) в имени не имеет значения, умелое использование его может существенно облегчить понимание содержательной стороны переменной. Например, вместо плоских и невыразительных имен
процентная ставка
х__начзнач
предпочтительнее использовать следующие имена, которые легче воспринимаются, благодаря выделению некоторых символов, входящих в них, разумным использованием верхнего регистра
ПроцентнаяСтавка
х_НачЗнач
ИНСТРУКЦИЯ DEFТИП
Инструкция DefТип (вместо тип в имени инструкции фигурируют буквы, обозначающие конкретный тип данных) используется на уровне модуля для задания типа данных по умолчанию для переменных, аргументов, передаваемых в процедуры, и значений, возвращаемых процедурами- Function и Property Get, имена которых начинаются с соответствующих символов.
Синтаксис:
DefBool ДиапазонБукв[, ДиапазонБукв]... | Тип данных Boolean Тип данных Byte |
DefByfe ДиапазонБукв[, ДиапазонБукв]... | Тип данных Byte |
DefInt ДиапазонБукв[, ДиапазонБукв]... | Тип данных Integer |
DefLng ДиапазонБукв[, ДиапазонБукв]... | Тип данных Long |
DefCur ДиапазонБукв[, ДиапазонБукв]... | Тип данных Currency |
DefSng ДиапазонБукв[, ДиапазонБукв]... | Тип данных Single |
DefDbl ДиапазонБукв[, ДиапазонБукв]... | Тип данных Double |
DefDate ДиапазонБукв[, ДиапазонБукв]... | Тип данных Date |
DefStr ДиапазонБукв[, ДиапазонБукв]... | Тип данных String |
DefObj ДиапазонБукв[, ДиапазонБукв]... | Тип данных Object |
DefVar ДиапазонБукв[, ДиапазонБукв]... | Тип данных Variant |
Аргумент ДиапазонБукв имеет следующий синтаксис:
Буква1[-Буква2]
Аргументы Буква1 и Буква2 указывают границы диапазона имен, для которых задается тип данных по умолчанию.
В следующем примере инструкция устанавливает, что все переменные с именами, начинающимися с букв из диапазона от А до Q, имеют строковый тип:
DefStr A-Q
Инструкция Def Типдействует только на модуль, в котором она используется.
При указании диапазона букв обычно определяется тип данных по умолчанию для переменных, которые начинаются с первых 128 символов набора. Однако при указании диапазона A—Z задается тип данных по умолчанию для всех переменных, включая те, что начинаются с международных символов из расширенной части набора (128-255).
Еще одним способом задания типа переменной по умолчанию является включение в конец имени специального символа, устанавливающего тип переменной. Допустимо использование следующих специальных символов для установки типов.
% | Integer |
& | Long |
! | Single |
# | Double |
@ | Currency |
S | String |
МАССИВЫ
Как и в других языках программирования, в VBA вы можете использовать массивы. Примеры объявления массивов приведены ниже.
Dim B(3, 3) As Single
Dim A(12) As Integer
Первая строка объявляет двумерный массив 3x3 (матрицу), состоящий из действительных чисел. Вторая строка объявляет одномерный массив (вектор) из 12 целых чисел, причем по умолчанию первый элемент массива будет А(0), а последний А(11). В этом случае говорят, что 0 — базовый индекс. Можно изменить базовый индекс, написав в начале листа модуля инструкцию Option Base 1. После этого индексы массивов аив будут начинаться с единицы. Другим способом изменения базового индекса является использование ключевого слова то при объявлении массива:
Dim B(l То 3, 1 То 3) As Single
Dim A(l To 12) As Integer
Массив в программе определяется поэлементно. Например,
Dim B(l To 2, 1 То 2) As Single
B(1,1)=2
В(1,2)=4
В(2,1)=1
В(1,2)=6
Удобным способом определения одномерных массивов является функция Array, преобразующая список элементов, разделенных запятыми, в вектор из этих значений, и присваивающая их переменной типа variant. Например,
Dim A As Variant
А = Array{10,20,30)
В = А(2)
Динамические массивы
Иногда в процессе выполнения программы требуется изменять размер массива. В этом случае первоначально массив объявляют как динамический. Для этого при объявлении массива не надо указывать размерность, например:
Dim R() as Single
В программе следует вычислить необходимый размер массива и связать его с некоторой переменной, например п, затем изменить размер динамического массива с помощью оператора ReDim.
Синтаксис:
ReDim [Preserve] ИмяПеременной(Индексы) [As Тип] _
[. ИмяПеременной(Индексы)[As Тип]]...
Аргументы:
Preserve
| Ключевое слово, используемое для сохранения данных в существующем массиве при изменении значения последней размерности |
ИмяПеременной
| Имя переменной, удовлетворяющее стандартным правилам именования переменных |
Индексы
| Размерности переменной массива; допускается описание до 60 размерностей. Аргумент индексы использует следующий синтаксис: [Нижний То] Верхний [, [Нижний То] Верхний]... Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией option Base. Если отсутствует инструкция option Base, нижняя граница массива равняется нулю |
Тип | Тип данных массива |
Например, установим границы массивы r:
ReDim R(1 To 10)
Допустимо повторное использование инструкции ReDim для изменения числа элементов и размерностей массива.
Функции и процедуры для работы с массивами
При работе с массивами бывает полезно применять следующие функции и процедуры.
Array(СписокАргументов) | Создает массив типа variant. Аргумент CписокАргументов представляет разделенный запятыми список значений, присваиваемых элементам массива. Пример: Dim День As Variant День = Array("Пн", "Вт", "Ср", "Чт", "Пт") |
IsArray(ИмяПеременной) | Возвращает True, если переменная содержит массив; в противном случае возвращается False. Функцию IsArray используют для проверки значений переменных типа Variant, содержащих массивы |
[, размерность])
| Размерность — целое число, указывающее размерность, нижнюю или верхнюю границу которой возвращает функция. Для первой размерности следует указать 1, для второй 2 и т. д. Если аргумент Размерность опущен, подразумевается значение 1 |
Erase СписокМассивов
| Повторно инициализирует элементы массивов фиксированной длины и освобождает память, отведенную для динамического массива. СписокМассивов представляет имена одной или нескольких очишаемых переменных массивов, разделенных запятой. Инструкция Erase устанавливает элементы массивов фиксированной длины следующим образом: массив чисел или строк фиксированной длины (присваивает каждому элементу значение 0), массив строк переменной длины (присваивает каждому элементу значение пустой строки), массив типа variant (присваивает каждому элементу значение Empty). Erase освобождает память, используемую динамическими массивами. Перед тем как из программы вновь появится возможность сослаться на динамический массив, необходимо переопределить размерности переменной массива с помощью инструкции |
КОНСТАНТЫ
Константы, в отличие от переменных, не могут изменять свои значения. Использование констант делает программы легче читаемыми и позволяет проще вносить исправления — отпадает необходимость многократно исправлять значения по тексту программы, т. к. достаточно ввести новое значение при определении константы.
Синтаксис:
[Public | Private] Const ИмяКонстанты [As Тип] = Выражение
Аргументы:
Public | Ключевое слово, используемое на уровне модуля для описания констант, доступных всем процедурам во всех модулях. Не допускается в процедурах. |
Private | Ключевое слово, используемое на уровне модуля для описания констант, доступных только внутри модуля, в котором выполняется описание. Не допускается в процедурах. |
ИмяКонстанты | Имя константы, удовлетворяющее стандартным правилам именования переменных |
Тип | Один из поддерживаемых типов данных: Byte, Boolean, Integer, Long, Currency, Single, Double. Decimal (в настоящее время не поддерживается), Date, String или Variant. Для каждой описываемой константы следует использовать отдельное предложение as тип |
Выражение | Литерал, другая константа или любое сочетание, которое включает все арифметические или логические операторы, за исключением Is |
Пример:
Const ПроцентнаяСтавка As Single = 0.2
Const Фирма = "ООО Бескрайние просторы"
ТИП ДАННЫХ, ОПРЕДЕЛЕННЫЙ ПОЛЬЗОВАТЕЛЕМ
Наряду с массивами, представляющими нумерованный набор элементов одного типа, существует ещё один способ создания структурного типа — тип, определенный пользователем, или в привычной терминологии для программистов запись. Запись — это совокупность нескольких элементов, каждый из которых может иметь свой тип. Элемент записи называется полем. Запись является частным случаем класса, в котором не определены свойства и методы.
Синтаксис:
[Private | Public] Туре ИмяПеременной
ИмяЭлемекта [([Индексы])] As тип
[ИмяЭлемента [([Индексы])] из тип]
…
End Type
Аргументы:
Public | Используется для описания определяемых пользователем типов, которые доступны для всех процедур во всех модулях всех проектов |
Private | Используется для описания определяемых пользователем типов, которые доступны только в модуле, в котором выполняется описание |
ИмяКонстанты | Имя типа, определяемого пользователем |
ИмяЭлемента | Имя элемента, определяемого пользователем типа |
Индексы | Размерности элемента, являющегося массивом. Для задания массива, размеры которого могут изменяться, указываются только скобки. Аргумент Индексы использует следующий синтаксис: [Нижний То] Верхний [,[Нижний То] Верхний].. |
Тип | Тип данных элемента; поддерживаются типы: Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String (для строк переменной длины), String* длина (для строк фиксированной длины), Object, Variant и другой, определяемый пользователем тип |
В данном примере инструкция туре используется для определения типа данных (только на уровне модуля). При появлении в модуле класса инструкции Туре должно предшествовать ключевое слово Private.
‘
‘ Тип, определенный пользователем
‘
Туре Студент i
‘
' Элементы типа данных i
‘
Фамилия As String * 20 Имя As String * 20
Отчество As String * 20
НомерЗачетки As Integer
Группа As String * 10
Курс As Long
ДатаРождения As Date
End Type
Sub ВводДанных()
‘
‘ Описание переменной Экономист
‘
Dim Экономист As Студент
‘
‘Присвоение значений элементам переменной Экономист i
‘
With Экономист
.НомерЗачетки = 12003
.Группа = "Менеджмент"
End With
End Sub
Можно создавать массив, содержащий элементы собственного типа. Например, следующий массив состоит из сведений о 20 студентах.
Dim СтудентЭкономист(1 to 20) As Студент
‘Присваивает значения элементам первой компоненты массива t
СтудентЭкономист(1). Фамилия = "Промокашкин"
СтудентЭкономист{1). Имя = "Евстегней"
СтудентЭкономист(1). Отчество = "Поликарпович"
ОПЕРАЦИИ VBA
В программах на VBA можно использовать стандартный набор операций над данными. Имеются три основных типа операций:
- Математические, выполняются над числами, и их результатом являются числа
- Отношения, применяются не только к числам, и их результатом являются логические значения, например х>у
- Логические, используются в логических выражениях и их результатом являются логические значения, например Not x And у
Приведем операции VBA указанных и дополнительных категорий.
Математические операции.
[Операнд1] + [Операнд2] | Сложение |
[Операнд1] - [Операнд2] | Вычитание |
- [Операнд] | Перемена знака |
[Операнд1] * [Операнд2] [Операнд1] / [Операнд2] | Умножение Деление |
[0перанд1] \ [Операнд2] | Целочисленное деление |
[Операнд1] Mod [Операнд2] | Остаток от деления по модулю |
[Операнд1] ^ [Операнд2] | Возведение в степень |
Операции отношения
[Операнд1]< [Операнд2] | Меньше |
[Операнд1]> [Операнд2] | Больше |
[Операнд1]<= [Операнд2] | Меньше или равно |
[Операнд1]>= [Операнд2] | Больше или равно |
[Операнд1] <> [Операнд2] | Не равно |
[Операнд1] = [Операнд2] | Равно |
[Операнд1] Is [Операнд2) | Сравнение двух операндов, содержащих ссылки на объекты |
[Операнд1] Like [Операнд2] | Сравнение двух строковых выражений |
Логические операции
[Операнд1] And [Операнд2] | Логическое умножение |
[[Операнд1] Or [Операнд2] | Логическое сложение |
[Операнд1] Хог [Операнд2] | Исключающее or (или) |
[Операнд1] Mot [Операнд2] | Логическое отрицание |
[Операнд1] Imp [Операнд2] | Логическая импликация (в настоящее время почти не используется) |
[Операнд1] Equ [Операнд2] | Логическая эквивалентность (в настоящее время почти не используется) |
Дата добавления: 2015-11-04; просмотров: 16 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |