excel - 如何加载每个用户窗体而不必单独调用 .Show?

标签 excel userform vba

我想弄清楚如何加载每个用户表单,而无需调用 Userform1.Show UserForm2.Show 等。这是受到对此答案的评论的启发:Excel VBA UserForm_Initialize() in Module

我发现在一些地方建议使用此方法:

Sub OpenAllUserForms()
    Dim uf As UserForm
    For Each uf In UserForms
        uf.Show
    Next
End Sub

但是,无论工作簿附加了多少用户表单,都不会显示任何用户表单。当我单步执行代码时,我确定 UserForms 集合是空的!

如何加载每个用户表单而不必显式显示每个用户表单?

最佳答案

根据此页面:UserForm Object

The UserForms collection is a collection whose elements represent each loaded UserForm in an application.

由于您的用户表单未加载,因此它们不会出现在集合中。这意味着您需要以不同的方式加载表单。为了获取每个用户窗体的名称,您需要允许代码访问 Visual Basic 项目。否则,您需要提供用户表单的名称。

以下命令将打开当前 VBProject 中的每个用户窗体。

Sub OpenAllUserForms()
    Dim VBComp As Object
    For Each VBComp In Application.VBE.ActiveVBProject.VBComponents
        If VBComp.Type = 3 Then '3 = vbext_ct_MSForm
            VBA.UserForms.Add(VBComp.Name).Show
        End If
    Next
End Sub

这是可行的,因为每个 UserForm 都作为 VBComponent 在 VBProject 中列出。一旦代码确定哪些组件是用户窗体,它就会将用户窗体添加到集合中并显示它。如果省略.Show,表单仍将运行Initialize 事件,但随后立即超出范围并消失。

关于excel - 如何加载每个用户窗体而不必单独调用 .Show?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13965608/

相关文章:

Excel 宏日期格式在文件打开时更改

Excel CustomUI 功能区布局

尝试在初始 'Cancel' 之后第二次启动或关闭红色 'X' 时出现 Excel 用户窗体运行时错误

vba - 选择 - ShapeRange 和图表问题

excel - DAO.DBEngine 类不再在使用 Windows 10 的 MS Access 2016 中注册

excel - 根据搜索条件查找列名和行名

VBA Excel 用多列填充列表框

vba - Excel VBA - 将用户窗体组合框的值分配给全局变量

excel - 接下来没有错误VBA

excel - 如何以格式 12 :07 rather than 12:7? 显示时间