Excel VBA Listbox для фильтрации Excel VBA - PullRequest
0 голосов
/ 05 марта 2019

У меня есть listbox1, который заполняет второе listbox2 при выборе элемента из первого списка.Я пытаюсь придумать код для listbox2, чтобы отфильтровать данные в моей электронной таблице Excel на основе выбора.Тем не менее, я новичок в vba, и я изо всех сил, потому что:

  1. мой код для listbox2 не фильтрует данные и
  2. на данный момент код является статическим для одного столбца.

Для того, чтобы мой код работал, он должен быть динамичным при определении нужного столбца для фильтрации.Я добавил свой код ниже:

  • 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

1 Ответ

0 голосов
/ 05 марта 2019

Поскольку str уже является переменной строкового типа, нет необходимости помещать ее в кавычки в этом операторе:

Worksheets("Report").Range("A10:AE6000").AutoFilter Field:=2, criteria:="str"

Измените его на представление переменной:

Worksheets("Report").Range("A10:AE6000").AutoFilter Field:=2, criteria:=str

...