Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Combobox durchsuchen

Combobox durchsuchen
23.06.2014 19:09:22
Keiler
Hallo zusammen,
suche jetzt schon seit Tagen nach einer Lösung für mein Problem:
Ich habe eine Userform mit einer Combobox die ich aus einer Tabelle beim Inizialisieren fülle. Jetzt möcht ich das während ich etwas in die Combobox schreibe danach gefiltert wird. Es funktioniert wenn ich mit den Anfangsbuchstaben beginne.
Wenn ich jedoch etwas aus der mitte eingebe funktionierts nicht mehr.
Bsp: in der combobox stehen folgende Daten:
2010012 Werkzeug
6501651 Auto
Beschaffung 2104550
wenn ich jetzt nach "2010012 Werkzeug" suchen will und "wer.." eingebe kommt nichts.
wenn ich "2010..." eingebe funktionierts.
Wie kann ich das mit VBA bewerkstelligen?
Vielen Dank schon mal im vorraus
Keiler

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Combobox durchsuchen
23.06.2014 21:43:10
Nepumuk
Hallo,
ein Beispiel zum weiterbasteln:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private ldtmComboTimer As Date

Public Sub StartComboTimer()
    
    Static slnOldength As Long
    
    If slnOldength <> Len(UserForm1.SearchText) Then
        slnOldength = Len(UserForm1.SearchText)
    Else
        UserForm1.SearchText = vbNullString
        slnOldength = 0
    End If
    
    ldtmComboTimer = Now + TimeSerial(0, 0, 1)
    Application.OnTime ldtmComboTimer, "StartComboTimer"
    
End Sub

Public Sub StopComboTimer()
    Application.OnTime ldtmComboTimer, "StartComboTimer", , False
End Sub

' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private mstrSearchText As String

Private Sub ComboBox1_Enter()
    SearchText = vbNullString
    Call StartComboTimer
End Sub

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Call StopComboTimer
End Sub

Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Dim lngIndex As Long
    SearchText = SearchText & LCase$(Chr$(KeyAscii))
    KeyAscii = 0
    With ComboBox1
        .ListIndex = -1
        For lngIndex = 0 To .ListCount - 1
            If LCase$(.List(lngIndex)) Like "*" & SearchText & "*" Then
                .ListIndex = lngIndex
                Exit For
            End If
        Next
    End With
End Sub

Private Sub UserForm_Activate()
    With Tabelle1
        ComboBox1.List = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value
    End With
End Sub

Public Property Get SearchText() As String
    SearchText = mstrSearchText
End Property

Public Property Let SearchText(ByVal pvstrSearchText As String)
    mstrSearchText = pvstrSearchText
End Property

Gruß
Nepumuk

Anzeige
AW: Combobox durchsuchen
24.06.2014 00:59:28
Werner
Hallo,
hier eine Lösung allerdings mit einer Listbox und nicht mit einer Combobox (den Code habe ich auch hier aus dem Forum).
Option Explicit
Dim sSuchbegriff As String
Dim iSpalte As Integer
Private Sub Abbruch_Click()
Unload Me
End Sub

Private Sub Anzeigen_Click()
Application.ScreenUpdating = False
Call UserForm_Activate
Application.ScreenUpdating = True
End Sub

Private Sub list_Filter()
Application.ScreenUpdating = False
Dim iIndex As Integer
If sSuchbegriff = "" Then Call UserForm_Activate
For iIndex = Stückliste.ListCount - 1 To 0 Step -1
If Not CBool(InStr(LCase(Stückliste.List(iIndex, iSpalte - 1)), LCase(sSuchbegriff))) Then Stü _
ckliste.RemoveItem iIndex
Next iIndex
Select Case iSpalte
Case 1: TextBox1.Value = ""
End Select
If Stückliste.ListCount = 0 Then
MsgBox "Zum eingegebenen Filter-Begriff """ & sSuchbegriff & """ wurde kein Eintrag gefunden.",  _
_
48, "  Hinweis für " & Application.UserName
End If
Application.ScreenUpdating = True
End Sub

Private Sub Suchen_Click()
Application.ScreenUpdating = False
If Stückliste.ListCount  "" Then
sSuchbegriff = Trim$(TextBox1.Value)
iSpalte = 1
End If
Call list_Filter
Application.ScreenUpdating = True
End Sub

Private Sub UserForm_Activate()
Dim X As Long
Dim i As Integer
Dim sText As String
Application.ScreenUpdating = False
Worksheets("Daten").Activate
TextBox1.SetFocus
Me.Stückliste.Clear
X = Range("D" & Rows.Count).End(xlUp).Row 'Spalte an deine Bedürfnisse anpassen
For i = 5 To X 'hier Zeile 5 ggf. an deine Bedürfnisse anpassen
With Worksheets("Daten")
sText = .Cells(i, 4).Value 'hier Spalte D (4) ggf. an deine Bedürfnisse anpassen
End With
Me.Stückliste.AddItem
Stückliste.List(Stückliste.ListCount - 1, 0) = Cells(i, 4) 'hier Spalte D (4) ggf. an deine Bedü _
rfnisse anpassen
Next i
Application.ScreenUpdating = True
End Sub
Du brauchst eine Userform, darauf eine Textbox (Name: TextBox1) zur eingabe des Suchbegriffs, einen Command Button für Suchen (Name: Suchen), einen Command Button für wieder alles anzeigen (Name: Anzeigen) und eine Listbox mit einer Spalte (Name: Stückliste).
Solltest du eine kleine Test-Tabelle benötigen dann melde dich. Derzeit kann ich sie nicht hochladen das könnte ich erst am Mittwoch.
Gruß Werner

Anzeige
AW: Combobox durchsuchen
24.06.2014 19:10:26
Keiler
Hallo ,
@Werner, danke für die ausführliche Antwort. Ich wollte kein zusätzliches Textfeld in meiner Userform haben. Habe mich deshalb für den Code von @Nepumuk entschieden. Nachdem ich ihn angepasst habe funktioniert er super.
Danke Keiler

AW: Combobox durchsuchen
24.06.2014 19:15:36
Keiler
Hallo,
@Werner.. erstmal anke für die Ausführliche Antwort. Da ich jedoch kein neues Textfeld in meiner userform wollte habe ich mich für die Variante von @Nepumuk entschieden. nach der anpassung läuft es super.
Danke
Keiler

Anzeige
AW: Combobox durchsuchen
24.06.2014 19:18:12
Keiler
Oh mist, jetzt hab ichs 2 mal reingeschrieben
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Combobox effektiv durchsuchen in Excel


Schritt-für-Schritt-Anleitung

Um eine Combobox in einer Userform so zu konfigurieren, dass sie auch mittlere Teile eines Textes durchsuchen kann, folge diesen Schritten:

  1. Userform erstellen: Erstelle eine Userform mit einer Combobox und füge den Namen der Combobox hinzu, z.B. ComboBox1.

  2. VBA-Code hinzufügen: Öffne den VBA-Editor (Alt + F11) und füge den folgenden Code in das Modul deiner Userform ein:

    Option Explicit
    
    Private mstrSearchText As String
    
    Private Sub ComboBox1_Enter()
        SearchText = vbNullString
        Call StartComboTimer
    End Sub
    
    Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        Call StopComboTimer
    End Sub
    
    Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        Dim lngIndex As Long
        SearchText = SearchText & LCase$(Chr$(KeyAscii))
        KeyAscii = 0
        With ComboBox1
            .ListIndex = -1
            For lngIndex = 0 To .ListCount - 1
                If LCase$(.List(lngIndex)) Like "*" & SearchText & "*" Then
                    .ListIndex = lngIndex
                    Exit For
                End If
            Next lngIndex
        End With
    End Sub
    
    Public Property Get SearchText() As String
        SearchText = mstrSearchText
    End Property
    
    Public Property Let SearchText(ByVal pvstrSearchText As String)
        mstrSearchText = pvstrSearchText
    End Property
    
    Private Sub UserForm_Activate()
        With Tabelle1
            ComboBox1.List = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value
        End With
    End Sub
  3. Userform aktivieren: Stelle sicher, dass die Userform beim Starten der Excel-Datei aktiviert wird.

  4. Testen: Starte die Userform und teste die Suchfunktionalität in der Combobox.


Häufige Fehler und Lösungen

  • Fehler: Nichts wird angezeigt
    Lösung: Überprüfe den Code auf Tippfehler und stelle sicher, dass die Daten in der Combobox korrekt geladen werden.

  • Fehler: Nur Anfangsbuchstaben funktionieren
    Lösung: Stelle sicher, dass die Like-Bedingung im Code korrekt implementiert ist, um auch Mittelteile zu berücksichtigen.


Alternative Methoden

Falls Du keine Combobox verwenden möchtest, kannst Du auch eine Listbox nutzen, um die Suchfunktion zu implementieren. Der Code für die Listbox könnte ähnlich aussehen wie dieser:

Private Sub list_Filter()
    Dim iIndex As Integer
    If sSuchbegriff = "" Then Call UserForm_Activate
    For iIndex = Stückliste.ListCount - 1 To 0 Step -1
        If Not CBool(InStr(LCase(Stückliste.List(iIndex, iSpalte - 1)), LCase(sSuchbegriff))) Then
            Stückliste.RemoveItem iIndex
        End If
    Next iIndex
End Sub

Praktische Beispiele

Wenn Deine Combobox mit den folgenden Werten gefüllt ist:

  • 2010012 Werkzeug
  • 6501651 Auto
  • Beschaffung 2104550

Und Du nach „wer..“ suchst, sollte die Combobox „2010012 Werkzeug“ als Ergebnis anzeigen, wenn die oben genannten Schritte korrekt durchgeführt wurden.


Tipps für Profis

  • Verwende Application.ScreenUpdating = False: Dies verbessert die Leistung, wenn Du viele Elemente in der Listbox oder Combobox bearbeitest.
  • Implementiere eine Verzögerung: Überlege, eine kleine Verzögerung beim Eingeben von Text hinzuzufügen, um die Suche zu optimieren, z.B. mithilfe von Application.OnTime.

FAQ: Häufige Fragen

1. Kann ich die Suchfunktion auch für andere Steuerelemente verwenden?
Ja, die Logik kann auch auf andere Steuerelemente wie Textfelder oder Listen angewendet werden, indem Du die entsprechenden Ereignisse anpasst.

2. Welche Excel-Version benötige ich?
Diese Anleitung funktioniert in Excel 2010 und späteren Versionen, solange Du die VBA-Funktionalität nutzen kannst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige