Live-Forum - Die aktuellen Beiträge
Datum
Titel
07.05.2024 16:36:49
07.05.2024 14:51:38
07.05.2024 13:27:17
Anzeige
Archiv - Navigation
1924to1928
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Listview Items Subitems löschen Sortieru

Listview Items Subitems löschen Sortieru
10.04.2023 14:54:40
Rocco

Hallo Ihr lieben,

ich hoffe Ihr könnt mir helfen.

Folgende Situation, ich habe eine Userform, diese enthält eine Combobox und ein Listview-Element.

Soweit funktioniert auch alles, allerdings wollte ich gern das mir die Daten in dem Listview untereinander angezeigt werden also das er Items und Subitems, die nicht mit meinen Kriterien matchen, ignoriert.

Mein Code sieht folgerndermaßen aus:

Private Sub UserForm_Initialize()

    'Deklaration der Variablen
    Dim dict As Object
    Dim lastRow As Long
    Dim i As Long
    
    'Initialisierung des Dictionaries
    Set dict = CreateObject("Scripting.Dictionary")
    
    'Bestimmung der letzten Zeile in Spalte E
    lastRow = Worksheets("Tabelle1").Cells(Rows.count, "E").End(xlUp).Row
    
    'Schleife zum Füllen des Dictionaries mit eindeutigen Werten aus Spalte E
    For i = 2 To lastRow
        dict(Worksheets("Tabelle1").Cells(i, "E").Value) = 1
    Next i
    
    'Schleife zum Füllen der Combobox mit den Werten aus dem Dictionary
    For Each Key In dict.Keys
        Me.ComboBox1.AddItem Key
    Next Key
    
    'Füllen des Listview-Elements mit Daten aus Tabelle1
    Dim LastColumn As Long
    Dim FirstColumn As Long
    Dim col As Long
    
    LastColumn = Worksheets("Tabelle1").Cells(1, Columns.count).End(xlToLeft).Column
    FirstColumn = 6 'Startspalte in Tabelle1
    
    'Fügen der Spaltenüberschriften zum Listview hinzu
    ListView1.ListItems.Clear
    For col = FirstColumn To LastColumn
        ListView1.ColumnHeaders.Add , , Worksheets("Tabelle1").Cells(1, col).Value, 80
    Next col

    'Listview-Einstellungen
    ListView1.View = lvwReport
    ListView1.Gridlines = True
    
End Sub


Und dann noch für die Combobox:

Private Sub ComboBox1_Change()

'Deklaration der Variablen
Dim selectedValue As String 'Ausgewählter Wert in der Combobox
Dim i As Long 'Zählvariable für die Schleife
Dim j As Long 'Zählvariable für die Schleife
Dim lastRow As Long 'Letzte Zeile in Spalte E
Dim lastCol As Long 'Letzte Spalte in der Tabelle
Dim rng1 As Range 'Bereich zum Markieren der Zellen
Dim rng2 As Range 'Bereich zum Markieren der Zellen
Dim rngsum As Range

'Auslesen des ausgewählten Werts in der Combobox
selectedValue = ComboBox1.Value

'Bestimmung der letzten Zeile in Spalte E
lastRow = Sheets("Tabelle1").Cells(Rows.count, "E").End(xlUp).Row

'Bestimmung der letzten Spalte in der Tabelle
lastCol = Sheets("Tabelle1").Cells(1, Columns.count).End(xlToLeft).Column

'Leeren des Listview-Elements
ListView1.ListItems.Clear

'Schleife zum Durchlaufen der Tabelle und zum Hinzufügen von Zeilen zum Listview-Element
For i = 2 To lastRow 'Start bei Zeile 2, da Zeile 1 die Überschriften enthält
    If Sheets("Tabelle1").Cells(i, "E").Value = selectedValue Then 'Überprüfung, ob der Wert in Spalte E mit dem ausgewählten Wert übereinstimmt
        'Hinzufügen einer neuen Zeile zum Listview-Element
        With ListView1.ListItems.Add
            If Sheets("Tabelle1").Cells(i, "F").Value  3 Then
                .text = Sheets("Tabelle1").Cells(i, "C").Value 'Hinzufügen des Werts aus Spalte F zur ersten Spalte der neuen Zeile
                If rng1 Is Nothing Then
                    Set rng1 = Sheets("Tabelle1").Cells(i, "F")
                Else
                    Set rng1 = Union(rng1, Sheets("Tabelle1").Cells(i, "F"))
                End If
            End If
            For j = 7 To lastCol 'Start bei Spalte 7, da die Spalten 1-6 bereits belegt sind
                If Sheets("Tabelle1").Cells(i, j).Value  3 Then
                    .ListSubItems.Add text:=Sheets("Tabelle1").Cells(i, "C").Value 'Hinzufügen des Werts aus der aktuellen Spalte zur neuen Zeile
                    If rng2 Is Nothing Then
                        Set rng2 = Sheets("Tabelle1").Cells(i, j) 'Erste Zelle markieren
                    Else
                        Set rng2 = Union(rng2, Sheets("Tabelle1").Cells(i, j)) 'Bereich erweitern
                    End If
                Else
                    .ListSubItems.Add text:=""
                End If
            Next j
        End With
    End If
Next i

Set rngsum = Union(rng1, rng2)
'Markieren der Zellen, die den Kriterien entsprechen
If Not rngsum Is Nothing Then rngsum.Select

End Sub


So sieht dann die Ansicht in meiner Userform aus:

https://www.herber.de/bbs/user/158656.png

Also ich habe halt zwischen den Namen dann leere Zeilen so zu sagen.

Das ist meine Tabelle:

https://www.herber.de/bbs/user/158657.png

Vielen Dank schonmal.

LG
Rocco

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listview Items Subitems löschen Sortieru
10.04.2023 18:33:21
Alwin WeisAngler
Hallo Rocco,
lade mal eine verwertbare Beispielmappe hoch.
Was ich nicht verstehe, ist wie die gefundenen Ausgaben in dem Listview abgebildet werden sollen.
.ListItems.Add ist die erste Spalte des LW
.SubItems sind alle weiteren Spalten nach Spalte 1
Den Kram gefiltert/gematcht dann einlesen ist doch kein Problem - oder.
Oder willst du, da es immer nur einen Treffer gibt die Ausgabe im LW vertikal??

Gruß Uwe


AW: Listview Items Subitems löschen Sortieru
10.04.2023 20:19:36
Alwin WeisAngler
Ich habe mir mal den Code angesehen. Ist es nicht besser das Herausfiltern in einem Array Spalte für Spalte durchlaufen zu lassen.
Dazu ein temporäres Array anlegen, welches eindimensional ist. Dieses gefiltert mit den passenden Werten füllen. Dann diese Array Spalte für Spalte einem Ausgabearray übergeben.
Das Ausgabearray kann dann in die Listview übergeben werden.
Was bleibt in den Spalten des LW sind dann leere Elemente unten dran, entsprechend der Länge der längsten Spalte.
Kommst du damit nicht klar, lade eine brauchbare Mappe mit sinnvollen Daten hoch.
Was wichtig zu wissen wäre, in welchen Zusammenhang stehen Werte in Liste der Combobox1 mit den Daten ab Spalte F.

Gruß Uwe

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige