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

Forumthread: Combobox - Eingabe-Vorschlag - x'te Stelle

Combobox - Eingabe-Vorschlag - x'te Stelle
k
Hallo,
...Frage:
Wie kann man es lösen, dass ich in einer Combobox (gefüllt über eine RowSource-Zuweisung per Code) folgendes erreichen kann:
Inhalt der Combobox z.B. "Autohaus Müller" / "Autohaus Schmidt" / "Autohof Lehmann" / "Auto-Werkstatt Müller" etc.
Nun soll der User in der Userform den Kunden aussuchen aus der Combobox ... derzeit ist es so eingestellt, dass mit dem ersten Buchstaben ein Vorschlag von der Combobox erscheint. Aber - nur wenn der User auch wirklich vorn beginnt, d.h. mit "Autohaus...".
Jetzt ist es aber oftmals der Fall, dass sich auch Kunden sich nicht mit Ihrem vollen Firmen Namen melden, sondern z.B.: "Werkstatt Müller..." ... gibt dies nun der ADM ein, findet er die "Auto-Werkstatt Müller" nicht. Da er eben nicht mit "Auto-" in der Eingabe anfing. (Bei über 2500 Einträgen sucht er nun auch nicht wirklich und legt. ggf. den Kunden erneut an unter "Werkstatt Müller"...und das will ich nicht !!!!
Wie kann ich es also lösen, dass eine Combobox z.B. bei Eingabe "Müller" - sich aufklappt und alle Einträge mit "Müller" an irgendeiner Stelle im Namen anzeigt ?
Geht das überhaupt ?
Gruß und super vielen Dank bereits an dieser Stelle für Eure Unterstützung !
Kay
Anzeige
AW: Rückmeldung zu Lösungsvorschlägen?
27.08.2009 13:13:31
k
Hi Micha,
kam aus kurzfristigen berufl. Gründen - war viel im Außendienst unterwegs die Tage - nicht dazu an dieser Stelle weiterzuarbeiten. Habe es eben bei mir eingesetzt und es klappt hervorragend ... Danke !
Gruß
Kay
Anzeige
AW: Combobox - Eingabe-Vorschlag - x'te Stelle
27.08.2009 17:15:04
Rudi
Hallo,
prinzipiell so:
Private Sub ComboBox1_Change()
ComboBox1.List = fncListe(ComboBox1.Value)
ComboBox1.DropDown
End Sub
Private Sub UserForm_Activate()
ComboBox1.List = fncListe
End Sub
Function fncListe(Optional sText As String)
Dim arrTmp, n As Integer, i As Integer, arrListe()
arrTmp = Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp)) 'Listenbereich
ReDim arrListe(1 To UBound(arrTmp))
For i = 1 To UBound(arrTmp)
If arrTmp(i, 1) Like "*" & sText & "*" Then
n = n + 1
arrListe(n) = arrTmp(i, 1)
End If
Next
ReDim Preserve arrListe(1 To n)
fncListe = arrListe
End Function
Gruß
Rudi
Anzeige
AW: Combobox - Eingabe-Vorschlag - x'te Stelle
27.08.2009 21:27:11
Kay
Hi,
....vielen Dank für Deine "Anregung", denn leider klappt es so erstmal nicht - muss da noch was prüfen. Habe zwar den Listenbereich in der Funktion entsprechend angepasst (da es wechselnde sind, je nach Einstellung) aber ich erhalte eine Fehlermeldung 70 - "Zugriff verweigert" in der Combobox1.Change prozedur.
Sollte ich nicht weiterkommen, stelle ich auch diesen Code hier mit ein ;o)
Werde die Nacht probieren und hoffe in 1-2 Tagen hier wieder ein Feedback geben zu können.
Eine Frage habe ich noch - bei Deinem Code ist es wichtig, die Schreibweise (Groß/Klein) einzuhalten, kann man dies auch noch anpassen - das es "egal" ist ?!
Gruß
Kay
Anzeige
AW: Combobox - Eingabe-Vorschlag - x'te Stelle
27.08.2009 22:35:30
Rudi
Hallo,
aber ich erhalte eine Fehlermeldung 70 - "Zugriff verweigert" in der Combobox1.Change prozedur. 

das Prob hattest du doch schon mal und auch eine Lösung bekommen. Lernt du nichts?
2. If LCase(arrTmp(i, 1)) Like "*" & LCase(sTex)t & "*" Then
Gruß
Rudi
Anzeige
AW: Combobox - Eingabe-Vorschlag - x'te Stelle
28.08.2009 09:47:35
k
Hallo Rudi,
...ja und nein, ja ich lerne dazu und mir war auch die Fehlermeldung 70 (dank Deiner Hilfe vor ca. 2 Wochen) bekannt, wollte es auch mit der "RowSource ="""-Methode lösen. Jedoch habe ich das Problem, das ich 2 verschiedene Datenbereiche einlese - je nach Situation (und Funktionswahl in der Userform, d.h. Standard ist Dabenbereich 1 und bei NEU-Anlegen eines Datensatzes, wechselt die Combobox den Inhalt auf Datenbereich2 - Kundendatensätze). Und sobald ich die RowSource auf "" setzte - funktionierte es nicht mehr richtig - die Datenbereiche wurden nicht sauber ausgelesen, bzw. falsch zugewiesen...darin lag mein Problem...
Wie ich auch schrieb, wollte ich nun versuchen mit dem "gelerntem" hier selbst eine Lösung zu finden, Was ich nun auch fand - siehe Musterdatei.
https://www.herber.de/bbs/user/64089.xls
Einziger Punkt, der mich noch beschäftigte hatte war:
Beispiel: Datenbereich1 - eingabe von "werkstatt" - wird nur Werkstatt Lehmann angezeigt, aber mit einem *vor Werkstatt - erscheint auch "Autowerkstatt Gerd Müller"... Dann kam ich auch hier drauf - MatchEnrty-Eingenschaft der Combobox war noch auf 0 eingestellt. Mit dem Wert 2 - funktioniert es perfekt.
Vielen Dank für Deine Hilfe und Verständnis!
Lieben Gruß
Kay
Anzeige
;

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-Eingabe-Vorschläge in Excel optimieren


Schritt-für-Schritt-Anleitung

Um in einer Excel-Combobox einen Vorschlag bei Eingabe zu implementieren, der auch dann funktioniert, wenn der Benutzer nicht am Anfang des Textes beginnt, kannst du den folgenden VBA-Code verwenden:

  1. Öffne deine Excel-Datei und gehe in die Entwicklertools.
  2. Füge eine Userform hinzu und platziere eine Combobox (z.B. ComboBox1) darauf.
  3. Öffne das VBA-Editor-Fenster (Alt + F11).
  4. Füge den folgenden Code in das Modul der Userform ein:
Private Sub ComboBox1_Change()
    ComboBox1.List = fncListe(ComboBox1.Value)
    ComboBox1.DropDown
End Sub

Private Sub UserForm_Activate()
    ComboBox1.List = fncListe
End Sub

Function fncListe(Optional sText As String)
    Dim arrTmp, n As Integer, i As Integer, arrListe()
    arrTmp = Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp)) 'Listenbereich
    ReDim arrListe(1 To UBound(arrTmp))
    For i = 1 To UBound(arrTmp)
        If arrTmp(i, 1) Like "*" & sText & "*" Then
            n = n + 1
            arrListe(n) = arrTmp(i, 1)
        End If
    Next
    ReDim Preserve arrListe(1 To n)
    fncListe = arrListe
End Function
  1. Stelle sicher, dass die Datenquelle (RowSource) korrekt eingestellt ist, damit die Vorschläge bei Eingabe angezeigt werden.

Häufige Fehler und Lösungen

  • Fehlermeldung 70 - Zugriff verweigert: Diese Fehlermeldung tritt häufig auf, wenn der Zugriff auf die Combobox nicht korrekt eingerichtet ist. Überprüfe, ob die Combobox richtig referenziert wird.

  • Vorschläge nicht angezeigt: Stelle sicher, dass die MatchEntry-Eigenschaft der Combobox auf 2 - fmMatchEntryComplete eingestellt ist. Dies ermöglicht, dass Vorschläge bei Eingabe auch dann angezeigt werden, wenn der Benutzer mitten im Text beginnt.


Alternative Methoden

Wenn du die Combobox nicht über VBA steuern möchtest, kannst du auch Datenvalidierung mit Dropdown-Listen verwenden. Dies hat jedoch Einschränkungen, da es keine dynamische Vorschlagsfunktion bietet.

  1. Wähle die Zelle aus, die die Dropdown-Liste enthalten soll.
  2. Gehe zu Daten > Datenvalidierung.
  3. Setze die Quelle auf den Bereich deiner Namen.

Diese Methode ist einfacher, bietet jedoch keine Vorschläge während der Eingabe.


Praktische Beispiele

Ein Beispiel für eine Anwendungsfälle könnte die Verwaltung von Werkstattnamen sein. Wenn du eine Liste mit Werkstattnamen hast, kannst du mit dem oben genannten VBA-Code sicherstellen, dass die Benutzer mit einfacheren Eingaben (z.B. "Müller") die entsprechenden Vorschläge erhalten.

Beispiel-Daten:

Autohaus Müller
Autohaus Schmidt
Autohof Lehmann
Auto-Werkstatt Müller

Wenn der Benutzer "Müller" eingibt, werden alle Einträge, die "Müller" enthalten, angezeigt.


Tipps für Profis

  • Verwende die LCase-Funktion in der If-Bedingung, um die Eingabe unabhängig von der Groß- und Kleinschreibung zu halten:
If LCase(arrTmp(i, 1)) Like "*" & LCase(sText) & "*" Then
  • Teste die Funktionalität regelmäßig, insbesondere wenn du die Datenquelle änderst.
  • Achte darauf, dass du die Größe der Liste im Auge behältst. Bei sehr großen Datenmengen kann die Performance leiden.

FAQ: Häufige Fragen

1. Wie kann ich die Vorschläge bei Eingabe übernehmen?
Du kannst die Auswahl in der Combobox durch die ComboBox1.ListIndex-Eigenschaft übernehmen, um den ausgewählten Vorschlag zu speichern.

2. Ist es möglich, die Vorschläge in mehreren Sprachen anzuzeigen?
Ja, du kannst die Datenquelle entsprechend anpassen und die Funktion so modifizieren, dass sie mehrsprachige Vorschläge unterstützt.

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