访问没有窗体实例的VBA用户窗体控件

我有一个Excel中的VBA项目的朋友。 这个项目有很多的表单popup,并执行各种function,而电子表格正在使用。 他们中的一些有复杂的Form_Initialize方法,依赖于其他已经存在的事物(当按预期使用项目时,这不是问题)。

我们正试图在应用程序中的每个表单上打印每个控件的名称。 我们的问题是, VBA.UserForms集合只包含已经被实例化的表单,并且我们不能在没有执行Form_Initialize方法的情况下实例化所有表单。

例如:

 For Each f In VBA.UserForms Debug.Print f.Name Debug.Print "----------------------" For Each c In f.Controls Debug.Print c.Name Next c Next f 

如果没有使用/加载表单,则什么都不做。 此代码:

 For Each c in frmConfig.Controls Debug.Print c.Name Next c 

首先执行frmConfig.Form_Initialize() ,然后遍历表单上控件的名称打印。 这崩溃,因为在这个表单可用之前需要发生的事情还没有发生。

是否有可能得到窗体上的控件名称没有实例化窗体(避免执行frmConfig.Form_Initialize() )?

任何帮助非常感谢!

这是你正在尝试?

 Option Explicit Sub FindObjects() Dim vbc As VBIDE.VBComponent Dim frm As Object Dim Ctrl As MSForms.Control For Each vbc In ThisWorkbook.VBProject.VBComponents If vbc.Type = vbext_ct_MSForm Then With VBA.UserForms On Error Resume Next Set frm = .Add(vbc.Name) Debug.Print "Found userform :" & vbc.Name If Err.Number = 0 Then For Each Ctrl In frm.Controls Debug.Print "Controls in Userform " & vbc.Name & _ " - " & Ctrl.Name Next Ctrl End If On Error Go To 0 End With End If Next vbc End Sub 

IMP

  1. 设置引用到Microsoft Visual Basic的应用程序扩展性
  2. 在Excel选项中,设置“信任访问VBA项目对象模型”

屏幕截图

在这里输入图像说明

跟进

既然这是一次性的事情,那就这样做吧

  1. 打开VBA项目
  2. 按下CTRL + F
  3. 按照以下屏幕截图所示执行操作,然后运行代码。
  4. 一旦你得到你所需要的,closures文件而不保存

在这里输入图像说明