Как отфильтровать данные по выборкам из двух отдельных полей в форме пользователя - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть пользовательская форма с двумя выпадающими списками (Год и Единица). У меня есть большой набор данных, который я хочу отфильтровать на основе выбора из обоих комбинированных списков, то есть я выбираю Год = 2013, Единица = 20А, я хочу, чтобы он отфильтровал все данные с этими двумя идентифицирующими ссылками.

Я пробовал зависимые комбинированные списки безрезультатно.

Единственный код, который у меня есть к этому моменту, это заполнить поля со списком.

Private Sub UserForm_Initialize()

 Dim N As Long, i As Long
    With Sheets("LookUpLists")
        N = .Cells(Rows.Count, 1).End(xlUp).row
        O = .Cells(Rows.Count, 2).End(xlUp).row

    End With

    With cboYear
        .Clear
        For i = 1 To N
            .AddItem Sheets("LookUpLists").Cells(i + 1, 1).Value
        Next i
    End With

    With cboUnit
        .Clear
        For i = 1 To O
            .AddItem Sheets("LookUpLists").Cells(i + 1, 2).Value
        Next i
    End With
End Sub

1 Ответ

0 голосов
/ 23 апреля 2019

Итак, исходя из моего понимания вашего вопроса, это не должно быть слишком сложно.Вы можете получить значение в выпадающих списках, используя CboYear.Value и cboUnit.Value.Затем вы можете использовать блок with с вашим диапазоном листов и использовать два .autofilter, ссылаясь на соответствующий field:=, являющийся вашим фильтруемым столбцом, и Criteria1:=RespectiveComboBox.Value, содержащий выбор в выпадающем списке.Обратите внимание, что если вы не сделаете выбор ни для одного из полей, это, скорее всего, приведет к ошибке.Также подумайте о том, чтобы поставить условие фильтра в событие ComboBox_Change(), чтобы оно обновлялось при каждом изменении выбора.

Option Explicit

Private Sub cboYear_Change()

With Sheets("LookUpLists").Range("A1:AZ100") 'replace with an appropriate range
    .AutoFilter field:=2, Criteria1:=cboYear.Value 'edit to appropriate field
    .AutoFilter field:=3, Criteria1:=cboUnit.Value 'edit to appropriate field
End With

End Sub

Private Sub cboUnit_Change()

With Sheets("LookUpLists").Range("A1:AZ100") 'replace with an appropriate range
    .AutoFilter field:=2, Criteria1:=cboYear.Value 'edit to appropriate field
    .AutoFilter field:=3, Criteria1:=cboUnit.Value 'edit to appropriate field
End With

    End Sub

Отдельное примечание: вы всегда должны использовать Option Explicit в верхней части ваших модулей.,Вы можете включить это автоматически в VBA -> инструменты.Это поможет вам найти ошибки и ошибки (например, не объявлять O с помощью оператора Dim)

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