访问没有窗体实例的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 :
- 设置引用到Microsoft Visual Basic的应用程序扩展性
- 在Excel选项中,设置“信任访问VBA项目对象模型”
屏幕截图
跟进
既然这是一次性的事情,那就这样做吧
- 打开VBA项目
- 按下CTRL + F
- 按照以下屏幕截图所示执行操作,然后运行代码。
- 一旦你得到你所需要的,closures文件而不保存