Фильтр на основе Combobox.Value в Listview

Как я могу отфильтровать данные на основе выбранного Combobox.Value в ListView? Критерии находятся в колонке E. Я хочу отфильтровать столбец E в ListView.

Я пробовал то, что нашел, но ничего не работает. Может быть, у кого-то есть ответ на это.

Изображение

Private Sub UserForm_Initialize()
    Dim dU1 As Object, cU1 As Variant, iU1 As Long, lrU As Long
    Dim i As Integer

    Set dU1 = CreateObject("Scripting.Dictionary")
    lrU = Worksheets("Data").Cells(Rows.Count, 1).End(xlUp).Row
    cU1 = Worksheets("Data").Range("A2:A" & lrU)
    For iU1 = 1 To UBound(cU1, 1)
        dU1(cU1(iU1, 1)) = 1
    Next iU1



    For i = 0 To dU1.Count - 1
        ComboBox1.AddItem dU1.Keys()(i)
    Next

End Sub


Private Sub LoadListView()

    Dim wksSource As Worksheet
    Dim rngData As Range
    Dim rngCell As Range
    Dim LstItem As ListItem
    Dim RowCount As Long
    Dim ColCount As Long
    Dim i As Long
    Dim j As Long
    
    'Set the source worksheet
    Set wksSource = Worksheets("Data")
    

    Set rngData = wksSource.Range("A1").CurrentRegion
    

    For Each rngCell In rngData.Rows(1).Cells
        Me.ListView1.ColumnHeaders.Add Text:=rngCell.Value, Width:=90
    Next rngCell
    
   
    RowCount = rngData.Rows.Count
    
   
    ColCount = rngData.Columns.Count
    
  
    For i = 2 To RowCount
        Set LstItem = Me.ListView1.ListItems.Add(Text:=rngData(i, 1).Value)
        For j = 2 To ColCount
            LstItem.ListSubItems.Add Text:=rngData(i, j).Value
        Next j
    Next i
    
End Sub

Private Sub UserForm_Activate()


    With Me.ListView1
        .Gridlines = True
        .HideColumnHeaders = False
        .View = lvwReport
    End With
    
    Call LoadListView

End Sub

Private Sub ComboBox1_Change()
Dim lLastRow As Long
    Dim i As Integer

    
    lLastRow = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 1 To lLastRow
        If Worksheets("Data").Cells(i, 1) = ComboBox1.Text Then
            
        End If
    Next
End Sub

Пожалуйста, не ссылайтесь на внешние файлы в своем вопросе.

braX 19.08.2023 13:04

Как я могу загрузить сюда?

Slayer 19.08.2023 13:07

Объясните проблему в тексте вопроса. Включите скриншоты и/или соответствующую часть кода. Вы никуда не загружаете файлы Excel. Это не то, как работает переполнение стека.

braX 19.08.2023 13:09

Какое свойство RowSource списка назначено?

CDP1802 19.08.2023 13:50

Пожалуйста. не стесняйтесь добавлять подробную информацию о вашей проблеме. Listview не является членом VBA, но, например. VB.net или другие приложения. Что является источником контента? Если это лист Excel, отфильтруйте данные там и после добавьте в поле со списком.

Black cat 19.08.2023 13:51

Вы действительно имеете в виду «ListView» или вы имеете в виду «ListBox» ... это не одно и то же. Если последнее, добавляете ли вы к нему данные из ячеек на рабочем листе (например, с помощью .RowSource)? Рекомендую вам добавить соответствующую часть (части) кода, который у вас есть, к вашему вопросу (в виде текста) - см. эту страницу SO

JohnM 19.08.2023 13:52

Это Листвью. Не список. Я добавил то, что у меня есть за Userform.

Slayer 19.08.2023 14:29
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
7
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Параметризовать Sub LoadListView()

Option Explicit

Private Sub UserForm_Activate()
    With Me.ListView1
        .Gridlines = True
        .HideColumnHeaders = False
        .View = lvwReport
    End With
    Call LoadListView("")
End Sub

Private Sub LoadListView(s As String)
    Dim Lstitem As ListItem
    Dim rngData As Range, rngCell As Range
    Dim i As Long, j As Long
    
    'Set the source worksheet
    Me.ListView1.ListItems.Clear
    With Worksheets("Data")
        Set rngData = .Range("A1").CurrentRegion
        For Each rngCell In rngData.Rows(1).Cells
            Me.ListView1.ColumnHeaders.Add Text:=rngCell.Value, Width:=90
        Next
    End With
    
    With Me.ListView1
        For i = 2 To rngData.Rows.Count
            If s = "" Or rngData(i, 1) = s Then
                Set Lstitem = .ListItems.Add(Text:=rngData(i, 1).Value)
                For j = 2 To rngData.Columns.Count
                    Lstitem.ListSubItems.Add Text:=rngData(i, j).Value
                Next j
            End If
        Next i
    End With
End Sub


Private Sub ComboBox1_Change()
    Call LoadListView(ComboBox1.Text)
End Sub

Большое спасибо @CDP1802. работает идеально!

Slayer 19.08.2023 20:03

Другие вопросы по теме