Цикл через пользовательскую форму - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь перебрать компоненты проекта, и если результат равен 3 (пользовательская форма), перебрать обучающую пользовательскую форму и получить ее имя и свойства элемента управления, но я получаю сообщение об ошибке во втором для каждого.

любая помощь оценит !!

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 Ответ

0 голосов
/ 03 июля 2018

Пользовательской формой является Компонент 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...