Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
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
Inhaltsverzeichnis

Suchfunktion via Userform bei mehreren Treffern

Suchfunktion via Userform bei mehreren Treffern
04.03.2024 01:42:46
AlexHed
Hallo Excel Gemeinde,

ich habe mir mithilfe der Google Suche u. ä. eine Suchfunktion per Userform zusammen gebastelt.
Nachdem ich kurz stolz auf meine Leistung war, musste ich feststellen, dass die Suchfunktion eine entscheidene Schwachstelle aufweist.
Gesucht wird nach dem Familiennamen. Wird ein Suchergebniss gefunden, zeigt er in den Textboxen die zum Suchbegriff zugehörigen Ergebnisse korrekt an.
Natürlich kann es vorkommen, dass ein Nachname nicht einzigartig ist. Und da liegt jetzt das Problem.
Die Combobox, in der die Suchergebnisse angezeigt werden, zeigen mir auch alle Einträge an gleichen Nachnamen an.
Aber die Textboxen werden mit den zugehörigen Informationen beziehen sich immer nur auf den ersten Eintrag in der Combobox.
Wähle ich einen anderen Nachnamen, werden die Textboxen nicht aktualisiert. Ich bin schon relativ weit mit der Datei und hoffe, dass ich nicht wieder alles ändern muss.
Die Datei könnte ich natürlich hochladen, wenn es gewünscht ist.
Zudem habe ich zwei Punkte noch nicht ganz hinbekommen. Die zugehörige E-Mail Adresse bekomme ich einfach nicht auf zwei Textboxen aufgesplittet, warum auch immer.
Und die zum Mitglied zugehörige IBAN möchte ich gern entsprechend der Anzahl der "Böcke" (6) aufteilen auf eben secht Textboxen in der Userform "Suche".
Ich hoffe jemand hat eine Idee und kann mir helfen.

Viele Grüße
Alex

34
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 06:53:51
RPP63
Moin!
Es liegt am fehlerhaften Code.

Gruß Ralf
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 07:02:54
RPP63
Die IBAN würde ich nicht auf 6 Textboxes aufteilen, sondern sie mit Leerstellen anzeigen (für Deutschland so):
IBAN = Format(IBAN, "@@@@ @@@@ @@@@ @@@@ @@@@ @@")
nicht nur für Deutschland
04.03.2024 09:57:33
Yal
da der "i" in IBAN für international steht, gilt deinen Format für alle IBAN international. Nicht nur DE ;-)

Danke fürs Teilen. Dieses einfache Leerzeichen-streuen mit Format hatte ich nicht auf dem Radar.

VG
Yal
AW: nicht nur für Deutschland
04.03.2024 12:10:05
RPP63
Belgien hat 16 Stellen
Jordanien 30
Deutschland 22
Und jetzt Du ;-)
AW: nicht nur für Deutschland
04.03.2024 12:35:28
AlexHed
Halllo,

Okay.
Danke für die Info.

Gruß Alex
Anzeige
Erwischt!
04.03.2024 13:39:57
Yal
Verdammt, zu schnell "gelabert" :-(
https://de.iban.com/struktur

Mindestens funktioniert es für IBAN mit 22 und mehr Stellen. Die letzten werden zusammen dargestellt
Bei kurzeren werden Leerzeichen vorangestellt, die man mit einem Trim abfangen kann:
Trim(Format("BE71096123456769", "@@@@ @@@@ @@@@ @@@@ @@@@ @@"))


Somit könnte man eine "internationale" Version mit 32 Stellen vorbereiten:
Trim(Format(IBAN, "@@@@ @@@@ @@@@ @@@@ @@@@ @@@@ @@@@ @@@@"))


(wieder gut gemacht? :-)

VG
Yal
Anzeige
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 07:09:52
ralf_b
soso mit Ki. Dann sollte man nicht von seiner, sondern von deren Leistung sprechen. Du könntest der Ki sagen was nicht funktioniert und eine Anpassung verlangen.
Meist kommt es nur auf die Fagen an. Beziehe in deiner Fragestellung die Combobox und das Click- oder Change-Event mit ein.
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 09:16:49
Alwin Weisangler
Hallo Alex,

wenn doppelte Vorkommen (Familiennamen) in einer Tabellenspalte ausgewertet werden sollen, musst du die Combobox mehrspaltig anlegen und die Zeilennummer der Tabelle mitgeben um diesen Eintrag Treffsicher zu finden.

Mit .Find, Application.Match bzw. Suchschleife geht die Suche über den Familiennamen bei Mehrfachvorkommen schief.

Da du keine Datei hochgeladen hast, habe ich mal schnell was auf Basis eines Listobjects (Str./T Tabelle, intelligente Tabelle) gebastelt.

Sollte dies nicht weiterhelfen, lade deine Datei anonymisiert mit ein paar wenigen Datensätzen hoch.
https://www.herber.de/bbs/user/167499.xlsm

Gruß Uwe
Anzeige
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 11:13:23
AlexHed
Hallo Uwe,

ich würde meine Datei mal hochladen.
Das habe ich zwar eben schon einmal gemacht.
Aber das wird mir irgendwie nicht angezeigt, dass ich was hochgeladen habe.

Gruß Alex
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 11:34:33
Alwin Weisangler
Beispieldatei hochladen mit Rechtsklick starten --> „Durchsuchen…“ klicken --> Dateifenster "Alle Dateien auswählen" belassen und Datei auswählen --> Link kopieren --> in deinen Text einfügen.

Gruß Uwe
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 13:25:28
Alwin Weisangler
Hallo,
anbei mal ein erster Schritt.
Baue nach diesem Prinzip weiter. Das Array "arrBoxen" habe ich bis zur "TextBoxWohnort" bereits vorbereitet.
https://www.herber.de/bbs/user/167515.xlsm

Gruß Uwe
Anzeige
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 14:14:34
AlexHed
Hallo Uwe,

ich bin gerade auf der Arbeit und konnte es schon mal testen.
Es läuft ja super. Vielen Vielen Dank dafür.
Das mit den ArrBoxen habe ich verstanden und baue sie weiter.
Nur weiß ich noch nicht ganz, wie ich das bei den beiden Textboxen E-Mail und der IBAN Geschichte machen soll.
Hast du da noch eine Idee?

Gruß Alex
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 16:44:59
Alwin Weisangler
Hallo,

Da nur ein Teil sich in Schleife füllen lässt, habe ich mal das Array entsprechend angepasst.
Ich sehe zwar den Sinn des Zerlegens der Mail- Adresse und der Iban in einzelne Textboxen nicht, aber das geht zum einem mit Split und zum anderen mit Left bzw. Mid zu lösen.
Änderungen speichern bzw. Datensatz löschen funktioniert in deinem Fall mit der Mitgliedsnummer als eindeutig identifizierbarer Wert mit der Methode .Find.
Beispiel gibt es im Netz in Massen.
https://www.herber.de/bbs/user/167535.xlsm

Gruß Uwe
Anzeige
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 17:18:45
AlexHed
Hallo Uwe,

danke für deine Hilfe. Ohne dich würde ich echt nicht mehr weiter kommen.
Ja mit der IBAN und der E-Mail, da muss ich dir Recht geben.
Ich mache diese Mitgliederverwaltung für einen Kumpel und dachte mir bei der Aufteilung dieser Eingaben, dass es weniger fehleranfällig ist.
Deshalb nur diese Aufteilung.
Ich versuche jetzt mal mit deiner Datei weiter zu machen.

Viele Grüße
Alex
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 18:26:13
AlexHed
Hallo Uwe,

wie bekomme ich die OptionButtons in Abhängigkeit der entsprechenden Wert in der Liste aktiviert?

Gruß Alex
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 20:31:00
Alwin Weisangler
Hallo,

du musst im arrTab die noch fehlenden Spalten der Tabelle mit übernehmen:


arrTab = Application.Index(arrTab, Evaluate("row(1:" & UBound(arrTab, 1) & ")"), Array(1, 2, 3, 4, 5, 6, 13, 8, 9, 10, 15, 12, 11))


Um die Einträge in diesen Spalten auszuwerten und die Optionbuttons passend zu stellen dann so:


Private Sub BoxenLaden()
Dim i&, tmp, iZeile&: iZeile = ComboBoxTreffer.ListIndex
For i = 0 To UBound(arrBoxen)
Controls(arrBoxen(i)) = arrList(iZeile + 1, i + 1)
Next i
tmp = Split(arrList(iZeile + 1, 8), "@")
TextBoxEMail1 = tmp(0)
TextBoxEMail2 = tmp(1)
TextBoxMitgliedsnummer1 = Format(arrList(iZeile + 1, 10), "000")
TextBoxIBAN1 = Left(arrList(iZeile + 1, 9), 4)
TextBoxIBAN2 = Mid(arrList(iZeile + 1, 9), 5, 4)
TextBoxIBAN3 = Mid(arrList(iZeile + 1, 9), 9, 4)
TextBoxIBAN4 = Mid(arrList(iZeile + 1, 9), 13, 4)
TextBoxIBAN5 = Mid(arrList(iZeile + 1, 9), 17, 4)
TextBoxIBAN6 = Mid(arrList(iZeile + 1, 9), 21, 4)
' ****** ab hier Optionbuttons zuweisen
If arrList(iZeile + 1, 11) = "M" Then
OB_Maennlich = True
Else
OB_Weiblich = True
End If
If arrList(iZeile + 1, 12) = "aktiv" Then
OB_Aktiv = True
Else
OB_Passiv = True
End If

If arrList(iZeile + 1, 13) = "HV" Then
OB_HV = True
Else
OB_Garde = True
End If
End Sub

Den Rest schaffst du selbst.
Mit dem was du dir vorgenommen hast, bist du noch überfordert. Code aus dem Netz sollte man mehr als Idee zur Umsetzung betrachten.
Das was du eingebaut hattest war eine Sackgasse.
Anbei die Datei mit einer elementaren Fehlerbehandlung.
https://www.herber.de/bbs/user/167542.xlsm

Gruß Uwe
Anzeige
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 20:47:56
AlexHed
Hallo Uwe.

Danke für den Tip.
Das mit den Optionsbutton hatte ich eigentlich genau so eingetragen.
Allerdings hatte ich "Me.OB_......" verwendet. Und da habe ich immer einen Fehler bekommen.
Wahrscheinlich hast du Recht, dass ich mir mit meinen Kenntnissen zu viel vorgenommen habe.
Ich werde mal schauen, wie weit ich komme.
Jetzt bekomme ich nur die Fehlermeldung "Index außerhalb des gültigen Bereichs" wenn ich eine Buchstabenkombination eingebe, die nicht in der Spalte A vorhanden ist.
Aber vielleicht kann ich das ja mit einer IF Schleife abfangen.

Gruß Alex
Anzeige
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 21:08:35
Alwin Weisangler
da hatte ich den Fehler an falscher Stelle aufgefangen - ändere die beiden Prozeduren so:


Private Sub ComboboxLaden()
Dim i&, j&, k&
If TextBoxSuchbegriff = "" Then
ComboBoxTreffer.Clear
ContolsReset
Exit Sub
End If
For i = 1 To UBound(arrTab)
If InStr(1, arrTab(i, 1), TextBoxSuchbegriff, vbTextCompare) > 0 Then k = k + 1
Next i
If k = 0 Then
ComboBoxTreffer.Clear
Exit Sub
End If
ReDim arrList(1 To k, 1 To UBound(arrTab, 2))
k = 0
For i = 1 To UBound(arrTab)
If InStr(1, arrTab(i, 1), TextBoxSuchbegriff, vbTextCompare) > 0 Then
k = k + 1
For j = 1 To UBound(arrList, 2)
arrList(k, j) = arrTab(i, j)
Next j
End If
Next i
ComboBoxTreffer.List = arrList
End Sub


und


Private Sub BoxenLaden()
Dim i&, tmp, iZeile&: iZeile = ComboBoxTreffer.ListIndex
If ComboBoxTreffer.ListIndex = -1 Then
ContolsReset
Exit Sub
End If
For i = 0 To UBound(arrBoxen)
Controls(arrBoxen(i)) = arrList(iZeile + 1, i + 1)
Next i
If arrList(iZeile + 1, 8) > "" Then
tmp = Split(arrList(iZeile + 1, 8), "@")
TextBoxEMail1 = tmp(0)
TextBoxEMail2 = tmp(1)
End If
TextBoxMitgliedsnummer1 = Format(arrList(iZeile + 1, 10), "000")
TextBoxIBAN1 = Left(arrList(iZeile + 1, 9), 4)
TextBoxIBAN2 = Mid(arrList(iZeile + 1, 9), 5, 4)
TextBoxIBAN3 = Mid(arrList(iZeile + 1, 9), 9, 4)
TextBoxIBAN4 = Mid(arrList(iZeile + 1, 9), 13, 4)
TextBoxIBAN5 = Mid(arrList(iZeile + 1, 9), 17, 4)
TextBoxIBAN6 = Mid(arrList(iZeile + 1, 9), 21, 4)
' ****** ab hier Optionbuttons zuweisen
If arrList(iZeile + 1, 11) = "M" Then
OB_Maennlich = True
Else
OB_Weiblich = True
End If
If arrList(iZeile + 1, 12) = "aktiv" Then
OB_Aktiv = True
Else
OB_Passiv = True
End If

If arrList(iZeile + 1, 13) = "HV" Then
OB_HV = True
Else
OB_Garde = True
End If
End Sub

Auf die Schnelle ist mir erst mal nichts weiter aufgefallen, was Fehler verursachen kann. Nur so viel noch dazu:
Wenn möglich - vermeide On Error. Es gibt fast immer besseren Weg zur Fehlerbehandlung.
https://www.herber.de/bbs/user/167543.xlsm

Gruß Uwe

Anzeige
AW: Suchfunktion via Userform bei mehreren Treffern
04.03.2024 21:13:05
AlexHed
Hallo Uwe,

ich werde es mir auf die Fahne schreiben. Kein "On Error"
Besten Dank.
Ich schaue mal wie weit ich so komme.

Gruß Alex
AW: Suchfunktion via Userform bei mehreren Treffern
06.03.2024 16:29:52
AlexHed
Hallo Uwe,

eines habe ich noch. Mir ist aufgefallen, dass sich beim Klick auf den Button Ändern und Löschen nichts passiert.
Code ist aber bei den Buttons hinterlegt.

Gruß Alex
AW: Suchfunktion via Userform bei mehreren Treffern
06.03.2024 17:38:54
ralf_b
da passiert was ,aber nur auf dem Blatt und nicht in der UF. Die Daten werden aus den Tabellen in Arrays geladen und diese dann als Basis für die Userform benutzt.
Beim Ändern und Löschen müssten die Arrays neu eingelesen werden damit z.b. bei nach einem Dropdown die neuen Werte erscheinen.
Anzeige
AW: Suchfunktion via Userform bei mehreren Treffern
06.03.2024 18:06:43
AlexHed
Mmh. Okay.
Aber wenn ich einen Eintrag in der Userform ändere und auf speichern klicke, dann ändert sich im Tabellenblatt aber nichts :-(

Gruß Alex
AW: Suchfunktion via Userform bei mehreren Treffern
06.03.2024 19:57:42
ralf_b
Ich sehe das anders. Man beachte das "a"
Userbild
AW: Suchfunktion via Userform bei mehreren Treffern
06.03.2024 20:51:30
AlexHed
Das verstehe ich nicht.
Ich probiere es gleich mal zu Hause.
Bin noch arbeiten.
Hier klappt es wirklich nicht.
Es ändert sich einfach nichts.
AW: Suchfunktion via Userform bei mehreren Treffern
06.03.2024 21:02:11
ralf_b
ich habs mit 167543.xlsm ausprobiert
AW: Suchfunktion via Userform bei mehreren Treffern
06.03.2024 21:58:59
AlexHed
Mmh. Das ist seltsam.
In der Datei 167543.xlsm funktioniert es.
Ich habe mir den Code 1 zu 1 in meine Datei kopiert, die ich letztendlich nutze.
Und da funktioniert er nicht.
Wie kommt das denn?
Ich bekomme auch keine Fehlermeldung.
AW: Suchfunktion via Userform bei mehreren Treffern
08.03.2024 08:05:48
ralf_b
Vielleicht ist in deiner Originaltabelle der Codename der betreffenden Tabelle nicht "Tabelle1".
Aber woher soll man das von außen wissen?
Setze Haltepunkte auf den Beginn der Sub und gehe dann Schritt für Schritt weiter. Schau dir jeweils die Inhale von Variablen an.
AW: Suchfunktion via Userform bei mehreren Treffern
08.03.2024 19:07:20
AlexHed
Hallo,

ich konnte den Fehler ausfindig machen.
Eine Textbox war falsch zugewiesen.
Allerdings komme ich noch bei einem Punkt nicht so ganz weiter.
Wenn sich bei einer der drei OptionButtons etwas ändert, dann werden die Änderungen nicht ins Tabellenblatt übernommen.
Also Geschlecht ändert sich ja eigentlich nicht aber wer weiß das heutzutage schon :-)

Hast du da eine Idee?
AW: Suchfunktion via Userform bei mehreren Treffern
08.03.2024 21:37:02
ralf_b
is nicht dein Ernst. In dem Code zum eintragen der Werte wird das Array arrBoxen benutzt um die Controls auszulesen.
ich sehe da nichts von optionbuttons.
img src="https://www.herber.de/bbs/user/167883.png" border="0" width="350" height="167" alt="Userbild">
AW: Suchfunktion via Userform bei mehreren Treffern
08.03.2024 22:49:09
AlexHed
Mmh. Ich weiß jetzt nicht was du meinst.
Ich meine die UserForm zum ändern der Daten.
Da wird ja der "Status" "aktiv", "passiv" usw. anhand der Daten aus dem Tabellenblatt ausgelesen.
Wenn ich die dann jetzt nachträglich ändern möchte.
Das sind doch OptionButtons oder nicht?
AW: Suchfunktion via Userform bei mehreren Treffern
08.03.2024 23:09:42
Alwin Weisangler
Hallo Alex,

anbei mal der Zustand, soweit ich Lust hatte es zu bauen.
Dein Eingabeformular solltest du nochmals in Ruhe überarbeiten.
Die Variablen sind meist As Variant - kann man machen. Besser ist es jede Variable klar zu deklarieren.
Integer als Deklaration ist inzwischen sinnfrei, da VBA intern dieser als Long umgeleitet und weiterverarbeitet wird.
Packe die Namen der Controls in ein Array. Dazu ein weiteres Array mit den Spaltennummern und übergebe die Werte in einer Schleife ins Tabellenblatt.
usw.
https://www.herber.de/bbs/user/167885.xlsm

Gruß Uwe
AW: Suchfunktion via Userform bei mehreren Treffern
09.03.2024 16:49:29
AlexHed
Hallo Uwe,

danke für deine Mühen.
Ich werde die Deklarationen mal überarbeiten.
Und bei den Arrays, da werde ich mich mal weiter einlesen und das nach und nach testen und mich probieren.

Gruß Alex
AW: Suchfunktion via Userform bei mehreren Treffern
09.03.2024 12:17:35
ralf_b
du kannst ja mal deine Version von CB_AenderungenSpeichern_Click() mit der von Alwin's aktueller Datei vergleichen.
Dir wird sicher auffallen was ich gemeint hatte. Und wenn nicht, dann Prost Mahlzeit.

Alt


Private Sub CB_AenderungenSpeichern_Click()
Dim rngZeile As Range, Nr&, i&
Nr = CDbl(TextBoxMitgliedsnummer1)
With Tabelle1
Set rngZeile = .Columns(10).Find(Nr, LookAt:=xlWhole)
If Not rngZeile Is Nothing Then
For i = 0 To UBound(arrBoxen)
.Cells(rngZeile.Row, i + 1) = Controls(arrBoxen(i))
Next i
End If
End With
End Sub


Neu
Private Sub CB_AenderungenSpeichern_Click()

Dim rngZeile As Range, Nr&, i&, varFilter$, iIndex: iIndex = ComboBoxTreffer.ListIndex
Nr = CDbl(TextBoxMitgliedsnummer1)
With Tabelle1
Set rngZeile = .Columns(10).Find(Nr, LookAt:=xlWhole)
If Not rngZeile Is Nothing Then
For i = 0 To UBound(arrBoxen) - 1
.Cells(rngZeile.Row, i + 1) = Controls(arrBoxen(i))
Next i
.Cells(rngZeile.Row, 8) = TextBoxEMail1 & "@" & TextBoxEMail2
.Cells(rngZeile.Row, 9) = TextBoxIBAN1 & TextBoxIBAN2 & TextBoxIBAN3 & TextBoxIBAN4 & TextBoxIBAN5 & TextBoxIBAN6
.Cells(rngZeile.Row, 13) = Controls(arrBoxen(6))

If OB_HV = True Then .Cells(rngZeile.Row, 11) = "HV"
If OB_Garde = True Then .Cells(rngZeile.Row, 11) = "Garde"

If OB_Aktiv = True Then .Cells(rngZeile.Row, 12) = "aktiv"
If OB_Passiv = True Then .Cells(rngZeile.Row, 12) = "passiv"

If OB_Maennlich = True Then .Cells(rngZeile.Row, 15) = "M"
If OB_Weiblich = True Then .Cells(rngZeile.Row, 15) = "W"

End If
End With

varFilter = TextBoxSuchbegriff
ListeLaden
ControlsReset
TextBoxSuchbegriff = varFilter
ComboBoxTreffer.ListIndex = iIndex
End Sub

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige