Excel Userform: Combobox используется для заполнения текста или списка - PullRequest
0 голосов
/ 11 октября 2019

Excel VBA: я работаю со списком, и мне нужно заполнить информацию в текстовое поле или список. Combobox получает значение из столбца E (E содержит дату, которая повторяется). Таким образом, поле со списком должно содержать уникальные значения. Затем в списке я хочу получить информацию в соответствующей строке. Например, если в столбце E 1–10 октября, даты с 5 по 10 октября - два раза. Поэтому я хочу, чтобы в combobox были уникальные даты, например, с 1 по 10 октября. Если я выберу 7 октября, то в списке появится информация о двух записях, соответствующих дате 7 октября. Более того, поля, которые мне нужны, находятся в столбце G, J, K, L, M столбца. Если это возможно визуализировать по-другому в пользовательской форме, тогда, пожалуйста, предложите.

Я работал над следующим кодом.

'=========================================================================================

'For collecting unique value in userform combobox
Private Sub UserForm_Initialize()

    UserForm2.ComboBox1.Clear

Dim v, e
With Sheets("Atorvastatin").Range("E2:E1000")
    v = .Value
End With

With CreateObject("scripting.dictionary")
    .comparemode = 1
    For Each e In v
        If Not .exists(e) Then .Add e, Nothing
    Next
    If .Count Then Me.ComboBox1.List = Application.Transpose(.keys)
End With

    Set xRg = Sheets("Atorvastatin").Range("E2:Q1000")

End Sub

'--------------------------------------------------------------------------------------------

Private Sub ComboBox1_Change()

    Dim var1 As Long
    Me.TextBox1 = Application.WorksheetFunction.VLookup(Me.ComboBox1.Value, xRg, 3, False)

End Sub

1 Ответ

0 голосов
/ 11 октября 2019

для заполнения ListBox1 вы можете использовать следующий код:

Private Sub ComboBox1_Change()

    Dim f As Range
    Dim firstAddress As String

    Set f = xRg.Find(what:=Me.ComboBox1.Value, LookIn:=xlValues, lookat:=xlWhole) ' always specify at least 'LookIn' and 'LookAt' parameters, or they will be set as per last 'Find()' usage (even from Excel UI!)
    If Not f Is Nothing Then ' if a match found
        With Me.ListBox1 
            '.Clear ' uncomment to have ListBox1 filled with elements corresponding with current ComboBox1 selected element only
            firstAddress = f.Address ' store first matched cell address
            Do
                .AddItem f.Offset(, 2).Value ' add currently matched cell2 columns to the right value 
                Set f = xRg.FindNext(f) ' search for next occurrence
            Loop While f.Address <> firstAddress ' exit do when hitting first found cell again
        End With
    End If

End Sub

Таким образом, будет достаточно установить xRG только для столбца E

Private Sub UserForm_Initialize()

    Me.ComboBox1.Clear

    Dim v, e
    With Sheets("Atorvastatin") 
        With .Range("E2", .Cells(.Rows.Count, "E").End(xlUp))
            Set xRg = .Cells ' set xRG to column E range only
            v = .Value
        End With
    End With

    With CreateObject("scripting.dictionary")
        .comparemode = 1
        For Each e In v
            If Not .exists(e) Then .Add e, Nothing
        Next
        If .Count Then Me.ComboBox1.List = Application.Transpose(.keys)
    End With


End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...