[英]Access VBA Userform Controls without Form instance
我有一個朋友在Excel中使用VBA項目。 該項目有很多表單,在使用電子表格時彈出並執行各種功能。 其中一些具有復雜的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()
表單上控件的名稱(避免執行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 :
屏幕截圖
跟進
由於這是一次性的事情,所以這樣做
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.