Excel 是否有一种方法可以列出一个表单中的所有文本框、组合框和标签,该表单在工作表中具有多页?
嗨,Stackoverflow社区,我想知道是否有一种方法可以列出多页表单中的所有控件(标签、文本框、组合框)?这是因为我需要更新脚本,但它有大约30页和大约200个控件。将此代码粘贴到表单的代码表,并将其链接到可能为此临时添加的按钮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
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项目的任何密码。在运行宏之前,我是否必须对代码进行任何更改?