首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过UserForm循环

通过UserForm循环
EN

Stack Overflow用户
提问于 2018-07-03 08:33:44
回答 1查看 80关注 0票数 0

我正在尝试循环项目组件,如果结果是3 ( Userform ),循环通过teach,并获得它的控制名和属性,但是在第二个过程中,每个组件都会收到一个错误。

任何帮助都会感激的!!

代码语言:javascript
复制
Option Explicit

Sub Find_From_control()

    Dim Control As Control
    Dim Component As Object
    Dim LastRow As Long

     For Each Component In ThisWorkbook.VBProject.VBComponents
        If Component.Type = 3 Then

            For Each Control In Form.Controls
                LastRow = wsControl.Range("I" & Rows.Count).End(xlUp).Row

                If TypeName(Control) = "TabStrip" Or TypeName(Control) = "ScrollBar" Or TypeName(Control) = "SpinButton" Or TypeName(Control) = "MultiPage" Or TypeName(Control) = "TextBox" Then
                    wsControl.Range("I" & LastRow + 1).Value = Control.Name
                    wsControl.Range("J" & LastRow + 1).Value = Control.Type
                    wsControl.Range("L" & LastRow + 1).Value = Control.Tag
                    wsControl.Range("M" & LastRow + 1).Value = Control.TabIndex
                ElseIf TypeName(Control) = "Image" Then
                    wsControl.Range("I" & LastRow + 1).Value = Control.Name
                    wsControl.Range("J" & LastRow + 1).Value = Control.Type
                    wsControl.Range("L" & LastRow + 1).Value = Control.Tag
                ElseIf TypeName(Control) = "Frame" Or TypeName(Control) = "ToggleButton" Or TypeName(Control) = "OptionButton" Or TypeName(Control) = "CheckBox" Or TypeName(Control) = "Label" Or TypeName(Control) = "CommandButton" Then
                    wsControl.Range("I" & LastRow + 1).Value = Control.Name
                    wsControl.Range("J" & LastRow + 1).Value = Control.Type
                    wsControl.Range("K" & LastRow + 1).Value = Control.Caption
                    wsControl.Range("L" & LastRow + 1).Value = Control.Tag
                    wsControl.Range("M" & LastRow + 1).Value = Control.TabIndex
                ElseIf TypeName(Control) = "ListBox" Or TypeName(Control) = "ComboBox" Then
                    wsControl.Range("I" & LastRow + 1).Value = Control.Name
                    wsControl.Range("J" & LastRow + 1).Value = Control.Type
                    wsControl.Range("L" & LastRow + 1).Value = Control.Tag
                    wsControl.Range("M" & LastRow + 1).Value = Control.TabIndex
                    wsControl.Range("N" & LastRow + 1).Value = Control.ColumnCount
                End If

            Next
        End If
    Next
End Sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-03 10:28:09

Userform是组件Component.Designer

Control.Type不是有效的属性,请使用TypeName(Control)

代码语言:javascript
复制
Sub Find_From_control()

    Dim Control As Control
    Dim Component As Object
    Dim Form As UserForm
    Dim LastRow As Long

     For Each Component In ThisWorkbook.VBProject.VBComponents
        If Component.Type = 3 Then
            Set Form = Component.Designer
            For Each Control In Form.Controls
                LastRow = wsControl.Range("I" & Rows.count).End(xlUp).Row

                If TypeName(Control) = "TabStrip" Or TypeName(Control) = "ScrollBar" Or TypeName(Control) = "SpinButton" Or TypeName(Control) = "MultiPage" Or TypeName(Control) = "TextBox" Then
                    wsControl.Range("I" & LastRow + 1).Value = Control.Name
                    wsControl.Range("J" & LastRow + 1).Value = TypeName(Control)
                    wsControl.Range("L" & LastRow + 1).Value = Control.Tag
                    wsControl.Range("M" & LastRow + 1).Value = Control.TabIndex
                ElseIf TypeName(Control) = "Image" Then
                    wsControl.Range("I" & LastRow + 1).Value = Control.Name
                    wsControl.Range("J" & LastRow + 1).Value = TypeName(Control)
                    wsControl.Range("L" & LastRow + 1).Value = Control.Tag
                ElseIf TypeName(Control) = "Frame" Or TypeName(Control) = "ToggleButton" Or TypeName(Control) = "OptionButton" Or TypeName(Control) = "CheckBox" Or TypeName(Control) = "Label" Or TypeName(Control) = "CommandButton" Then
                    wsControl.Range("I" & LastRow + 1).Value = Control.Name
                    wsControl.Range("J" & LastRow + 1).Value = TypeName(Control)
                    wsControl.Range("K" & LastRow + 1).Value = Control.Caption
                    wsControl.Range("L" & LastRow + 1).Value = Control.Tag
                    wsControl.Range("M" & LastRow + 1).Value = Control.TabIndex
                ElseIf TypeName(Control) = "ListBox" Or TypeName(Control) = "ComboBox" Then
                    wsControl.Range("I" & LastRow + 1).Value = Control.Name
                    wsControl.Range("J" & LastRow + 1).Value = TypeName(Control)
                    wsControl.Range("L" & LastRow + 1).Value = Control.Tag
                    wsControl.Range("M" & LastRow + 1).Value = Control.TabIndex
                    wsControl.Range("N" & LastRow + 1).Value = Control.ColumnCount
                End If

            Next
        End If
    Next
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51150029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档