Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1316to1320
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

Suchergebnis durch Doppelklick öffnen

Suchergebnis durch Doppelklick öffnen
21.06.2013 21:56:23
Mario
Hallo,
ich versuche eine Kundendatenbank in Excell komplett über die Userform laufen zu lassen. In meinem Suchformular kann ich nach Kundennummer, oder Name suchen. Das Ergebnis wird mir in einer Listbox ausgegeben. Durch doppelklicken des gewünschten Kunden, soll sich eine neue Userform öffnen und dort werden dann alle Daten des Kunden in Textboxen ausgegeben.
Die Suche und Ausgabe in der Listenbox klappt wunderbar, nur wenn ich versuche durch Dppelklick auf den Kunden die Daten in die neue Usreform zu übergeben, dann scheitert es bei mir. Ich erhalte immer den gleichen Kunden.
Wie schaffe ich es, dass ich den gesuchten Kunden auch übergeben bekomme?
Vielen Dank für die Hilfe.

Suche und Ausgabe:
Private Sub cmdSuche_Click()
Dim wks    As Worksheet
Dim rZelle  As Range
Dim firstmatch
Set wks = ThisWorkbook.Worksheets("Kundenliste")
' befindet sich ein Suchbegriff in einer der beiden Textfelder, wenn ja, ist auch nur ein Feld  _
ausgefüllt
If txtACSuche.Value  "" Xor txtNameSuche.Value  "" Then
' Wenn ein Wert in Name, suche in Spalte 4
If txtNameSuche.Value  "" Then
With wks.Columns(4)
'Suche beginnt
Set rZelle = .find _
(What:=txtNameSuche.Value, _
LookAt:=xlPart, _
LookIn:=xlValues)
'wenn ein Ergebnis vorliegt, speichere die Adresse des ersten Fundes und füge in  _
der Listbox die Zeilendaten ein
If Not rZelle Is Nothing Then
firstmatch = rZelle.Address
Do
ListSuche.AddItem
ListSuche.List(ListSuche.ListCount - 1, 0) = wks.Cells(rZelle.row, 2).Value
ListSuche.List(ListSuche.ListCount - 1, 1) = wks.Cells(rZelle.row, 4).Value
ListSuche.List(ListSuche.ListCount - 1, 2) = wks.Cells(rZelle.row, 5).Value
ListSuche.List(ListSuche.ListCount - 1, 3) = wks.Cells(rZelle.row, 10).Value
' Suche fortsetzen
Set rZelle = .FindNext(rZelle)
' mache dies solange ein Ergebnis gefunden wurde und Ergebnis nicht das erste  _
gefundene ist
Loop While Not rZelle Is Nothing And firstmatch  rZelle.Address
Else
MsgBox "Der Name """ & txtNameSuche.Value & _
"""  existiert nicht."
End If
End With
Else
' Wenn ein Wert in AC, suche in Spalte 2
With wks.Columns(2)
'Suche beginnt nach exaktem Wert
Set rZelle = .find _
(What:=txtACSuche.Value, _
LookAt:=xlWhole, _
LookIn:=xlValues, _
SearchOrder:=xlByColumns)
' wenn Wert gefunden, in Listbox eintragen
If Not rZelle Is Nothing Then
ListSuche.AddItem wks.Cells(rZelle.row, 2).Value
ListSuche.List(ListSuche.ListCount - 1, 1) = wks.Cells(rZelle.row, 4).Value
ListSuche.List(ListSuche.ListCount - 1, 2) = wks.Cells(rZelle.row, 5).Value
ListSuche.List(ListSuche.ListCount - 1, 3) = wks.Cells(rZelle.row, 10).Value
Else
MsgBox "Die Kundennummer  """ & txtACSuche.Value & _
"""  existiert nicht."
End If
End With
End If
Else
MsgBox "Bitte geben Sie (nur) einen Suchbegriff ein."
End If
End Sub

Private Sub ListSuche_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim x
' +2, da meine Tabelle in Zeile 2 anfängt - hier haperst es aber auch, da ich nicht die  _
richtige Zeile erhalte
x = ListSuche.ListIndex + 2
With frmKundendatei
.txtEingangsdatum_datei = Worksheets("Kundenliste").Cells(x, 1)
.txtKundennummer_datei = Worksheets("Kundenliste").Cells(x, 2)
.txtAuftragsnummer_datei = Worksheets("Kundenliste").Cells(x, 3)
.txtName_datei = Worksheets("Kundenliste").Cells(x, 4)
.txtVorname_datei = Worksheets("Kundenliste").Cells(x, 5)
.txtStrasse_datei = Worksheets("Kundenliste").Cells(x, 6)
.txtPLZ_datei = Worksheets("Kundenliste)").Cells(x, 7)
.txtOrt_datei = Worksheets("Kundenliste").Cells(x, 8)
.txtWiedervorlage_datei = Worksheets("Kundenliste").Cells(x, 9)
.txtStatus_datei = Worksheets("Kundenliste").Cells(x, 10)
.txtUser_datei = Worksheets("Kundenliste").Cells(x, 11)
.txtSachverhalt_datei = Worksheets("Kundenliste)").Cells(x, 12)
.txtTelefon_datei = Worksheets("Kundenliste").Cells(x, 13)
.txtMobil_datei = Worksheets("Kundenliste").Cells(x, 14)
.txtEMail_datei = Worksheets("Kundenliste").Cells(x, 15)
End With
frmKundendatei.Show
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Suchergebnis durch Doppelklick öffnen
22.06.2013 06:59:09
Oberschlumpf
Hi Mario
a) besser wäre es vielleicht, an Stelle von nur Code die Datei zu zeigen. Oder wenigstens eine Bsp-Datei mit Bsp-Daten.
So sehen wir nur den Code, der dir Probleme verursacht, aber nicht den Rest, wo man vielleicht den Grund für das Problem finden kann.
b) du schreibst:
' +2, da meine Tabelle in Zeile 2 anfängt - hier haperst es aber auch, da ich nicht die _
richtige Zeile erhalte

Hast du schon mal im VBE im Einzelschrittmodus (mit F8) dir anzeigen lassen, welchen Wert denn ListSuche.ListIndex im Moment des Auslösens hat?
Denn eigentlich ist ListSuche.ListIndex + 2 ja richtig, denn...
Erster Eintrag in Liste doppelklick = ListIndex = 0
0 + 2 = 2, also Tabellenstart = Zeile 2 (so, wie du es haben willst)
Wenn es also da schon hapert, dann stimmt schon der Rückgabewert von ListSuche.ListIndex nicht.
Hilfts?
Ciao
Thorsten

Anzeige
AW: Suchergebnis durch Doppelklick öffnen
22.06.2013 12:42:27
Mario
Hallo Thorsten,
ich habe mal die Datei angehangen.
Leider hat mir der Einzelschrittmodus nicht geholfen. Es wird immer der gleiche Kunde übergeben. Der zweite Kunde aus dem Sheet. Egal nach welchen Namen ich dort suche.
Wenn ich mehrere Kunden anlege und Frank Mustermann der erste angelegte Kunde ist, erhalte ich zwar innerhalb der Userform "Suchen" den richtigen Namen, aber bei der Übergabe auf das Kundenblatt kommt immer Frank Mustermann.
Hat die Listbox keinen Zeilenindex den ich übergeben kann und das Kundendatenblatt mitgeteilt bekommt, Listboxindex x = tabellenzeile y?
https://www.herber.de/bbs/user/85952.xlsm

Anzeige
VBA-UserForm Suchergebnis durch Doppelklick öffnen
22.06.2013 12:46:06
Mario
Ups, das Kontrollkästchen vergessen

AW: Suchergebnis durch Doppelklick öffnen
22.06.2013 15:22:26
Oberschlumpf
Hi Mario
So, zuerst muss ich mal "Dampf" ablassen (obwohl du nach meiner Meinung mit dem Zeigen einer Bsp-Datei -jetzt- alles richtig gemacht hast)
Sobald ich die Bsp-Datei, bzw Inhalt + Code sah, sah ich auch sofort die Lösung!
Sorry, aber es macht selten Sinn, bei einer Frage NUR den Teil eines Codes zu zeigen, da niemand weiß, wie der Rest des Codes aussieht, bzw wie der Restcode in Beziehung zum gezeigten "Problemcode" steht.
Deswegen werde ich nun auch nie wieder auf eine Frage antworten, bei der nicht eine Bsp-Datei gezeigt wird, in der das Problem nachvollziehbar ist.
So, nun zu meiner Lösung.
Wenn du z Bsp nach der Kundennr (AC) 36589999 suchst, handelt es sich in der Kundenliste um den letzten Eintrag (Zeile 7), in diesem Fall Elfi Meier.
Da die AC 36589999 aber nur einmal vergeben sein kann, erscheint in der Listbox natürlich auch nur ein Eintrag - und der List-Index ist IMMER 0.
Somit würde bei AC-Suche + Verwendung von x = ListSuche.ListIndex + 2 IMMER nur 2 rauskommen, egal, in welcher Zeile in der Kundenliste sich der gesuchte Kunde wirklich befindet.
Ein ähnliches Problem tritt auf, wenn du nach dem Kundennamen suchst.
Angenommen, du suchst nach "Schmidt".
In diesem Fall werden alle Treffer gelistet, die im Nachnamen "Schmidt" enthalten.
In der Bsp-Datei sind das also "Schmidt Anna", "Schmidt Bernd" und "Schmidt-Meyer Hannelore".
Würdest du nun in der Listbox auf den letzten, gefundenen Eintrag "Schmidt-Meyer Hannelore" doppelt klicken, wäre der ListIndex = 2 (1. Eintrag = Index = 0, 2. Eintrag = Index = 1, 3. Eintrag = Index = 2)
Somit wäre
x = ListSuche.ListIndex + 2
x = 2 + 2
x = 4
Und es würden aus der Kundenliste die Einträge aus Zeile 4 übergeben werden, obwohl ja eigtl die Einträge aus Zeile 6 gesucht werden.
Hast du bis hierhin alles verstanden?
Nein? Dann fang von vorn an zu lesen!
Nein, Scherz :-)
Aber lies ruhig alles so oft durch, bis du es verstanden hast.
Lösung des Problems:
Egal, ob du nach Namen oder AC-Nummer suchst, du musst per Code immer die vollständige Kundenliste durchsuchen, bis du den richtigen Treffer und somit die richtige Zeile gefunden hast.
aus x = ListSuche.ListIndex + 2 hab ich gemacht
x = fcRowSearch(ListSuche.List(frmSuche.ListSuche.ListIndex, 1), ListSuche.List(frmSuche.ListSuche.ListIndex, 0))
Bei fcRowSearch handelt es sich um eine Funktion, die ich deinem Code im Modul Suche hinzugefügt habe.
Im Code findest du Erklärungen zu der Funktion.
Hier meine Datei:
https://www.herber.de/bbs/user/85959.xlsm
Hilfts?
Ciao
Thorsten

Anzeige
AW: Suchergebnis durch Doppelklick öffnen
23.06.2013 00:58:28
Mario
Hey, das ist genial. Und ja, ich habe es verstanden.
Vielen Dank, diese Suche vereinfacht mir auch die Übergabe in die Listbox.
Ich kann Dir gar nicht genug danken. :)
Und ich habe gelernt, imemr die Datei mitsenden ;)

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige