【问题标题】:VBA to list all open objects in MS AccessVBA 列出 MS Access 中所有打开的对象
【发布时间】:2019-03-25 14:55:16
【问题描述】:

我想知道 Access VBA 是否可以列出当前 Access 实例中所有打开的文档选项卡。我有可以检查每个 Access 对象并报告它是否已加载的代码。它很快,但感觉像是一种倒退的方法。它也无法列出未保存的对象,例如新查询。此外,我无法分辨哪些对象正在显示选项卡。弹出窗口没有选项卡。

是否有可以列出所有选项卡式文档的 VBA 例程?

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

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    表单和报告有一个快捷方式,Application.Forms 包含所有打开的表单,Application.Reports 包含打开的报告(无论它们是弹出窗口还是不可见)。

    由于用户不应该能够打开表或查询,这在生产中就足够了。

    如果您在开发过程中需要该信息,则必须循环相应的集合并检查每个 forIsLoaded。

    作为替代方案,您应该能够通过句柄检测打开的选项卡,但这需要大量使用(和知识)WinAPI 函数,如FindWindow和GetClassName。这可以用来提高您的 WinAPI 技能,但并不比循环集合更优雅。

    【讨论】:

    • 我构建了一个开发者插件,我想要一种方法来跟踪所有打开的选项卡。这是对this 的增强。如果没有 WinAPI,似乎没有办法做我想做的事(列出未保存对象的选项卡)。
    • Application.SysCmd 提供新的对象状态,也许是一个选项?
    • 添加信息和链接到问题的加载项!也在stackoverflow.com/questions/57103395/…!
    • 我不介意共享我的加载项,但我没有托管它们的网站。如果您希望我 PM 您,请将您的联系信息放在您的个人资料中。
    • 我的评论应该让您将 cmets 信息添加到问题中。与stackoverflow.com/questions/57103395/… 相同。当然,总是欢迎分享代码(创建一个 github 要点?),但我在 2 周前找到了你的数据库,当时解释了这个问题 here(德语)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2011-03-18
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2021-05-01
    相关资源
    最近更新 更多