有没有一种方法可以列出 sheet 中有多页表单中的所有文本框、组合框和标签?
Is there a way to list all the textboxs, comboboxs, labels from a form that has multipages in a sheet?
您好 Whosebug 社区,我想知道是否有一种方法可以列出多页表单中的所有控件(标签、文本框、组合框)?这是因为我需要更新脚本,但它有大约 30 页和大约 200 个控件。
将此代码粘贴到表单代码 sheet 并将其 link 粘贴到您可能为此临时添加的按钮。
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
并获取项目任何页面上的控件名称。这个想法可能需要一些调整,因为我没有尝试过。
Pages 似乎没问题
我把它放到一个模块中,然后从任何地方以你用
调用它的形式
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
已添加评论 - 问题是这似乎在页面中列出了两次对象。它将它们列为页面的控件以及页面最终所在的表单的控件。
您好 Whosebug 社区,我想知道是否有一种方法可以列出多页表单中的所有控件(标签、文本框、组合框)?这是因为我需要更新脚本,但它有大约 30 页和大约 200 个控件。
将此代码粘贴到表单代码 sheet 并将其 link 粘贴到您可能为此临时添加的按钮。
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
并获取项目任何页面上的控件名称。这个想法可能需要一些调整,因为我没有尝试过。
Pages 似乎没问题 我把它放到一个模块中,然后从任何地方以你用
调用它的形式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
已添加评论 - 问题是这似乎在页面中列出了两次对象。它将它们列为页面的控件以及页面最终所在的表单的控件。