Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
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
COMBOBOX FÜLLEN (VBA - Unique)
15.02.2023 12:35:50
Frank
Moin,
ich basteln an einer Möglichkeit eine ComboBox über eine Textbox (Volltext suche) zu füllen.
Die ComboBox bekomme ich auch gefüllt, allerdings, falls vorhanden mit teilweise doppelten Werte.
Habe schon viel Experimentiert, doch leider zerschiesse ich mir immer wieder alles
Ich denke das sollte eigentlich über die Funktion "WorksheetFunction.Unique" zu machen sein.
Ich habe allerdings keinen Plan wo ich diese in dem Code einbauen kann.
Anbei noch den Code und eine Beispielmappe
https://www.herber.de/bbs/user/157848.xlsm
Public Sub EintragSuchenNeu(Blatt As Worksheet, StartZeile As Integer, StartSpalte As Integer, SuchWort As MSForms.TextBox, Treffer As MSForms.ComboBox)
'
'    '------------------------------------------------------
'    'Nach Einträgen suchen
'    '------------------------------------------------------
'
    Blatt.Activate
    Treffer.Clear
    Dim i As Integer
    Dim Zelleneintrag As String
    Dim Eingabe As String
     i = StartZeile
       Eingabe = StrConv(SuchWort, vbUpperCase)
       Zelleneintrag = StrConv(Cells(i, StartSpalte).Value, vbUpperCase)
    Do While Cells(i, StartSpalte).Value > ""
     If InStr(Zelleneintrag, Eingabe) > 0 Then
         Treffer.AddItem Cells(i, StartSpalte).Value
       Else
     End If
            i = i + 1
            Zelleneintrag = StrConv(Cells(i, StartSpalte).Value, vbUpperCase)
    Loop
     If Treffer.ListCount > 0 Then
        Treffer.ListIndex = 0
     End If
End Sub

Für Hilfe wäre ich dankbar.
LG Frank

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: COMBOBOX FÜLLEN (VBA - Unique)
15.02.2023 12:46:32
Rudi
Hallo,
teste mal:
Public Sub EintragSuchenNeu(Blatt As Worksheet, StartZeile As Integer, StartSpalte As Integer, _
                            SuchWort As MSForms.TextBox, Treffer As MSForms.ComboBox)
'
'    '------------------------------------------------------
'    'Nach Einträgen suchen
'    '------------------------------------------------------
'
    Dim i As Integer
    Dim Zelleneintrag As String
    Dim Eingabe As String
    Dim objTreffer As Object
    
    Blatt.Activate
    Treffer.Clear
    Set objTreffer = CreateObject("scripting.dictionary")
    
    i = StartZeile
       Eingabe = StrConv(SuchWort, vbUpperCase)
       Zelleneintrag = StrConv(Cells(i, StartSpalte).Value, vbUpperCase)
    Do While Cells(i, StartSpalte).Value > ""
     If InStr(Zelleneintrag, Eingabe) > 0 Then
         objTreffer(Cells(i, StartSpalte).Value) = 0
     End If
            i = i + 1
            Zelleneintrag = StrConv(Cells(i, StartSpalte).Value, vbUpperCase)
    Loop
    
    If objTreffer.Count Then
      Treffer.List = objTreffer.keys
      Treffer.ListIndex = 0
     End If
     
End Sub
Gruß
Rudi
Anzeige
AW: COMBOBOX FÜLLEN (VBA - Unique)
15.02.2023 13:29:07
Frank
Hallo Rudi,
habe ich getestet und scheint einwandfrei zu laufen.
Bin halt nur ein Hobby Excel Spezi ;-)
Vielen Dank
AW: COMBOBOX FÜLLEN (VBA - Unique)
15.02.2023 12:51:03
Daniel
Hi
probies doch einfach mal so:
anstatt
Treffer.AddItem Cells(i, StartSpalte).Value
das hier, um zu prüfen ob der Wert schon vorhanden ist.
for t = 0 to Treffer.ListCount - 1
    if Treffer.List(t) = Cells(i, Startspalte).Value then Exit for
next
if t = Treffer.Listcount then Treffer.AddItem  Cells(i, StartSpalte).value
oder du entfernst die Duplikate nach dem Einfügen, also nach der Schleife (nach dem Loop)
Treffer.List = Worksheetfunction.Unique(Treffer.List)
wobei ich das jetzt nicht getestet habe, da ich nur Excel 2016 habe.
Gruß Daniel
Anzeige
AW: COMBOBOX FÜLLEN (VBA - Unique)
15.02.2023 13:31:42
Frank
Hallo Daniel,
vielen Dank für Deine schnelle Antwort.
Ich laufe hier allerdings immer noch in einige Fehler....
Ich habe den Code von Rudi ausprobiert und der funktioniert.
Trotzdem vielen Dank für Deine Mühe
LG Frank
AW: COMBOBOX FÜLLEN (VBA - Unique)
15.02.2023 13:43:16
Daniel
hast du den Code von Rudi auch verstanden?
AW: COMBOBOX FÜLLEN (VBA - Unique)
15.02.2023 15:28:44
Frank
Hallo Daniel,
erstmal zu Deiner Frage : Ja und Nein :-)
Ich beschäftige mich intensiv mit VBA eigentlich erst seit Covid19 und helfe mir über die Runden mit der Copy/Paste Variante und etliche Stunden "Googeln".
Vom Prinzip ist ja alles eh nur Logik und Mathematik in der VBA Programmiersprache. (Welches mir leider fehlt)
Ich habe mir bereits einen Kunden an Land gezogen für einen GuV Statistik Auswertung, aber wie gesagt alles auf meinem "Wissensstand")
Aber es macht mir sehr viel Spaß und ich sehe welche Möglichkeiten man überhaupt hier hat, und habe bereits weitere Anfragen .
Eine große Hilfe hierbei ist dieses Forum und Helfer/Spezis. wie Du.(Daumen hoch!).
Mir fehlt einfach das gesamte Grundwissen, Bedeutung der Befehle,...usw.
Ich bin auch bereit, daß ganze von der Pike auf zu erlernen und denke an ein VBA Kurs bei der SGD. Dauert ca. 15 Monate, kann man aber auch abkürzen. Der ist aber halt sehr teuer.
Vielleicht kannst Du mir ja auch Alternativen (Außer nur Stundenlang (teilweise) nutzlose YouTube Videos zu schauen) vorschlagen.
Würde mich sehr freuen
Leute wie Du helfen ungemein Leuten wie mir, und ich hoffe ich kann das eines Tages hier im Forum zurückgeben
Ansonsten nochmals vielen Dank für Deinen Vorschlag
LG Frank
Anzeige
AW: COMBOBOX FÜLLEN (VBA - Unique)
15.02.2023 15:54:28
Daniel
also ich hatte nur 3 Tage Einführung in VBA durch einen Kurs in unserer Firma und den Rest dann Löring by Doing und viel aktiven Mitarbeit in den Foren
naja, so ein paar allgemeine Programmiergrundlagen (Schleifen, Variablen, IF-THEN) aus Schule und Studium
AW: COMBOBOX FÜLLEN (VBA - Unique)
15.02.2023 16:03:26
Frank
... genau wie ich. Üben, probieren und spielen, aber wie gesagt Grundkenntnisse und -begriffe.
Das fehlt vorne und hinten. Siehe Rudi's Code ("objTreffer.keys"). Höre ich zum ersten mal.
Aber , man lernt dazu, und man wird wahrscheinlich nicht an einem Crach-/Intensivkurs und/oder Studium vorbeikommen.
Und das in meinem Alter...
Anzeige
AW: COMBOBOX FÜLLEN (VBA - Unique)
15.02.2023 16:15:55
Daniel
da nutzt er ein spezielles Objekt, ein sogenanntes Dictionary.
das ist im Prinzip ein eindimensionales Array mit einem Freitext als Index.
da so ein Index nur einmal angelegt wird und falls vorhanden, einfach verwendet wird, kann man sowas nutzen um duplikatfreie Listen zu erstellen.
Wenn du programmieren lernen willst, solltest du es aber erstmal hinbekommen, per Schleife zu überprüfen, ob der Wert schon in der Listbox drin ist oder nicht, das sind einfach die Basics und bei den Datenmengen, die man normalerweise in einer Listbox verarbeitet, auch problemlos handelbar.
Gruß Daniel
Anzeige
AW: COMBOBOX FÜLLEN (VBA - Unique)
17.02.2023 09:40:55
Frank
Hallo Daniel,
Danke für Deinen Hinweis.
Das mit den Schleifen, steht bei mir auch auf der ToDo Liste..
Da es mir momentan aber leider ein bissel an Zeit fehlt werde ich für mein aktuelles Projekt noch die CopyPaste Variante benutzen und mich danach intensiv darum kümmern.
LG Frank
noch einer zum üben ;-)
15.02.2023 16:33:01
Rudi
Public Sub EintragSuchenNeu(Blatt As Worksheet, StartZeile As Integer, StartSpalte As Integer, _
  SuchWort As MSForms.TextBox, Treffer As MSForms.ComboBox)
  '
  '    '------------------------------------------------------
  '    'Nach Einträgen suchen
  '    '------------------------------------------------------
  '
  Dim i As Integer
  Dim Zelleneintrag As String
  Dim Eingabe As String
  Dim strCBX As String
  
  Blatt.Activate
  Treffer.Clear
  Set objTreffer = CreateObject("scripting.dictionary")
  
  i = StartZeile
  Eingabe = StrConv(SuchWort, vbUpperCase)
  Zelleneintrag = StrConv(Cells(i, StartSpalte).Value, vbUpperCase)
  
  Do While Cells(i, StartSpalte).Value > ""
    If InStr(Zelleneintrag, Eingabe) > 0 Then
      If InStr(strCBX, "#" & Cells(i, StartSpalte)) = 0 Then
        strCBX = strCBX & "#" & Cells(i, StartSpalte)
      End If
    End If
    i = i + 1
    Zelleneintrag = StrConv(Cells(i, StartSpalte).Value, vbUpperCase)
  Loop
  
  If Len(strCBX) Then
    Treffer.List = Split(strCBX, "#")
    Treffer.ListIndex = 0
  End If
  
End Sub

Anzeige
Ich mache mit!
15.02.2023 21:41:39
Yal
Inhalt der Textbox wird als String übergeben. Es wird eine Array zurückgegeben, die als Treffer.List assigniert werden soll:
Public Function EintragSuchen(Blatt As Worksheet, StartZeile As Integer, StartSpalte As Integer, SuchWort As String)
'------------------------------------------------------
'Nach Einträgen suchen
'------------------------------------------------------
Dim Dic
Dim Elt
  
    Set Dic = CreateObject("scripting.dictionary")
' Wenn nur eine Spalte, aus einem zwei-dimensional Array einen ein-dimensional machen
    For Each Elt In Application.Transpose(Intersect(Cells(StartZeile, StartSpalte).CurrentRegion, Columns(StartSpalte)).Value)
        If InStr(1, Elt, SuchWort, vbTextCompare) Then Dic(LCase(Elt)) = Elt
    Next
    EintragSuchen = Dic.Items
End Function
Sub Test()
    Treffer.List = EintragSuchen(Worksheets("Tabelle1"), 1, 1, "Jan") 'Die Testeinträge haben "Jan 2022" bis "Dez 2023" (doppelt),  liegen aber als Text vor (wichtig)!
End Sub
VG
Yal
Anzeige
Äääh...
15.02.2023 21:44:38
Yal
Elt ist Variant und könnte bei der Assign zu Treffer.List stören, daher Type-Casting zu String:
 If InStr(1, Elt, SuchWort, vbTextCompare) Then Dic(LCase(Elt)) = CStr(Elt)
VG
Yal
AW: Ich mache mit!
17.02.2023 09:30:22
Frank
Hallo yal,
auch DIr vielen Dank für Deine Unterstützung.
AUch das werde ich noch später ausprobieren und mich dazu melden.
Dankeschön
LG Frank
AW: noch einer zum üben ;-)
17.02.2023 09:28:02
Frank
Hallo Rudi,
vielen Dank. Ich war gestern nicht online und kann mich erst jetzt nochmal bedanken.
Werde ich später mal ausprobieren :-)
Danke
LG
Rudi
AW: COMBOBOX FÜLLEN (VBA - Unique)
16.02.2023 06:02:58
RPP63
Moin!
Um zur eigentlichen Frage zurück zu kommen:
Die Unique-Liste per Worksheetfunction zu erzeugen, ist ja kein Problem.
Du möchtest die Uniqueliste hingegen filtern.
FILTER() kennt leider keine Wildcards wie den Asterisk *
Deshalb muss man sich hier behelfen.
Nur als Teaser, wie man dies mit Excel 365 lösen kann.
Dies lässt sich natürlich auch mittels VBA abbilden, hier jedoch die Tabelle mit Formeln:
 ABCDE
1KUNDE001KUNDE001un2KUNDE001
2KUNDE002KUNDE002 2KUNDE002
3KUNDE002RINDE004 #WERT!HUNDE016
4RINDE004RINDE005 #WERT!HUNDE018
5RINDE005RINDE006 #WERT!HUNDE019
6RINDE006RINDE007 #WERT!HUNDE020
7RINDE007RINDE009 #WERT!HUNDE021
8RINDE007RINDE010 #WERT!HUNDE022
9RINDE009RINDE011 #WERT!HUNDE023
10RINDE010RINDE012 #WERT!LUNTE024
11RINDE011RINDE013 #WERT!LUNTE025
12RINDE012RINDE014 #WERT!LUNTE026
13RINDE013RINDE015 #WERT!LUNTE027
14RINDE014HUNDE016 2LUNTE028
15RINDE015HUNDE018 2LUNTE029
16HUNDE016HUNDE019 2LUNTE030
17HUNDE016HUNDE020 2 

ZelleFormel
B1=EINDEUTIG(A1:A30)
D1=SUCHEN(C1;B1#)
E1=FILTER(B1#;WENNFEHLER(SUCHEN(C1;B1#);0))

Gruß Ralf
Anzeige
AW: COMBOBOX FÜLLEN (VBA - Unique)
17.02.2023 09:33:33
Frank
Hallo Ralf,
danke Dir für Deine Unterstützung.
Ich werde mich allerdings an die VBA Variante halten.
Trotzdem nochmals Danke
LG Frank

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige