Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Gefilterte Liste in Listbox / Combobox anzeigen
zurück: Gantt-Diagramm per Fehlerindikatoren weiter: Zugriff auf alle offenen Word-Instanzen Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Information Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Isabelle :-)
Menschin


Verfasst am:
18. März 2013, 01:19
Rufname:
Wohnort: Westlicher Spiralarm der Galaxis


Gefilterte Liste in Listbox / Combobox anzeigen - Gefilterte Liste in Listbox / Combobox anzeigen

Nach oben
       Version: Office 2k (2000)

Hallöchen,

um eine gefilterte Liste flott in einer Listbox oder Combobox eines Userforms anzeigen zu können, machen wir uns den Umstand zunutze, dass Excel in gefilterten Listen nur die sichtbaren Zeilen kopiert. Wir holen uns diese Zeilen aus der Zwischenablage in das DataObject des Userforms, zerlegen es mit der Split-Funktion in Zeilen, die Zeilen wieder in Spalten und schreiben diese Daten erst mal in ein weiteres Array welches dann en bloc in die Listbox / Combobox übertragen wird.

Dazu drei Beispiele:

1. Die ersten 4 Spalten der gefilterten Liste werden in einer Listbox ausgegeben:

Code:
Private Sub UserForm_Activate()

    Dim objDataObject As DataObject
    Dim avntInput As Variant, avntRow As Variant
    Dim avntOutput() As Variant
    Dim ialngRow As Long, ialngColumn As Long
    Dim strTemp As String

    'Bildschirmaktualisierung ausschalten
    Application.ScreenUpdating = False

    'gefilterte Liste ohne Überschriften kopieren
    With Tabelle1.AutoFilter.Range
        Range(.Cells(2, 1), .Cells(.Rows.Count, 4)).Copy
    End With

    'neue Instanz des Data-Objektes anlegen
    Set objDataObject = New DataObject

    'Inhalt der Zwischenablage in das Data-Objekt holen
    objDataObject.GetFromClipboard

    With Application

        'Zwischenablage löschen (entfernt den Ameisenrahmen)
        .CutCopyMode = False

        'Bildschirmaktualisierung einschalten
        Application.ScreenUpdating = True

    End With

    'Daten aus dem Data-Objekt in einen String übertragen
    strTemp = objDataObject.GetText

    'Data-Objekt zerstören
    Set objDataObject = Nothing

    'den letzten Zeilenumbruch entfernen
    strTemp = Left$(strTemp, Len(strTemp) - 2)

    'String in Zeilen aufteilen
    avntInput = Split(strTemp, vbCrLf)

    'Ausgabearray dimensionieren (die Split-Funktion erzeugt ein 0-basiertes Array)
    ReDim avntOutput(0 To UBound(avntInput, 1), 0 To 3)

    'Schleife über alle Zeilen
    For ialngRow = 0 To UBound(avntInput)

        'Zeile in Spalten aufteilen
        avntRow = Split(avntInput(ialngRow), vbTab)

        'Schleife über alle Spalten
        For ialngColumn = 0 To 3

            'Daten in das Ausgabearray übertragen
            avntOutput(ialngRow, ialngColumn) = avntRow(ialngColumn)

        Next
    Next

    'Ausgabearray in die Listbox übertragen
    ListBox1.List = avntOutput

End Sub


2. Die Spalten A, C, E und F der gefilterten Liste werden in einer Listbox ausgegeben:

Code:
Private Sub UserForm_Activate()

    Dim objDataObject As DataObject
    Dim avntInput As Variant, avntOutput() As Variant
    Dim avntRow As Variant, avntColumns As Variant
    Dim vntColumnItem As Variant
    Dim ialngRow As Long, ialngColumn As Long
    Dim strTemp As String

    'Bildschirmaktualisierung ausschalten
    Application.ScreenUpdating = False

    'Spalten welche angezeigt werden sollen bestimmen
    'weil das Array 0-basiert ist entsprich 0 der ersten Spalte
    avntColumns = Array(0, 2, 4, 5)

    'gefilterte Liste ohne Überschriften kopieren
    With Tabelle1.AutoFilter.Range
        Range(.Cells(2, 1), .Cells(.Rows.Count, 6)).Copy
    End With

    'neue Instanz des Data-Objektes anlegen
    Set objDataObject = New DataObject

    'Inhalt der Zwischenablage in das Data-Objekt holen
    objDataObject.GetFromClipboard

    With Application

        'Zwischenablage löschen (entfernt den Ameisenrahmen)
        .CutCopyMode = False

        'Bildschirmaktualisierung einschalten
        Application.ScreenUpdating = True

    End With

    'Daten aus dem Data-Objekt in einen String übertragen
    strTemp = objDataObject.GetText

    'Data-Objekt zerstören
    Set objDataObject = Nothing

    'den letzten Zeilenumbruch entfernen
    strTemp = Left$(strTemp, Len(strTemp) - 2)

    'String in Zeilen aufteilen
    avntInput = Split(strTemp, vbCrLf)

    'Ausgabearray dimensionieren (die Split-Funktion erzeugt ein 0-basiertes Array)
    ReDim avntOutput(0 To UBound(avntInput, 1), 0 To UBound(avntColumns))

    'Schleife über alle Zeilen
    For ialngRow = 0 To UBound(avntInput)

        'Zeile in Spalten aufteilen
        avntRow = Split(avntInput(ialngRow), vbTab)

        'Schleife über unser Spaltenarray
        For Each vntColumnItem In avntColumns

            'Daten in das Ausgabearray übertragen
            avntOutput(ialngRow, ialngColumn) = avntRow(vntColumnItem)

            'Spaltenzähler für Ausgabearray erhöhen
            ialngColumn = ialngColumn + 1

        Next

        'neue Zeile - Spaltenzähler für Ausgabearray zurücksetzen
        ialngColumn = 0

    Next

    'Ausgabearray in die Listbox übertragen
    ListBox1.List = avntOutput

End Sub


3. Die Spalte I der gefilterten Liste werden in einer Listbox ausgegeben:

Code:
Private Sub UserForm_Activate()

    Dim objDataObject As DataObject
    Dim strTemp As String

    'Bildschirmaktualisierung ausschalten
    Application.ScreenUpdating = False

    'gefilterte Liste ohne Überschriften kopieren
    With Tabelle1.AutoFilter.Range
        Range(.Cells(2, 8), .Cells(.Rows.Count, 8)).Copy
    End With

    'neue Instanz des Data-Objektes anlegen
    Set objDataObject = New DataObject

    'Inhalt der Zwischenablage in das Data-Objekt holen
    objDataObject.GetFromClipboard

    With Application

        'Zwischenablage löschen (entfernt den Ameisenrahmen)
        .CutCopyMode = False

        'Bildschirmaktualisierung einschalten
        Application.ScreenUpdating = True

    End With

    'Daten aus dem Data-Objekt in einen String übertragen
    strTemp = objDataObject.GetText

    'Data-Objekt zerstören
    Set objDataObject = Nothing

    'den letzten Zeilenumbruch entfernen
    strTemp = Left$(strTemp, Len(strTemp) - 2)

    'String in ein Array splitten und dabei in die Listbox übertragen
    ListBox1.List = Split(strTemp, vbCrLf)

End Sub

_________________
LG Isi

Die Mitgliedschaft im Forum erhöht deine Chance auf eine Antwort von mir um 99,999%
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Excel Formeln: Werte aus Liste raussuchen 8 KARL 1217 30. Apr 2014, 18:10
Holger1968 Werte aus Liste raussuchen
Keine neuen Beiträge Excel Formeln: Wert nicht als 0 anzeigen,aber trotzdem damit rechnen können 4 Bleppomueller 1319 20. Jun 2005, 14:29
Gast Wert nicht als 0 anzeigen,aber trotzdem damit rechnen können
Keine neuen Beiträge Excel Formeln: Breite einer Drop-Down Liste beeinflussen 1 Biggi 1193 10. Apr 2005, 16:57
fl618 Breite einer Drop-Down Liste beeinflussen
Keine neuen Beiträge Excel Formeln: Liste nach Daten aus einem Feld sortieren 5 thomas34 1221 05. Apr 2005, 10:44
thomas34 Liste nach Daten aus einem Feld sortieren
Keine neuen Beiträge Excel Formeln: Verknüpfungen mit langem Pfad, nicht anzeigen! 2 Nikos 706 29. März 2005, 13:28
Nikos Verknüpfungen mit langem Pfad, nicht anzeigen!
Keine neuen Beiträge Excel Formeln: Datum rot anzeigen 2 Mimoss 2046 15. Feb 2005, 23:07
AnBo Datum rot anzeigen
Keine neuen Beiträge Excel Formeln: Wert nur einmal anzeigen 3 User001 21427 04. Feb 2005, 15:18
rainberg Wert nur einmal anzeigen
Keine neuen Beiträge Excel Formeln: Namen in einer Liste zählen 3 Enjoy82 1646 26. Jan 2005, 12:57
Gast Namen in einer Liste zählen
Keine neuen Beiträge Excel Formeln: zellwert 2-stellig anzeigen - eingabe + rechnen 5-stellig 5 strandexpress 1207 22. Jan 2005, 15:35
Arnim zellwert 2-stellig anzeigen - eingabe + rechnen 5-stellig
Keine neuen Beiträge Excel Formeln: Liste für Verleih erstellen - Verweis auf Kalenderwoche 2 Silbrunke 1924 02. Jan 2005, 22:00
Gast Liste für Verleih erstellen - Verweis auf Kalenderwoche
Keine neuen Beiträge Excel Formeln: Pausenzeiten dynamisch berechnen und anzeigen 8 acki-bm 2213 07. Dez 2004, 18:19
Sanne Pausenzeiten dynamisch berechnen und anzeigen
Keine neuen Beiträge Excel Formeln: Druckdatum anzeigen 0 Stefan L. 1122 23. Nov 2004, 10:02
Stefan L. Druckdatum anzeigen
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Access Tabellen