Как разобрать строку, используя информацию, извлеченную из формы пользователя - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь создать пользовательскую форму, которая принимает входные данные от userform1 и передает их пользовательской форме2, которая отображает информацию, принадлежащую этому набору данных, в пользовательской форме2. Проблема в том, что после выбора общей категории из строки 1 (CATBOX) мне нужно ограничить анализатор субкомпонентами в строке 2, поскольку в той же строке есть другие субкомпоненты в других категориях. Каждая категория в строке 1 является серией объединенных ячеек

Я уже пытался использовать 'find', чтобы найти значение userform1!CATBOX и вернуть позицию, чтобы получить начальный столбец. Затем я попытался найти диапазон слитой ячейки, чтобы получить конечную точку. Затем я попытался ограничить анализатор диапазоном столбцов в строке 2 для сбора моей информации. Я включил последний бит кода, чтобы просто отобразить значения начальной и конечной точек на userform2, это не нужно для моего кода.

With ActiveSheet

    Set ra = ActiveSheet.Cells.Find(What:=UserForm1!CATBOX.Value, After:=Range("A1"), _
            LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
    Set rng = Range(ra)

    If rng.MergeCells Then

        Set rng = rng.MergeArea
        Set rngStart = rng.Cells(1, 1)
        Set rngEnd = rng.Cells(rng.Rows.Count, rng.Columns.Count)
    End If


    Set rag = UserForm2.Controls.Add("Forms.Label.1", "rag", True)
    With rag
        .Caption = rngStart.Address
        .Left = 10
        .Width = 50
        .Top = 50
    End With

    Set rag2 = UserForm2.Controls.Add("Forms.Label.1", "rag2", True)
    With rag2
        .Caption = rngEnd.Address
        .Left = 70
        .Width = 50
        .Top = 50
    End With

    End With

В результате я хочу получить возможность анализировать второй ряд информации, ограниченный диапазоном столбцов, установленным объединенной категорией над ней.

1 Ответ

0 голосов
/ 09 января 2019

Добро пожаловать в SO.Хотя требования и форма листа данных не ясны, предполагается, как показано ниже. enter image description here Используемый код может быть изменен в соответствии с вашими требованиями и может быть перемещен из события изменения CATBOX в любое подходящее событие

Private Sub CATBOX_Change()
Dim Rng As Range, SubRng As Range
Dim Rw As Long, ColSt As Long, ColEnd As Long, i As Long, ScatNo As Long
Dim Rag As Object

With ThisWorkbook.ActiveSheet

Set Rng = .Rows(1).Find(What:=UserForm1.CATBOX.Value, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

If Rng Is Nothing Then Exit Sub

Set Rng = Rng.MergeArea
Set rngstart = Rng.Cells(1, 1)
Set rngEnd = Rng.Cells(Rng.Rows.Count, Rng.Columns.Count)
Rw = Rng.Row + Rng.Rows.Count
ColSt = Rng.Column
ColEnd = Rng.Column + Rng.Columns.Count - 1
Debug.Print Rw, ColSt, ColEnd

Set Rng = .Range(.Cells(Rw, ColSt), .Cells(Rw, ColEnd))
ScatNo = 0
   For Each SubRng In Rng
        If SubRng.Value <> "" Then
        ScatNo = ScatNo + 1
        Set Rag = UserForm2.Controls.Add("Forms.Label.1", "Scat" & ScatNo)
        Rag.Caption = SubRng.Value
        Rag.Left = 70
        Rag.Width = 50
        Rag.Top = ScatNo * 30
        End If
   Next
End With
UserForm2.Show
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...