Microsoft Excel

Herbers Excel/VBA-Archiv

Werte in Combobox filtern

Betrifft: Werte in Combobox filtern von: Frank
Geschrieben am: 11.08.2008 13:57:55

Hallo!

Ich habe in einer Tabelle mehrere unterschiedlich aktuelle Datensätze. In Spalte E habe ich das Datum des Eintrages gespeichert. Per Combobox kann ich Datensätze suchen und in eine Datenmaske zur Bearbeitung oder andere Formulare kopieren. In meiner jetzigen Combobox erhalte ich alphabetisch sortiert die Namen und Vorname der Kunden aus Spalte C und D sowie dahinter das Datum des Eintrages aus Spalte E angezeigt.
Bei einigen Kunden kommen aufgrund häufiger Änderungen einige Einträge zustande. Die alten Datensätze dürfen nicht verworfen werden. Ich benötige ich sie allerdings selten. Nun möchte ich, dass in der Combobox nur noch einmal der jeweilige Name des Kunden angezeigt und automatisch der aktuellste Datensatz ausgewählt wird.
Ist dies möglich und wenn ja - kann mir jemand einen Tipp geben wie ich das hinbekommen?

Gruß Frank

  

Betrifft: AW: Werte in Combobox filtern von: ChrisL
Geschrieben am: 11.08.2008 16:23:39

Hallo Frank

Geschenk für dich anbei.

Ist ein klein wenig gemurkst, aber funktioniert. U.a. erfolgt die Auswahl (Change-Ereignis) mittels For...Next Schleife. Vermutlich wäre es ein besserer Ansatz die Zeile in einer versteckten ComboBox Spalte zu speichern, um eine Suche zu verhindern... naja, wird bei einer sehr grossen Datenmenge relevant (Performance). Meine nur, es gibt noch Verbesserungspotential.

Ausserdem solltest du beachten, die Datumsspalte absteigend zu sortieren. Die Tatsache dass du erwähnst, dass deine Liste schon alphabetisch ist, bedeutet für mich, dass die Daten vorgängig sortiert werden (idealerweise Code integriert). Somit sollte es einfach sein, die Spalte E ebenfalls zu sortieren.

Gruss
Chris


Option Explicit

Private Sub ComboBox1_Change()
Dim iZeile As Long, LetzteZeile As Long
LetzteZeile = Range("E65536").End(xlUp).Row

For iZeile = 2 To LetzteZeile
    If Cells(iZeile, 3) = ComboBox1.List(ComboBox1.ListIndex, 0) And Cells(iZeile, 4) =  _
ComboBox1.List(ComboBox1.ListIndex, 1) Then
        
        Rows(iZeile).Select 'anpassen
        
        Exit For
    End If
Next iZeile
End Sub



Private Sub UserForm_Initialize()
Dim iZeile As Long, LetzteZeile As Long
Dim iAr As Long, iiAr As Long
Dim bStart As Boolean
ReDim hilfsArray(0) As Variant

hilfsArray(0) = "Start"
LetzteZeile = Range("E65536").End(xlUp).Row
bStart = True

For iZeile = 2 To LetzteZeile

    If arCheck(iZeile, hilfsArray) = True Then
            
        If bStart Then
            ReDim datenArray(2, 0) As Variant
            bStart = False
        Else
            iAr = iAr + 1
            ReDim Preserve datenArray(2, iAr) As Variant
        End If
        
        datenArray(0, iAr) = Cells(iZeile, 3)
        datenArray(1, iAr) = Cells(iZeile, 4)
        datenArray(2, iAr) = Cells(iZeile, 5)

        iiAr = iiAr + 1
        ReDim Preserve hilfsArray(iiAr)
        hilfsArray(iiAr) = Cells(iZeile, 3) & Cells(iZeile, 4)
        
    End If

Next iZeile

ComboBox1.ColumnCount = 3
ComboBox1.List = WorksheetFunction.Transpose(datenArray)
End Sub



Private Function arCheck(iZeile As Long, ar As Variant) As Boolean
Dim x As Long
On Error Resume Next
x = Application.Match(Cells(iZeile, 3) & Cells(iZeile, 4), ar, 0)
If Err.Number Then arCheck = True
End Function




 

Beiträge aus den Excel-Beispielen zum Thema "Werte in Combobox filtern"