MyTetra Share
Делитесь знаниями!
Получить списки таблиц, запросов, форм, отчётов, макросов, модулей
16.03.2019
23:43
Раздел: !Закладки - VBA - Access
Получить списки таблиц, запросов, форм, отчётов, макросов, модулей

(обращений: 95 с 04.10.2017)

Разделы:  ЧаВо (FAQ)

 

Описание: Для чего? Ну, например, что бы написать свой собственный архивариус. Стандартный не совсем удобен.

Автор: Дмитрий Сонных (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]


Текущий рейтинг:
0 из 5 (проголосовало:0).
Здравствуйте!
Для участия в рейтинге необходимо залогиниться на сайт.
Это сделано для того, чтобы более точно производить оценку статей (чтобы одному и тому же человеку было труднее голосовать несколько раз, портя тем самым статистику.
Эта процедура очень быстрая и, надеюсь, Вас не затруднит :).
Все мысли по поводу работы сайта всегда можно высказать на форуме!
Вход на сайт

Обсуждение статьи:   
Просмотр списка таблиц на DAO Профиль пользователяJoss   
Для тех, кто не хочет связываться с ADO

Sub AllFormsDAO()

Dim dbs As Database, tdf As TableDef

Set dbs = CurrentDb

For Each tdf In dbs.TableDefs

' Print name of obj.

Debug.Print tdf.Name

Next tdf

Set tdf = Nothing

dbs.Close

Set dbs = Nothing

End Sub



02.10.2017 11:23

Фича для документирования базы Профиль пользователяJoss   
Взято с SQL.RU Ссылка
**********************************************************************
Здравствуйте уважаемые!

В приложении - одна форма, которая формирует список всех объектов (форм, отчетов и модулей) и референсов той базы (или .adp проекта) из которой запускается. Если кому охота - можно доделать для страниц и макросов.

Для референсов - проверяется корректность всех ссылок проекта.

Может экспортировать списки в текстовый файл.
Очень удобно, при распространении приложений.

Важно! - форма работает, если подключен файл MSCOMCTL.OCX (т.к. используется listview)
Обычно живет здесь: c:\windows\system32

Навеяно Гетцем, хотя сделал намного раньше, чем прочитал.
У многих наверняка есть что-то похожее, а новичкам может помочь.

Удачи!
AVVS
Присоединенный файл:DBA_Features.zip (Размер: 35405 байт, Скачиваний:13)
02.10.2017 12:04

Прикрепленные файлы:
Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования