У меня есть listbox1, который заполняет второе listbox2 при выборе элемента из первого списка.Я пытаюсь придумать код для listbox2, чтобы отфильтровать данные в моей электронной таблице Excel на основе выбора.Тем не менее, я новичок в vba, и я изо всех сил, потому что:
- мой код для listbox2 не фильтрует данные и
- на данный момент код является статическим для одного столбца.
Для того, чтобы мой код работал, он должен быть динамичным при определении нужного столбца для фильтрации.Я добавил свой код ниже:
- A) Инициализировать
- B) Listbox1 Click
- C) Listbox2 Click
В разделе C мой код не работает
Раздел A
Инициализация пользовательской формы:
Public Sub UserForm_Initialize()
With ListBox1
.AddItem "State"
.AddItem "County"
.AddItem "City"
End With
ListBox1.Font.Size = 12
ListBox1.Font.Name = "Arial"
End Sub
Секция B
Список 1 Нажмите
Private Sub ListBox1_Click()
Dim x As Integer
x = ListBox1.ListIndex
Select Case x
Case Is = 0
'code to add a unique list to user form when selecting budim yer
'With ListBox2
'
' .AddItem "Michael"
' .AddItem "Kassie"
'End With
Dim myCollection As Collection, cell As Range
On Error Resume Next
Set myCollection = New Collection
With ListBox2
.Clear
For Each cell In Range("O11:O6000")
If Len(cell) <> 0 Then
Err.Clear
myCollection.Add cell.Value, cell.Value
If Err.Number = 0 Then .AddItem cell.Value
End If
Next cell
End With
Case Is = 1
Dim my2Collection As Collection, cell_2 As Range
On Error Resume Next
Set my2Collection = New Collection
With ListBox2
.Clear
For Each cell_2 In Range("D11:D6000")
If Len(cell_2) <> 0 Then
Err.Clear
my2Collection.Add cell_2.Value, cell_2.Value
If Err.Number = 0 Then .AddItem cell_2.Value
End If
Next cell_2
End With
Case Is = 2
Dim my3Collection As Collection, cell_3 As Range
On Error Resume Next
Set my3Collection = New Collection
With ListBox2
.Clear
For Each cell_3 In Range("F11:F6000")
If Len(cell_3) <> 0 Then
Err.Clear
my3Collection.Add cell_3.Value, cell_3.Value
If Err.Number = 0 Then .AddItem cell_3.Value
End If
Next cell_3
End With
End With ' << Edit: double End With ??? :-;
End Select
ListBox2.Font.Size = 12
ListBox2.Font.Name = "Arial"
End Sub
Секция C
Список 2 Нажмите Здесь мой код не работает
Private Sub ListBox2_Click()
Dim str As String
str = ListBox2.Text
Worksheets("Report").Range("A10:AE6000").AutoFilter Field:=2, criteria:="str"
End Sub