Описание: Для чего? Ну, например, что бы написать свой собственный архивариус. Стандартный не совсем удобен.
Автор: Дмитрий Сонных (AKA Joss)
Добавил на сайт: Joss 04.10.2017
Иногда
бывает надо получить список присутствующих в базе элементов. Причины
могут быть самые разные. Самое простое - пройтись циклом по
соответствующим семействам. И так, приступим.
Таблицы
Список таблиц.
Sub AllTables()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
' Search for open AccessObject objects in AllTables collection.
For Each obj In dbs.AllTables
' Print name of obj.
Debug.Print obj.Name
Next obj
End Sub
Выводятся все таблицы вне зависимости от того локальные они или линкованные.
Можно исключить системные таблицы
Sub UserTables()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
' Search for open AccessObject objects in AllTables collection.
For Each obj In dbs.AllTables
If Left(obj.Name, 4) <> "MSys" Then
If Left(obj.Name, 1) <> "~" Then
' Print name of obj.
Debug.Print obj.Name
end if
End If
Next obj
End Sub
Можно вывести список открытых таблиц
Sub OpenTables()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
' Search for open AccessObject objects in AllTables collection.
For Each obj In dbs.AllTables
If obj.IsLoaded = True Then
' Print name of obj.
Debug.Print obj.Name
End If
Next obj
End Sub
Можно так же уточнить, в каком режиме открыта таблица - в обычном или режиме конструктора (иногда бывает нужно).
Sub OpenTables()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
' Search for open AccessObject objects in AllTables collection.
For Each obj In dbs.AllTables
If obj.IsLoaded = True Then
' Print name of obj.
Debug.Print obj.Name, obj.CurrentView
' CurrentView = 0 as acCurViewDesign
' CurrentView = 2 as acCurViewDatasheet
End If
Next obj
End Sub
Теперь перейдём к запросам.
Запросы
Sub AllQueries()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
' Search for open AccessObject objects in AllQueries collection.
For Each obj In dbs.AllQueries
' Print name of obj.
Debug.Print obj.Name
Next obj
End Sub
Можно так же определить, какие из запросов открыты в настоящее время и в каком режиме
Sub OpenQueries()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentData
' Search for open AccessObject objects in AllQueries collection.
For Each obj In dbs.AllQueries
If obj.IsLoaded = True Then
' Print name of obj.
Debug.Print obj.Name, obj.CurrentView
' CurrentView = 0 as acCurViewDesign
' CurrentView = 2 as acCurViewDatasheet
End If
Next obj
End Sub
Формы
Sub AllForms1()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentProject
' Search for open AccessObject objects in AllForms collection.
For Each obj In dbs.AllForms
' Print name of obj.
Debug.Print obj.Name
Next obj
End Sub
Можно так же определить, какие из форм открыты в настоящее время и в каком режиме
Sub OpenForms()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentProject
' Search for open AccessObject objects in AllForms collection.
For Each obj In dbs.AllForms
If obj.IsLoaded = True Then
' Print name of obj.
Debug.Print obj.Name, obj.CurrentView
' CurrentView = 0 as acCurViewDesign
' CurrentView = 1 as acCurViewFormBrowse
' CurrentView = 2 as acCurViewDatasheet
' CurrentView = 3 as acCurViewPivotTable
End If
Next obj
End Sub
Отчёты
Получить список отчётов
Sub AllReports()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentProject
' Search for open AccessObject objects in AllReports collection.
For Each obj In dbs.AllReports
' Print name of obj.
Debug.Print obj.Name
Next obj
End Sub
Можно так же определить, какие из отчётов открыты в настоящее время и в каком режиме
Sub OpenReports()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentProject
' Search for open AccessObject objects in AllReports collection.
For Each obj In dbs.AllReports
If obj.IsLoaded = True Then
' Print name of obj.
Debug.Print obj.Name, obj.CurrentView
' CurrentView = 0 as acCurViewDesign
' CurrentView = 5 as acCurViewPreView
' CurrentView = 6 as acCurViewReportBrowse
' CurrentView = 7 as acCurViewLayout
End If
Next obj
End Sub
Макросы
Список макросов
Sub AllMacros()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentProject
' Search for open AccessObject objects in AllMacros collection.
For Each obj In dbs.AllMacros
' Print name of obj.
Debug.Print obj.Name
Next obj
End Sub
Можно так же определить, какие из макросов открыты в настоящее время и в каком режиме (а режим пока один - режим конструктора)
Sub OpenMacros()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentProject
' Search for open AccessObject objects in AllMacros collection.
For Each obj In dbs.AllMacros
If obj.IsLoaded = True Then
' Print name of obj.
Debug.Print obj.Name, obj.CurrentView
' CurrentView = 0 as acCurViewDesign
End If
Next obj
End Sub
Модули
Список модулей
Sub AllModules()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentProject
' Search for open AccessObject objects in AllTables collection.
For Each obj In dbs.AllModules
' Print name of obj.
Debug.Print obj.Name
Next obj
End Sub
Наличие
модулей у форм и отчётов так определить нельзя. Они не выводятся. Для
этого необходимо открыть отчёт или форму и проверить свойство HasModule
Можно так же определить, какие из модулей открыты в настоящее время и в каком режиме (а режим пока один - режим конструктора)
Sub OpenModules()
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentProject
' Search for open AccessObject objects in AllModules collection.
For Each obj In dbs.AllModules
If obj.IsLoaded = True Then
' Print name of obj.
Debug.Print obj.Name, obj.CurrentView
' CurrentView = 0 as acCurViewDesign
End If
Next obj
End Sub
Чтобы определить тип модуля - Module или Class Module, необходимо открыть этот модуль и проверить свойство Type.
[Back]