代码之家  ›  专栏  ›  技术社区  ›  Error 1004

循环用户窗体

vba
  •  0
  • Error 1004  · 技术社区  · 6 年前

    我试图遍历项目组件,如果结果是3(userform),则遍历teachuserform并获取它的控件名和属性,但在第二个步骤中,每一个都会收到一个错误。

    任何帮助都将不胜感激!啊!

    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
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   TinMan    6 年前

    userform是组件 Component.Designer 是的。

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

    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