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

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

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

2.6.1. Задание объектной переменной

Объектные переменные объявляются и задаются немного иначе, чем остальные. Во фрагменте кода, показанном ниже, приведены инструкции объявления и присваивания:

Dim Range1 As Object

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

Обратите внимание, что объявление производится практически так же, как и для других типов, хотя в данном случае вы можете указать конкретный тип объекта (об этом чуть позже). Теперь разберемся со второй строкой (помните, что оператор присваивания для объектной переменной всегда начинается словом Set!!!):

Переменная

Описание

Set

ключевое слово для присваивания значения объектной переменной

Range1

имя переменной

=

оператор присваивания

Worksheets(l).Range("A1")

объект, присваиваемый переменной

2.6.2. Объектные переменные общего типа

Рассмотрим на примере, что можно делать с переменной типа Object. Зададим с помощью переменных Object и Integer свойство Value объекта Range, которое затем отображается в информационном окне:

Sub Объектная переменная()

Dim Num2 As Long

Num2 = 100000

Dim Range1 As Object

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

Range1.Value = Num2

MsgBox Range1.Value

End Sub

Здесь переменная Rangel равна диапазону Worksheets(l).Range("Al"):

2.6.3. Объектные переменные конкретных типов

Как уже говорилось, описывая объектную переменную, вы можете сопоставить с ней конкретный тип объекта, например Range.

Dim Range1 As Range:

Здесь мы приписали переменной Rangel не общий тип Object, а конкретный тип Range. Приведем еще несколько примеров описания переменных для хранения конкретных типов объектов:

Dim Workbook1 As Workbook

Dim MyWorksheet As Worksheet

Dim XL As Application

Названия типов объектов совпадают с их именами, изображенными на схеме модели объектов Excel в главе 1.

Имейте в виду, что во всех трех объявлениях можно вместо конкретных названий использовать общий тип Object:

Dim Workbook1 As Object

Dim MyWorksheet As Object

Dim XL As Object

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

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

Как уже было сказано, объектные переменные заметно сокращают время, необходимое для написания кода, облегчают его чтение и повышают производительность. Сокращение времени достигается за счет замены длинного обращения к объекту одним словом (именем переменной). Например, в следующей программе задаются свойства Value, RowHeight и ColumnWidth объекта Range; значение свойства Value отображается в информационном окне, а затем вызывается метод ClearContents. В первом фрагменте для обращения к свойствам и методам объекта Range указан путь к нему, начиная от объекта Worksheet:

Sub 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 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

Процедура RangeObjectVariable выглядит проще, к тому же для ее ввода вам пришлось меньше нажимать на клавиши. Из этого примера ясно видно, что все действия совершаются с одним и тем же объектом.

Аргументируя ускорение программы, мы можем обратиться к расчетам, которые уже использовали ранее. В программе RangeObjectVariable шесть обращений к объектам (определяется по числу точек), в программе RangeObject их десять. Поскольку на каждое обращение затрачивается приблизительно равное время, вторая программа работает почти в два раза быстрее первой. Здесь разница незаметна, но она станет очевидной, например, в сложных циклах, выполняемых сотни раз.

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