
- •Часть VI
- •Глава 6.1 Создание приложений с помощью vba Возможности Visual Basic
- •Редактор Visual Basic (vbe)
- •Управление проектами в vbe
- •Глава 6.2 Основы программирования на ув6 Работа с переменными
- •Использование констант
- •Типы данных Object и Variant
- •Простейшие конструкции и операторы
- •Конструкции управления
- •Разновидности циклов
- •Работа с массивами
- •Работа со строками
- •Работа с датой и временем
- •Пользовательские процедуры и функции
- •Sub название процедуры (параметры) операторы
- •Function название функции (параметры) [As тип] операторы
- •Работа с записями
- •Работа с файлами
- •Input(число, номер)
- •Глава 6.3 Объектные модели
- •Объектная модель vba
- •Объектная модель Microsoft Office 2000
- •Объектная модель Microsoft Word 2000
- •Объектная модель Microsoft Excel 2000
- •Объектная модель Microsoft Access 2000
Использование констант
Наряду с переменными для хранения информации в программе можно использовать константы. Их особенностью является то, что при описании в программе какой-либо константы ей присваивается определенное значение, которое в дальнейшем не может быть изменено другими операторами.
Существует две разновидности констант: встроенные и пользовательские. Встроенные константы Visual Basic предлагаются самой системой и предназначены для хранения самой разнообразной информации: коды "горячих" клавиш, используемые цвета и т. д. Все они имеют префикс vb, например: vbWhite.
Для того чтобы уточнить значение той или иной встроенной константы, а также ее название, следует открыть окно Object Browser, в котором можно найти всю необходимую информацию (см. рис. 6.15). Для этого необходимо или нажать соответствующую кнопку на стандартной панели инструментов, или выбрать команду Object Browser в меню View, или нажать клавишу F2.
Пользоваться встроенными константами удобно во многих случаях по той причине, что намного легче запомнить название константы, например, vbWhite, чем число 16777215.
Часто возникает необходимость описывать в программе собственные константы, которые называются пользовательскими, присваивая им определенные значения. Для объявления таких констант используется оператор, аналогичный тому, который употребляется при описании переменной:
Const константа [As тип] = значение
В этом операторе:
Const - ключевое слово, которое показывает, что осуществляется объявление константы;
420
As - ключевое слово для обозначения типа данных объявляемой константы;
Константа - имя описываемой константы;
Тип - тип данных для объявляемой константы;
Значение - присваиваемое константе значение указанного типа. Ниже приведены примеры объявления констант различных
типов:
Const bInFlag As Boolean = False
Const intMax As Integer = 1024
Const stxMessage = "Завершение работы"
При помощи одного оператора можно объявить несколько констант, в этом случае они должны быть перечислены через запятую, например:
Const intMin = 0, intMax = 1000
При объявлении констант их область видимости задается аналогично переменным. Если константа была создана в процедуре,
421
то областью ее видимости является только эта процедура. В случае необходимости доступа к константе из всех процедур модуля ее нужно объявлять в разделе Declarations данного модуля, указывая в начале оператора ключевое слово Private. Если же требуется обеспечить доступ к константе из всех процедур проекта, то при ее объявлении в разделе Declarations следует использовать ключевое слово Public. Например:
Private Const intMax = 4096 Public Const intMin = 1024
Типы данных Object и Variant
Тип Object.
В том случае, когда необходимо работать с различными объектами, удобно использовать тип Object (объектный). Переменная данного типа содержит ссылку на тот или иной объект разрабатываемого приложения или других приложений и представляет собой 4-байтный адрес соответствующей области памяти. Присвоение объектной переменной какого-либо значения выполняется при помощи оператора Set. Например:
Dim objA As Object Set objA = Labell
В приведенном примере переменной objA присваивается ссылка на объект-метку Labell, принадлежащий одному из стандартных классов Visual Basic, а именно: классу Label. В подобных случаях, когда для описания объекта используется не созданный разработчиком, а уже имеющийся класс, при объявлении переменной следует указывать стандартный тип:
Dim objA As Label objA = Labell
Перечень стандартных классов Visual Basic, а также их описание и список свойств каждого класса можно найти в разделе Classes окна Object Browser (см. рис. 6.16).
422
Тип Variant.
Если в процессе работы программы определенная переменная должна содержать значения различных типов, то следует использовать тип Variant (произвольный), который устанавливается по умолчанию для описываемой переменной. При этом во время выполнения различных операций нет необходимости следить за тем, значение какого типа в данный момент в ней находится, так как необходимые преобразования осуществляются автоматически. Например:
Dim vntAny ' Tim Variant
vntAny = "144" ' Результат: строка "144"
vntAny = vntAny /12 ' Результат: число 12
Однако следует учитывать тот факт, что в случае выполнения арифметических операций в переменной типа Variant должно находиться число (или строка, содержащая число), иначе при работе программы возникнет ошибка несовпадения типов Type Mismatch.
Значение, которое присваивается переменной типа Variant, определяет способ его обработки при выполнении различных
423
операций, а также внутреннее представление. В частности если данное значение является числом, то оно обрабатывается как принадлежащее тому типу данных, который в этом случае является наиболее подходящим. Например:
Dim vntA ' тип Variant/Empty vntA = "5" ' тип Variant/String vntA = 5 ' типVariant/Integer vntA =5.5 ' тип Variant/Double
Для того чтобы узнать, какое внутреннее представление употребляется для того или иного значения, следует использовать функцию VarType, которая возвращает числовые коды в зависимости от применяемого типа данных (см. табл. 6.8).
Например:
Dim vntA
Dim intCode As Integer
vntA = "7"
intCode = VarType(vntA) ' intCode = 8
424
В зависимости от полученного кода можно выполнять те или иные действия. Например, целочисленные значения в переменных Variant хранятся как Integer. Если какое-либо из этих значений не выходит за пределы интервала, определяемого типом Byte, т. е. [0; 255], то для экономии памяти и повышения скорости обработки можно осуществить преобразование к более компактному типу (см. табл. 6.9):
Dim vntA ' Variant
vntA = 200 ' Variant/Integer
If VarType(vntA) = 2 Then
vntA = CByte(vntA) ' Variant/Byte
End If
Зачастую при работе приложений необходимо преобразовывать содержимое переменных Variant из строки в число, например, при вводе пользователем данных в диалоговом окне, однако в этом случае может возникнуть ошибка несовпадения типов. Чтобы про-
425
верить, является ли преобразуемое значение числом (или строкой, которую можно представить как число), следует использовать функцию IsNumeric, которая возвращает значение True или False, в зависимости от результата проверки (см. табл. 6.10). Обычно IsNu-meric используется в управляющих конструкциях, как и рассмотренная выше функция VarType.
Помимо того, что переменные типа Variant могут хранить значения любого другого типа, для них предусмотрены еще три специальных значения:
Empty. Данное значение в начале выполнения программы автоматически присваивается переменной, объявленной как Variant, причем оно может трактоваться по-разному, в зависимости от того, в каком выражении присутствует рассматриваемая переменная. Если она используется при выполнении арифметической операции, то значение Empty эквивалентно нулю, т. е. О, если в строковом выражении - то пустой строке, т. е. "". Для того чтобы выяснить, содержит ли переменная типа Variant значение Empty, следует использовать функцию IsEmpty, например:
Dim vntA ' vntA = Empty If IsEmpty(vntA) Then vntA = "" ' vntA = ""
Данное значение может быть присвоено в программе переменной типа Variant так же, как и любое другое, например:
vntA = Empty
426
Null. Это значение в большинстве случаев применяется при обработке баз данных и имеет несколько особенностей:
• если в каком-либо выражении одним из составляющих является Null, то результатом всего выражения также будет Null, например:
Dim vntA ' vnfcA = Empty vntA = Empty + Null * 5 ' vntA = Null
• в том случае, когда в качестве параметра функции используется значение Null или переменная, которая равна Null, то вызываемая функция также возвратит значение Null (если этот параметр принимает участие в вычислении результата функции).
Проверка на значение Null переменной типа Variant осуществляется функцией IsNull, которая аналогична функции IsEapty, рассмотренной выше.
Данное значение может быть присвоено только переменной типа Variant, например:
Dim vntA vntA = Null
Если же значение Null будет присвоено переменной другого типа, то компилятор выдаст сообщение об ошибке.
Error. Данное значение применяется в том случае, если необходимо предусмотреть возможность возникновения ошибки в используемой процедуре. При этом компилятор не выдает стандартных сообщений об ошибке, что позволяет разработчику при ее возникновении выполнять те или иные действия по своему усмотрению. Преобразование полученного кода ошибки в Error осуществляется с помощью функции CVErr, аргументом которой является числовое значение.