Vba 如何访问单独Excel实例的UserForms集合?

Vba 如何访问单独Excel实例的UserForms集合?,vba,excel,Vba,Excel,有没有办法获取单独Excel实例的UserForms集合(对象浏览器指示它是VBA.Global的成员)?我需要检查是否加载了表单,如果没有,则适当地退出远程应用程序,以免留下任何重影进程——但我无法找到一种简单地检测这种情况的方法 我可能会使用一系列复杂的API调用来识别所有用户窗体窗口(“ThunderDFrames”),然后识别它们的父进程,然后识别它们的父进程的hWnd,然后检测它们是否匹配它所承载的应用程序对象的hWnd,但是,简单地获取用于测试应用程序的UserForms colle

有没有办法获取单独Excel实例的UserForms集合(对象浏览器指示它是VBA.Global的成员)?我需要检查是否加载了表单,如果没有,则适当地退出远程应用程序,以免留下任何重影进程——但我无法找到一种简单地检测这种情况的方法


我可能会使用一系列复杂的API调用来识别所有用户窗体窗口(“ThunderDFrames”),然后识别它们的父进程,然后识别它们的父进程的hWnd,然后检测它们是否匹配它所承载的应用程序对象的hWnd,但是,简单地获取用于测试应用程序的UserForms collection会让人感觉更加优雅。

对于一个更简单的答案,答案是否定的

因为正如@Daniel所指出的,不同过程中的每一本回忆录都是相互隔离和独立的。因此,如果没有一点繁重的设计,就无法在另一个进程中读取内存


解决方法是将UserForm的数据
集合
保存到工作簿中并从中读取。就像在封闭的工作簿中写作和阅读一样。这将有点像你的记忆位置。效率不高,但可以:)不费吹灰之力。

您可以使用UserForms集合在应用程序中迭代所有加载的用户表单。我知道-这就是我要做的!但是,UserForms集合(毫不奇怪)不提供进程外用户表单的信息(即运行在不是执行代码的Excel.Application对象上的用户表单)。我想要的是xlNew的UserForms集合,如下所示:
Dim xlNew as New Excel.Application
Aha我现在看到了。显然,VBA.UserForms集合绑定到特定的进程。因此,如果您创建了新的Excel.Application,那么当前的VBA.UserForms集合不包含此新流程的UserForms。对于所有正在运行的Excel实例,您需要类似于超级全局VBA.UserForms的东西。因此,我不知道如何使用VBA解决这个问题:-(。当然,使用Win API,您可以找到所有Excel实例的所有用户表单。