Microsoft Office (Разработка документов в Word, Excel и приложений на Visual Basic for Application). - Учебное пособие (Н.А.Устинов)

Объектные переменные.

Объектные переменные –это переменные, используемые для ссылки на объект. Описание и присвоение объектной переменной немного отличается от того, как это делается для других переменных... Например:

Dim Range1 As Object

Set Range1 = Worksheets(1). Range(“A1”)

Во второй строке при задании значения используется ключевое слово Set

Как работать с переменными типа Object? Рассмотрим процедуру:

В процедуре демонстрируется использование объекта типа Range для установки значения диапазона A1 первого рабочего листа.

'===================================================

Sub Lect11Proc01_UseObjectVariable()

    Dim Num2 As Long

    Num2 = 100000

    Dim Range1 As Object

    Set Range1 = Worksheets(1).Range("A1")

    Range1.Value = Num2

    MsgBox Range1.Value

End Sub

100000

 
Результат выполнения

OK

 
 

 

Использование объектных переменных конкретного типа.

При описании переменной можно использовать точное название типа Object. Например:

Dim Workbook1 As Workbook

Dim Worksheet1 As Worksheet

Din XL As Application

Dim Range1 As Range

Возникает естественный вопрос, как можно узнать имя типа объекта, используемого при описании переменной. Это просто имена в иерархической модели Excel. Можно все эти переменные описать с помощью общего типа Object.

Dim Workbook1 As Object

Dim Worksheet1 As Object

Din XL As Object

Dim Range1 As Object

Если при описании можно использовать общий тип Object, зачем себе усложнять жизнь? Ответ прост, программы с использованием объектов конкретного типа выполняются существенно быстрее, это особенно программ циклического характера.

Преимущества использования объектных переменных.

При использовании объектных переменных сокращается время написания кода, делает программу более читабельной и уменьшает время ее выполнения. Например, приводимая ниже подпрограмма устанавливает свойства Value, RowHeight и ColumnWidth объекта Range, выводит в окне сообщения установленное значение свойства Value и затем вызывает метод ClearContents:

Sub Lect11Proc02_RangeObject()

    Worksheets(1).Range("A1").Value = 25

    Worksheets(1).Range("A1").RowHeight = 50

    Worksheets(1).Range("A1").ColumnWidth = 50

    MsgBox Worksheets(1).Range("A1").Value

    Worksheets(1).Range("A1").ClearContents

End Sub

 

То же, но короче благодаря использованию переменной типа Range.

Sub Lect11Proc03_RangeObjectVariable()

    Dim Range1 As Range

    Set Range1 = Worksheets(1).Range("A1")

    Range1.Value = 25

    Range1.RowHeight = 50

    Range1.ColumnWidth = 50

    MsgBox Range1.Value

    Range1.ClearContents

End Sub

 

Proc03 выполняется быстрее раза в 3, чем Proc02 и в ней меньше операций  «точка»

Явное описание переменных.

VBA предоставляет возможность явного описания переменных, предохраняющую от случайного пропуска описаний переменных и недостатков, связанных с использованием переменных типа Variant

VBA требует, чтобы тип Variant при присваивании значения такой переменной приводился в соответствии с типом присваиваемого значения. А это время, особенно если программа циклическая.

Необходимо отслеживать тип данных, которые содержит переменная типа Variant. Переменные типа Variant делают весьма затруднительной отладку, так как неизвестен тип данных, хранящейся в переменной типа Variant.

Явно можно описать двумя способами:

Поместить в раздел описаний  (т.е. в верхнюю часть) каждого модуля VBA оператор Option Explicit (он должен предшествовать всем процедурам и функциям)

В редакторе VBE выполнить команду «СервисПараметрыдиалОкно Параметрывкладка Редакторфлажок Явное описание переменных».

В этом случае редактор VBE будет вставлять оператор «Option Explicit» в начало каждого нового модуля.

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

В VBA не обязательно всегда использовать по умолчанию тип данных Variant. Чтобы изменить тип данных по умолчанию, нужно поместить оператор описания DefТип в начале модуля VBA. Например, если нужно чтобы все неописанные переменные имели по умолчанию тип Integer, поместите следующий оператор в начале модуля VBA перед первой подпрограммой:

DefInt A-Z.

Параметр A-Z. Означает, что все переменные, начинающиеся с A-Z. Будут иметь по умолчанию тип Integer

Еще примеры:

DefInt I

DefStr S

DefCur C

Замечания:

При отсутствии операторов DefТип в начале модуля VBA, все неописанные переменные считается по умолчанию типа Variant.

Можно помещать несколько операторов VBA в одной строке, отделяя их, друг от друга двоеточием:

DefInt I: DefStr S: DefCur C