Работа
с объектами в семействах
Доступ к объектам,
входящим в семейство, в большинстве случаев возможен только через упоминание
имени семейства, поэтому в программах 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. Это позволяет оперативно управлять, например, кнопками на панелях команд.