Объекты, свойства и методы (на примере VBA)
Объекты, методы, свойства, события Объектам VBA присуща функциональность - они действуют определенным образом и могут откликаться на определенные ситуации. При этом если свойства объекта определяют его внешний вид и состояние, методы объекта определяют те задачи, которые может выполнить данный объект. Методы, по сути дела, представляют собой сегмент программного кода внедренный в объект. Существует определенный формат программного кода, задающего установку свойства и использование метода: Объект. Свойство = ЗначениеСвойства Объект. Метод [Параметр1 […]] Здесь объект - имя настраиваемого объекта; Свойство - это характеристика, которую нужно изменить; Метод - это команда, которая используется для изменения объекта; Значение - это новая установка свойства; Параметр - это аргумент, используемый методом. Следующий пример показывает, как можно изменить текст в строке заголовка окна приложения посредством установки нового значения свойству Caption объекта Application:Application.Caption = “Пример установки свойства”Как и свойства, различные типы объектов могут иметь различные методы. Следующий пример показывает использование метода CountA (подсчет количества не пустых строк) объекта Application для определения номера последней не пустой строки активного рабочего листа: НомерСтроки= Application.CountA(ActiveSheet.Columns(1)) Объекты могут реагировать на события - действия пользователя или другие внешние действия, например, щелчок по кнопке, изменение текста, нажатие клавиши и др. Событие представляет собой действие, распознаваемое объектом, для которого можно запрограммировать отклик. Иногда свойства и методы объекта оказываются связанными в том смысле, что выполнение некоторого метода приводит к изменению свойств объекта. В свою очередь, изменение некоторых свойств может вызвать наступление событий. Программа может обрабатывать два основных типа событий: инициируемые пользователем и генерируемые системой. События, инициируемые пользователем, возникают в результате его действий: нажатие клавиши, щелчки кнопками мыши. Но есть события, являющиеся следствием действий пользователя. Таким образом, любое из действий пользователя может вызвать целый набор событий, и порядок их вызова может быть важным. Основными действиями пользователя, генерирующими вызов событий в программе, являются следующие:• запуск программы;• нажатие клавиши;• щелчок кнопкой мыши;• перемещение мыши;• выход из программы.Суть программирования на VBA заключается в двух понятиях: событие и отклик на него. Если пользователь производит какое-то воздействие на систему, допустим, щелкает на кнопке, тогда в качестве отклика выполняется код созданной пользователем процедуры. Этот специальный вид процедур, генерирующих отклик на события, называется процедурами обработки событий. Если такой отклик не создан (не написана соответствующая процедура), то система никак не будет реагировать на это событие. Таким образом, задачей пользователя является разработка программного кода процедур для обработки различных событий, которые являются важными с точки зрения функционирования программы. 6) Встроенные типы данных в VBA Excel. ВБА включает в себя 11 встроенных типов данных: Boolen - логические переменные (2 байта). Принимают значения tru; Feals. Byte - Описываются целые положительные числа, размер 1-н байт разрядность - 3 цифры от 0 до 255 Currency - Число с фиксированной точкой до 19 разрядов (8 байт) В диапазоне от -922337203685477,5808 до 922337203685477,5807 Date - 8 байт, Хранение даты и времени. Диапазонот Даты от 1.01.100 до 31.12.9999, Время от 00:00:00 до 23:59:59 Double - 8 байт разрядность 15 цифр. Хранение чисел двойной точности, от -1,79769313486232*10308 до 4,94065645841247*10-324, от 4,94065645841247*10-324 до 1,79769313486232*10308 Integer - Длинные целые, Целые числа, размер 2 байта разрядность до 5 символов (-32768 до 32767), определяется с помощью процентов. -32768 до 32767 Long - 4 байта, разрядность до 10 цифр(от -2147483648 до 2147483647)(символьное определение - конъюнкция) Single - Вещественные числа, 4 байта, разрядность 7 цифр (10 в 38)чисел одинарной точности, от -3,402823*1038 до -1,401298*10-45 от 1,401298*10-45 до 3,402823*1038 String - 1+1 байт.Строковые переменные. Хранение текста длиной до 2 млрд. символов Variant - Хранение любого типа данных. Может хранить любой тип данных (кроме Object) Object - ссылка на конкретный объект. 8) Встроенные математические функции на VBA N - означает любое численное выражение. Все аргументы функций являются обязательными, если не указано иначе. Функция(аргумент) Действие Abs(N) Возвращает абсолютное значение аргумента N Atn(N) Возвращает арктангенс N (радиан) Cos(N) Возвращает косинус N (радиан) Exp(N) Возвращает константу е (натуральный логарифм = 2.718282...), возведенную в степень N Fix(N) Возвращает целую часть N. Не округляет число, а отбрасывает любую дробную часть. Если N отрицательное число, то возвращается ближайшее отрицательное целое большее, чем или равное N Int(N) Возвращает целую часть N. Не округляет число, а отбрасывает любую дробную часть. Если N отрицательное число, то возвращается ближайшее отрицательное целое меньшее, чем или равное N Log(N) Возвращает натуральный логарифм N Rnd(N) Возвращает случайное число: аргумент является необязательным. Используется только после инициализации генератора случайных чисел (оператор Randomize) Sgn(N) Возвращает знак числа: -1, если N - отрицательное; 1, если N - положительное; 0, если N равно 0 Sin(N) Возвращает синус N (радиан) Sqr(N) Возвращает корень квадратный из N. Если N является отрицательным числом - возвращается ошибка времени исполнения Tan(N) Возвращает тангенс N (радиан) 9) Логические операции: Not логическое отрицание, And логическое "И", Or логическое "ИЛИ". Результатом логической операции может быть одно из двух значений: True ("истина") или False ("ложь"). 10) определяет несколько блоков операторов, один из которых будет выполняться в зависимости от условия: If условие1 Then выражение1 ElseIf условие2 Then выражение2 ... Else выражение-n End If При выполнении сначала проверяется условие1. Если оно ложно, VBA проверяет следующее условие2 и т. д., пока не найдет истинного условия. Найдя его, VBA выполняет соответствующий блок операторов и затем передает управление инструкции, следующей за оператором End if. В данную конструкцию можно включить блок оператора Else, который VBA выполняет, если не выполнено ни одно из условий. Конструкция If... Then... ElseIf в действительности всего лишь специальный случай конструкции If... Then... Else. Заметим, что в данной конструкции может быть любое число блоков ElseIf, или даже ни одного. Блок Else можно включать независимо от присутствия или, наоборот, отсутствия блоков ElseIf.
Рассмотрим пример вычисления функции Sub пример1() Dim a As Single, b As Single, x As Single Dim z As Double Call read("A1", a) Call read("B1", b) Let x = CSng(InputBox("введи x", "Ввод данных", 0)) If x <= a Then z = Sin(x) ElseIf x >= b Then z = Tan(x) Else: z = Cos(x) End If Call out("C1", z) End Sub Заметим, что можно добавить любое число блоков Elself в конструкцию If... Then. Однако количество блоков Elself может стать настолько большим, что конструкция If... Then станет очень громоздкой и неудобной. В подобной ситуации следует применять другую конструкцию принятия решения - Select Case. 11) Select Case -Конструкция Select Case является альтернативой конструкции If... Then... Else в случае выполнения блока, состоящего из большого набора операторов. Конструкция Select Case предоставляет возможность, похожую на возможность конструкции If... Then... Else, но в отличие от нее она делает код более читаемым при наличии нескольких вариантов выбора. Конструкция Select Case работает с единственным проверяемым выражением, которое вычисляется один раз при входе в эту конструкцию. Затем VBA сравнивает полученный результат со значениями, задаваемыми в операторах Case конструкции. Если найдено совпадение, выполняется блок операторов, ассоциированный с оператором Case: Select Case проверяемое_выражение [Case список_выражений1 [блок_операторов1]] [Case список_выражений2 [блок_операторов2]]... [Case Else [блок_операторовn]]End Select Каждый список выражений является списком из одного или более значений. Если в одном списке больше одного значения, они отделяются запятыми. Каждый блок операторов содержит несколько операторов или ни одного. Если окажется, что вычисленному значению проверяемого выражения соответствуют значения из нескольких операторов Case, то выполняется блок операторов, ассоциированный с первым оператором Case из всех найденных соответствий. VBA выполняет блок операторов, ассоциированный с оператором Case Else (заметим, что он необязателен), если не найдено ни одного соответствия проверяемого значения выражения и значений из всех списков операторов Case. 12) FOR...NEXT – это управляющая структура, выполняющая блок операторов заданное число раз. Управляющая структура выполняет блок операторов от начального значения переменной <счетчик> до границы, определенной аргументом <конечное значение>, проходя через область значений управляющей переменной с приращением, определенным в выражении <шаг>. FOR-цикл повторяет блок команд до тех пор, пока значение переменной <счетчик> не станет больше, чем значение <конечное значение>, или пока не встретится оператор EXIT. Тогда управление передается на команду, расположенную за соответствующим оператором NEXT. Если встречается оператор LOOP, управление передается на ближайший оператор DO WHILE или FOR. Если <шаг> отрицательный, значение переменной <счетчик> уменьшается. Выполнение FOR-цикла в этом случае продолжается до тех пор, пока значение переменной <счетчик> не станет меньше, чем <конечное значение>. Это значит, что <конечное значение> должно быть меньше, чем <начальное значение> в начале работы FOR-цикла. FOR...NEXT структуры, как и другие управляющие структуры, могут быть вложенными на любую глубину. 13) WHILE...WEND - Операторы WHILE...WEND предназначены для циклического повторения последовательности операторов до тех пор, пока заданное условие истинно. 14) Do-Loop Повторяет блок инструкций, пока условие Boolean равно Trueили до тех пор, пока условие станет True. Используется структура Do...Loop, если требуется повторение набора инструкций неограниченное число раз, пока условие выполняется. Если вы хотите повторить инструкцию определенное количество раз, то For...Next Statement обычно является лучшим выбором. While или Until можно использовать для указания condition, но не оба одновременно. Можно проверить condition только один раз — в начале или в конце цикла. Если проверить condition в начале цикла (в инструкции Do), цикл может никогда не выполниться, даже один раз. Если проверить в конце цикла (в инструкции Loop), цикл всегда выполняется по крайней мере один раз. Условие обычно является результатом сравнения двух значений, но оно может быть любым выражением, значение которого при вычислении имеет тип Тип данных Boolean (Visual Basic) (True или False). Сюда же относятся значения других типов данных, например, числовых типов, преобразованные в тип Boolean. Циклы Do могут вкладываться друг в друга. Также можно вложить друг в друга различные виды управляющих структур.Дополнительные сведения см. в разделе Вложенные структуры управления (Visual Basic). 15) Управляющая структура For-Each Этот оператор получает список значений и присваивает их по очереди скалярной переменной, выполняя с каждым последующим присваиванием блок кода. Выглядит это так: foreach $i (@список) { оператор_1; оператор_2; оператор_3; } В отличие от C-shell, в Perl исходное значение этой скалярной переменной при выходе из цикла автоматически восстанавливается; другими словами, эта скалярная переменная локальна для данного цикла. 16) Byte Хранение положительных чисел от 0 до 255 Boolean Хранение логических значений: True, False Currency Хранение чисел для точных вычислений в диапазоне от -922337203685477,5808 до 922337203685477,5807 Date Хранение даты и времени. Даты от 1.01.100 до 31.12.9999 Время от 00:00:00 до 23:59:59 Double Хранение чисел двойной точности от -1,79769313486232*10308 до -4,94065645841247*10-324 от 4,94065645841247*10-324 до 1,79769313486232*10308 Integer Хранение целых чисел от -32768 до 32767 Long Хранение целых чисел от -2147483648 до 2147483647 Single Хранение чисел одинарной точности от -3,402823*1038 до -1,401298*10-45 от 1,401298*10-45 до 3,402823*1038 String Хранение текста длиной до 2 млрд. символов Variant Хранение любого типа данных 17) Массивы, не меняющие число своих элементов, называются статическими массивами. Примером такого массива может служить вышеприведенный массив My_Array, содержащий 10 элементов. Однако бывают ситуации, когда изначально неизвестно количество элементов в массиве, или же, в процессе работы это количество может изменяться. Такие массивы называются динамическими массивами. Динамический массив может увеличиваться или сжиматься, чтобы вмещать точно необходимое число элементов без напрасного расходования памяти. 18) Инструкция Dim предназначена для описания типа данных переменной на уровне модуля или процедуры. Например, следующая инструкция описывает переменную с типом Integer. Dim N As Integer Чтобы определить переменную на уровне процедуры, ее описание помещается в тело данной процедуры, и тогда это будет локальная переменная этой процедуры. Чтобы определить процедуру на уровне модуля и сделать её тем самым доступной для совместного применения во всех процедурах данного модуля, следует поместить ее описание в секции объявлений модуля — перед текстом каких-либо процедур или функций. При этом может использоваться и явное описание области действия: ключевое слово Dim в этом случае заменяется на ключевое слово Private. Нет никакой разницы в том, какой из этих описателей вы используете. Наконец, чтобы описать переменную на уровне проекта, необходимо расположить ее описание в секции объявлений одного из модулей проекта и при этом обязательно должно использоваться ключевое слово Public. Описанные таким образом переменные могут применяться в любом модуле проекта.
|