Работа с объектами в семействах



Работа с объектами в семействах

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

Function IsLoaded (strFormName As String) As Boolean

'Возвращает значение True, если форма открыта и False, если нет

Dim frm As Form

IsLoaded = False



For each frm in Forms

If frm.Name = FormName

Then IsLoaded = True

Exit Function

EndIf

Next frm

End Function

В данной функции мы сначала объявили объектную переменную типа Form и установили начальное значение функции. Затем мы организуем цикл, в котором перебираем элементы семейства Forms до тех пор, пока не обнаружим в нем объект Form с именем, совпадающим со строковой переменной, которая является аргументом функции. Если такой объект найден, мы присваиваем функции значение True и выходим из нее. Если нет, то когда будут перебраны все элементы семейства Forms, функция вернет значение False.

Для того чтобы организовать цикл с перебором элементов, количество которых неизвестно, в настоящем примере мы использовали оператор For Each. . .Next. Этот оператор обычно используется при работе с семействами. Однако мы могли организовать такой же цикл, используя обычный оператор For. . .Next, т. к. любое семейство (в том числе и Forms) имеет свойство Count, которое возвращает количество элементов в семействе. Ниже приводится другой вариант организации этого цикла:

For I = 0 То Forms.Count - 1

If frm(I).Name = FormName Then

IsLoaded = True

Exit Function

EndIf

Next I

Кроме указанного свойства, семейства объектов доступа к данным имеют два метода, которые позволяют добавлять объекты в семейство и удалять их из семейства, — методы Append и Delete. Это обеспечивает оперативное создание объектов доступа к данным, например, временных таблиц. Чтобы создать таблицу программным путем, вы должны не только определить эту таблицу, но и добавить ее в соответствующее семейство. Ниже приводится фрагмент кода процедуры, в котором создается новая таблица, определяются два ее поля и добавляются объекты в семейства Fields и TableDef s

'Объявляем объектные переменные для объектов:

база данных, таблица и поле Dim db As Database,

td As TableDef, fid As Field

'Устанавливаем ссылку на текущую базу данных

Set db = CurrentDb

'Создаем новую таблицу, используя метод

CreateTableDef объекта Database

Set td = db.CreateTableDef("Временная")

'Создаем поле в таблице, используя метод

CreateField объекта TableDef

'Поле будет иметь имя "Дата" и тип Дата/время

Set fid = td.CreateField("Дата",dbDate)

'Добавляем поле "Дата" в семейство Fielfs таблицы

td.Fields.Append fid

'Создаем второе поле с именем "Сумма" и типом Денежный

Set fid = td.CreateField("Сумма",dbCurrency)

'Добавляем поле "Сумма" в семейство Fielfs таблицы

td.Fields.Append fid

'Добавляем таблицу к семейству TableDefs базы данных

db.TableDefs.Append td

'Обновляем семейство TableDefs

db.TableDefs.Refresh

Яосле выполнения этой программы на вкладке Таблицы (Tables) окна базы данных появится новая таблица "Временная".

Удалить эту таблицу можно аналогичным способом, только уже воспользовавшись методом Delete семейства TableDefs.

db.TableDefs.Delete "Временная"

db.TableDefs.Refresh

Set db = Nothing

Метод Refresh обновляет количество объектов семейства после добавления или удаления объектов. В последнем предложении мы освобождаем объектную переменную db.

Замечание

К сожалению, семейства в модели Microsoft Access не имеют аналогичных методов. Это означает, что вы не можете, например, оперативно добавлять или удалять поля в формах или отчетах. Если в зависимости от условий в форме должны отображаться или не отображаться некоторые поля, приходится создавать элементы управления для всех возможных полей, а затем использовать свойство Visible соответствующих элементов управления, чтобы поля либо были видимы, либо невидимы. В семействах объектной модели Microsoft Office аналогичные свойства есть: Add и Delete. Это позволяет оперативно управлять, например, кнопками на панелях команд.



Содержание раздела