Excel 是否有一种方法可以列出一个表单中的所有文本框、组合框和标签,该表单在工作表中具有多页?

Excel 是否有一种方法可以列出一个表单中的所有文本框、组合框和标签,该表单在工作表中具有多页?,excel,vba,forms,controls,Excel,Vba,Forms,Controls,嗨,Stackoverflow社区,我想知道是否有一种方法可以列出多页表单中的所有控件(标签、文本框、组合框)?这是因为我需要更新脚本,但它有大约30页和大约200个控件。将此代码粘贴到表单的代码表,并将其链接到可能为此临时添加的按钮 Private Sub GetControlNames() Dim Ctl As Object For Each Ctl In Me.Controls Debug.Print Ctl.Name, Ctl.Pare

嗨,Stackoverflow社区,我想知道是否有一种方法可以列出多页表单中的所有控件(标签、文本框、组合框)?这是因为我需要更新脚本,但它有大约30页和大约200个控件。

将此代码粘贴到表单的代码表,并将其链接到可能为此临时添加的按钮

Private Sub GetControlNames()
    
    Dim Ctl As Object
    
    For Each Ctl In Me.Controls
        Debug.Print Ctl.Name, Ctl.Parent.Name
    Next Ctl
End Sub

单击按钮后,所有控件名称都将列在即时窗格中。在我的测试中,
Parent.Name
是表单的名称,但我希望它能显示控件在设置中的页面。然后,您可以将
Me.Controls
替换为
Me.Controls([Page Name]).Controls
,并获取项目任何页面上的控件名称。这个想法可能需要一些调整,因为我没有尝试过。

这似乎对页面没问题 我把它放进一个模块,然后从任何地方以你称之为的形式

ListAllMyControls Me, ""
对我来说很有用-我想-我的表单也有很多页面和很多控件-我没有进行彻底的检查,但它列出了具有多级层次结构的对象,如

Userform1.MultiPage1.Page1.Label1
Userform1.MultiPage1.Page1.TextBox1
Userform1.MultiPage1.Page2.Label1
Userform1.MultiPage1.Page2.TextBox1
主要程序如下

Public Sub ListAllMyControls(SrcObj As Object, dParentNames As String)
   Dim dCtr As Long, xObj As Object, ParentsWere As String, ParentsB4 As String
   
   ' List this Control
   ParentsWere = dParentNames
   dParentNames = IIf(dParentNames = "", "", dParentNames & ".") & SrcObj.Name
   Debug.Print dParentNames
   
   dCtr = 0
   On Error Resume Next
   dCtr = SrcObj.Controls.Count
   On Error GoTo 0
   
   If UCase(Left(SrcObj.Name, 9)) = "MULTIPAGE" Then
      For Each xObj In SrcObj.Pages
         ParentsB4 = dParentNames
         ListAllMyControls xObj, dParentNames
         dParentNames = ParentsB4
      Next xObj
   Else
      If dCtr > 0 Then
         ' List all my controls
         For Each xObj In SrcObj.Controls
            ParentsB4 = dParentNames
            ListAllMyControls xObj, dParentNames
            dParentNames = ParentsB4
         Next xObj
      Else
         dParentNames = ParentsWere
      End If
   End If  ' MultiPage
End Sub

添加注释-问题是当对象在页面中时,它似乎会列出两次对象。它将它们列为页面的控件以及页面最终所在表单的控件。

我尝试将公共子ListAllMyControls放在模块中,并将ListAllMyControls Me“”放在表单脚本中。但出现以下错误:“运行tiem error'1004'应用程序定义或对象。定义的错误::@Andres它在哪一行崩溃,您正在运行哪个版本的Excel?我刚刚从我的答案中复制了代码,并将其粘贴到另一个具有不同表单的工作簿中,它运行fineBurn我有这个版本:(Microsoft Excel 365)(2016)32位)并且错误是运行时错误,没有显示任何行来解决您是否锁定了VBA项目?如果是,请解锁itI。我是VBA项目的所有者,我没有VBA项目的任何密码。在运行宏之前,我是否必须对代码进行任何更改?