VBA для отображения всех открытых объектов в MS Access - PullRequest
0 голосов
/ 25 марта 2019

Мне интересно, можно ли в Access VBA выдать список всех открытых вкладок документов в текущем экземпляре Access. У меня есть код, который может проверить каждый объект доступа и сообщить, если он загружен. Это быстро, но похоже на обратный подход. Он также не может перечислить несохраненные объекты, например, новый запрос. Кроме того, я не могу сказать, какие объекты показывают вкладку. Всплывающее окно не имеет вкладки.

Существует ли подпрограмма VBA, в которой можно перечислить все документы с вкладками?

Access Tabbed Documents image

Public Sub ListAllOpenObjects()
' This will list all open Access objects.  It will not list
' objects that are new that have not be saved, like Query1.

    Dim aob As AccessObject

    With CurrentData
        ' "Tables"
        For Each aob In .AllTables
            If aob.IsLoaded Then
                Debug.Print aob.name
            End If
        Next aob

        ' "Queries"
        For Each aob In .AllQueries
            If aob.IsLoaded Then
                Debug.Print aob.name
            End If
        Next aob
    End With

    With CurrentProject
        ' "Forms"
        For Each aob In .AllForms
            If aob.IsLoaded Then
                Debug.Print aob.name
            End If
        Next aob

        ' "Reports"
        For Each aob In .AllReports
            If aob.IsLoaded Then
                Debug.Print aob.name
            End If
        Next aob

        ' "Pages"
        For Each aob In .AllDataAccessPages
            If aob.IsLoaded Then
                Debug.Print aob.name
            End If
        Next aob

        ' "Macros"
        For Each aob In .AllMacros
            If aob.IsLoaded Then
                Debug.Print aob.name
            End If
        Next aob

        ' "Modules"
        For Each aob In .AllModules
            If aob.IsLoaded Then
                Debug.Print aob.name
            End If
        Next aob

    End With

End Sub

1 Ответ

0 голосов
/ 26 июля 2019

Существует ярлык для форм и отчетов: Application.Forms содержит все открытые формы, а Application.Reports содержит открытые отчеты (независимо от того, являются ли они всплывающими окнами или не видны) .

Поскольку пользователи не могут открывать таблицы или запросы, этого достаточно для производства.

Если вам нужна эта информация во время разработки, вы должны зациклить соответствующие коллекции и проверить каждую на IsLoaded.

В качестве альтернативы вы должны иметь возможность обнаруживать открытые вкладки по их ручкам, но для этого требуется широкое использование (и знание) таких функций WinAPI, как FindWindow и GetClassName. Это может быть использовано для улучшения ваших навыков WinAPI, но не более элегантно, чем зацикливание коллекций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...