Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA_lektsii.doc
Скачиваний:
8
Добавлен:
01.04.2025
Размер:
3.91 Mб
Скачать

2.8. Обязательное описание переменных

Другая возможность VBA позволяет быть уверенным, что все переменные обязательно будут явно описаны в программе, и избежать всех недостатков использования типа Variant. Сделать описание переменных обязательным можно одним из двух способов:

во-первых, поместить в область описаний модуля (т. е. в его начало – перед всеми подпрограммами и функциями) инструкцию Option Explicit;

во-вторых, выбрать из меню Сервис (Tools) редактора Visual Basic команду Параметры (Options), перейти на вкладку Редактор (Editor) и установить флажок Явное описание переменных (Require Variable Declaration). Редактор будет вставлять команду Option Explicit в начало любого нового модуля VBA. Имейте в виду, что на уже существующие модули этот способ не подействует. На рис. 2.1 флажок Явное описание переменных (Require Variable Declaration) установлен.

В приведенном ниже примере используется инструкция Option Explicit.

Option Explicit

Sub С_ОбъявлениемПеременной ()

Dim String1 As String

String1 = "Привет!"

MsgBox String1

End Sub

Если вы вставите в модуль (перед всеми подпрограммами и функциями) инструкцию Option Explicit, но уберете из программы БезОбъявленияПеременной инструкцию Dim, VBA выдаст сообщение об ошибке при попытке запустить программу:

Option Explicit

Sub БезОбъявленияПеременной()

String1 = "Привет!"

MsgBox String1

End Sub

Рис. 2.1. Включение явного описания переменных

Попытка запустить БезОбъявленияПеременной вызывает ошибку:

Чтобы избежать этого, вставьте в код инструкцию Dim для переменной String1 или уберите инструкцию Option Explicit.

2.9. Типы данных по умолчанию

Чтобы неописанным переменным по умолчанию не присваивался тип Variant, поместите в начало модуля инструкцию DefType. Например, чтобы присваивать всем необъявленным переменным тип Integer, вставьте перед всеми подпрограммами инструкцию

DefInt A-Z

Аргументы A–Z после ключевого слова DefInt означают, что все необъявленные переменные, имена которых начинаются с А–Z (независимо от регистра), будут считаться целыми. Средствами нескольких инструкций DefType можно задать, чтобы тип переменной определялся по первой букве ее имени. Например, если Вы вставите в начало модуля приведенные ниже инструкции, все переменные с именами, начинающимися на I, приобретут тип Integer, переменные с буквы S – тип String, переменныe с буквы С – тип Currency:

DefInt I

DefInt S

DefInt C

Если в начале модуля нет инструкций DefType, всем необъявленным переменным будет присвоен тип Variant.

ЗАМЕЧАНИЕ. В одной строке кода VBA можно размещать несколько инструкций, разделяя их двоеточием:

DefInt I: DefStr S: DefCur С

2.10. Пользовательские типы данных

VBA позволяет разработчику создавать собственные типы данных, подобные структурам или записям, применяемым в других языках программирования. Пользовательские типы данных определяются как комбинации стандартных типов данных VBA. Их средствами вы вправе помещать в одну переменную несколько значе­ний различных типов. Определение переменной пользовательского типа несколько сложнее, чем определение переменной одного из стандартных типов, – сначала вам придется определить сам тип. Определения типов всегда помещают в начало модуля VBA:

Type Персона

Имя As String

ДатаРождения As Date

Возраст As Integer

End Type

Рассмотрим компоненты этого определения пользовательского типа.

Компонент

Описание

Туре

Ключевое слово, отмечающее начало определения типа

Персона

Имя пользовательского типа

Имя As String

Первый элемент пользовательского типа

ДатаРождения As Date

Второй элемент пользовательского типа

Возраст As Integer

Третий элемент пользовательского типа

End Type

Ключевые слова, отмечающие конец определения типа

Когда эта инструкция помещена в начало модуля, она определяет пользовательский тип Персона, состоящий из трех элементов: строки Имя, целого числа Возраст и даты ДатаРождения.

Как используется переменная такого типа? Рассмотрим пример.

Type Персона

Имя As String

ДатаРождения As Date

Возраст As Integer

End Type

Sub ПользовательскийТипПеременной()

Dim User1 As Персона

User1.Имя = "Иванов”

User1.ДатаРождения = #2/23/75#

User1.Возраст = Year(Date) - _

Year(User1.ДатаРождения)

MsgBox User1. Имя & ", возраст " & _

User1.Возраст & " дата рождения " & _

User1.ДатаРождения

End Sub

Во второй строке объявлена переменная Userl пользовательского типа Персона. Затем в строках 3, 4 и 5 различным элементам этой переменной присваиваются значения: Иванов для Имя, #2/23/75# для ДатаРождения, а Возраст есть разность между текущим годом (Year(Date)1) и годом рождения (Year(User1.ДатаРождения)). В шестой строке элементы переменой Userl выводятся в информационное окно

Обратите внимание на символ продолжения в конце шестой строки.

В вышеприведенном примере мы впервые использовали литерал даты – значение даты, ограниченное значками #. Такую форму записи применяют всякий раз, когда присваивают переменной типа Date дату в численном выражении. Литерал даты напоминает обычную текстовую строку, ограниченную символами #, а не кавычками.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]