#excel #vba
#excel #vba
Вопрос:
У меня есть пользовательская форма с двумя блоками со списком (год и единица измерения). У меня есть большой набор данных, который я хочу отфильтровать на основе выборки из обоих списков со списком, т. Е. Я выбираю Year = 2013, Unit = 20A, я хочу, чтобы он отфильтровывал все данные с этими двумя идентифицирующими ссылками.
Я пробовал зависимые списки со списком, но безрезультатно.
Единственный код, который у меня есть на данный момент, — это заполнить поля со списком.
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:
Итак, исходя из моего понимания вашего вопроса, это не должно быть слишком сложно. Вы можете получить значение полей со списком, используя CboYear.Value
и cboUnit.Value
. Затем вы можете использовать with
блок с диапазоном ваших листов и использовать два, .autofilter
ссылающихся на соответствующий, field:=
являющийся вашим фильтруемым столбцом и Criteria1:=RespectiveComboBox.Value
содержащий выбор combobox. Обратите внимание, что отсутствие выбора ни в одном из полей, скорее всего, приведет к ошибке. Также подумайте о том, чтобы поместить условие фильтрации в 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 -> tools. Это поможет вам найти ошибки (например, не объявлять O с помощью Dim
инструкции)
Комментарии:
1. Спасибо! Это именно то, что я искал.
2. Дружественная подсказка: исправлено написание
Criteria1
параметров в обоих подразделах 🙂