簡體   English   中英

訪問沒有Form實例的VBA Userform控件

[英]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

  1. 設置對Microsoft Visual Basic For Applications Extensibility的引用
  2. 在Excel選項中,設置“信任訪問VBA項目對象模型”

屏幕截圖

在此輸入圖像描述

跟進

由於這是一次性的事情,所以這樣做

  1. 打開VBA項目
  2. CTRL + F.
  3. 如下面的屏幕截圖所示,然后運行代碼。
  4. 一旦你得到了你需要的東西,關閉文件而不保存

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM