VBA 列出 MS Access 中所有打开的对象
Posted
技术标签:
【中文标题】VBA 列出 MS Access 中所有打开的对象【英文标题】:VBA to list all open objects in 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
【问题讨论】:
【参考方案1】:表单和报告有一个快捷方式,Application.Forms 包含所有打开的表单,Application.Reports 包含打开的报告(无论它们是弹出窗口还是不可见)。
由于用户不应该能够打开表或查询,这在生产中就足够了。
如果您在开发过程中需要该信息,则必须循环相应的集合并检查每个 forIsLoaded
。
作为替代方案,您应该能够通过句柄检测打开的选项卡,但这需要大量使用(和知识)WinAPI 函数,如FindWindow
和GetClassName
。这可以用来提高您的 WinAPI 技能,但并不比循环集合更优雅。
【讨论】:
我构建了一个开发者插件,我想要一种方法来跟踪所有打开的选项卡。这是对this 的增强。如果没有 WinAPI,似乎没有办法做我想做的事(列出未保存对象的选项卡)。 Application.SysCmd 提供新的对象状态,也许是一个选项? 添加信息和链接到问题的加载项!也在***.com/questions/57103395/…! 我不介意共享我的加载项,但我没有托管它们的网站。如果您希望我 PM 您,请将您的联系信息放在您的个人资料中。 我的评论应该让您将 cmets 信息添加到问题中。与***.com/questions/57103395/… 相同。当然,总是欢迎分享代码(创建一个 github 要点?),但我在 2 周前找到了你的数据库,当时解释了这个问题 here(德语)。以上是关于VBA 列出 MS Access 中所有打开的对象的主要内容,如果未能解决你的问题,请参考以下文章
MS Access VBA从Web浏览器控件的内容中获取数据