Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

UserForm Adressverwaltung
#1
Hallo Leute, ich versuche mich in VBA

Problemstellung:
1. Nach der Vornamen Suche, sollten dazupassende Nachnamen angezeigt werden... klappt nicht ... wenn ich den passenden Nachname eingebe, dann gehts weiter.
2. Wärs auch möglich, dass ich das selbe auch mit Nachnamen machen kann? (Entweder Vor oder Nachname suchen& anzeigen.
3. Wie kann ich das Autovervollständigen in den Comboboxen verhindern? (Vorname Stefan wird automatisch auf Stefanie ergänzt.)


Hier der Code
Code:
Private Sub speichern_Click()

Dim Zeile As Long

'Schleife und Abfrage zum Prüfen ob Datensatz in Tabellenblatt bereits vorhanden
For Wiederholungen_Eintrag = 2 To Worksheets("Adressverwaltung").Range("A65536").End(xlUp).Row
If Vorname.Text = Worksheets("Adressverwaltung").Cells(Wiederholungen_Eintrag, 1) _
And Nachname.Text = Worksheets("Adressverwaltung").Cells(Wiederholungen_Eintrag, 2) Then

Eintrag_vorhanden = 1
Zeile_Eintrag = Wiederholungen_Eintrag
End If
Next

'Wenn Eintrag bereits vorhanden, die Daten in der entsprechenden Zeile abändern
If Eintrag_vorhanden = 1 Then
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 1) = Vorname
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 2) = Nachname
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 3) = Adresse
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 4) = PLZ
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 5) = Ort
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 6) = Telefon
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 7) = FZ1
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 10) = FZ2
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 13) = FZ3
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 16) = FZ4
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 17) = FZ5
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 21) = FZ6
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 24) = Zahlung
Worksheets("Adressverwaltung").Cells(Zeile_Eintrag, 26) = Email
SendKeys "{TAB}"
SendKeys "{TAB}"

'ansonsten Daten in erste leere Zeile eintragen
Else
Zeile_Blatt_2 = Worksheets("Adressverwaltung").Range("A65536").End(xlUp).Offset(1, 0).Row
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 1) = Vorname
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 2) = Nachname
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 3) = Adresse
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 4) = PLZ
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 5) = Ort
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 6) = Telefon
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 7) = FZ1
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 10) = FZ2
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 13) = FZ3
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 16) = FZ4
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 17) = FZ5
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 21) = FZ6
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 24) = Zahlung
Worksheets("Adressverwaltung").Cells(Zeile_Blatt_2, 26) = Email
SendKeys "{TAB}"
SendKeys "{TAB}"
End If

'Schleife und Abfrage zum erneuten Füllen der ComboBox "Vorname"
For Wiederholungen = 2 To Worksheets("Adressverwaltung").Range("B65536").End(xlUp).Row
If WorksheetFunction.CountIf(Worksheets("Adressverwaltung").Range("A2:A" & Wiederholungen), _
Worksheets("Adressverwaltung").Cells(Wiederholungen, 1)) = 1 Then _
Vorname.AddItem Worksheets("Adressverwaltung").Cells(Wiederholungen, 1)
Next

End Sub

Private Sub Vorname_Change()
Nachname = ""
Adresse = ""
PLZ = ""
Ort = ""
Telefon = ""
Email = ""
FZ1 = ""
FZ2 = ""
FZ3 = ""
FZ4 = ""
FZ5 = ""
FZ6 = ""
Zahlung = ""

'Schleife und If Abfrage zum Finden von passenden Nachnamen zu dem ausgewähleten Vornamen
For Wiederholungen = 2 To Worksheets("Adressverwaltung").Range("A65536").End(xlUp).Row
If Vorname.Text = Worksheets("Adressverwaltung").Cells(Wiederholungen, 1) Then
Nachname.Text = Worksheets("Adressverwaltung").Cells(Wiederholungen, 2)
End If
Next
End Sub

Private Sub UserForm_Initialize()
MsgBox "Bitte zuerst den Vorname und danach den Nachnamen wählen oder schreiben, damit Datensätze angezeigt werden können."
'Schleife zum Füllen der ComboBox "Vorname" ohne Duplikate
For Wiederholungen = 2 To Worksheets("Adressverwaltung").Range("B65536").End(xlUp).Row
If WorksheetFunction.CountIf(Worksheets("Adressverwaltung").Range("A2:A" & Wiederholungen), _
Worksheets("Adressverwaltung").Cells(Wiederholungen, 1)) = 1 Then _
Vorname.AddItem Worksheets("Adressverwaltung").Cells(Wiederholungen, 1)
Next

End Sub

Private Sub Nachname_Change()

'Schleife und If Abfrage zum Füllen der restlichen Textfelder
For Wiederholungen_Nachname = 2 To Worksheets("Adressverwaltung").Range("B65536").End(xlUp).Row

If Vorname.Text = Worksheets("Adressverwaltung").Cells(Wiederholungen_Nachname, 1) _
And Nachname.Text = Worksheets("Adressverwaltung").Cells(Wiederholungen_Nachname, 2) Then

Adresse = Worksheets("Adressverwaltung").Cells(Wiederholungen_Nachname, 3)
PLZ = Worksheets("Adressverwaltung").Cells(Wiederholungen_Nachname, 4)
Ort = Worksheets("Adressverwaltung").Cells(Wiederholungen_Nachname, 5)
Telefon = Worksheets("Adressverwaltung").Cells(Wiederholungen_Nachname, 6)
FZ1 = Worksheets("Adressverwaltung").Cells(Wiederholungen_Nachname, 7)
FZ2 = Worksheets("Adressverwaltung").Cells(Wiederholungen_Nachname, 10)
FZ3 = Worksheets("Adressverwaltung").Cells(Wiederholungen_Nachname, 13)
FZ4 = Worksheets("Adressverwaltung").Cells(Wiederholungen_Nachname, 16)
FZ5 = Worksheets("Adressverwaltung").Cells(Wiederholungen_Nachname, 19)
FZ6 = Worksheets("Adressverwaltung").Cells(Wiederholungen_Nachname, 22)
Email = Worksheets("Adressverwaltung").Cells(Wiederholungen_Nachname, 26)

End If
Next

End Sub

Private Sub aufRechnung_Click()
'Vorname
Worksheets("Rechnung").Range("D5:F5") = Vorname & " " & Nachname
'Adresse
Worksheets("Rechnung").Range("D6:F6") = Adresse
'PLZ
Worksheets("Rechnung").Range("D7:F7") = PLZ.Text & " " & Ort
End Sub


Danke für eure Hilfe, Rückmeldung wird selbstverständlich gegeben, auch wenns mein erster Eintrag hier im Forum ist :P
Top
#2
Hallo,

erwartest du jetzt, dass jemand anhand des Quelltextes deine Datei nachbaut, um auf Fehlersuche zu gehen, oder könntest du dir vorstellen, die Datei (anonymisiert) hier hochzuladen?
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
[-] Folgende(r) 1 Nutzer sagt Danke an Klaus-Dieter für diesen Beitrag:
  • steschnu
Top
#3
Besten Dank für deine Antwort :)

Dachte ihr lest diese Codes wie andere ein Buch ;)

Anbei hab ich nun die Musterdatei angehängt.



.xlsm   Muster.xlsm (Größe: 35,18 KB / Downloads: 15)
Top
#4
Hallo,

habe mir das mal angesehen, kann es in der Realität vorkommen, dass gleiche Vor- und Familiennamen (also in der Kombination) mehrfach in der Liste stehen, oder ist das jetzt nur durch die Spielnamen entstanden?
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#5
Ist durch die Spielnamen entstanden.

Wäre aber ein interessanter Ansatz, aber momentan nicht entscheidend. :)
Top
#6
Ad 1) Ändere in der Prozedur Vorname_Change() die Zeile
Code:
Nachname.Text = Worksheets("Adressverwaltung").Cells(Wiederholungen, 2)
zu
Code:
Nachname.AddItem Worksheets("Adressverwaltung").Cells(Wiederholungen, 2)
Denn sonst wird ja im Schleifendurchlauf das Textfeld Nachname der Reihe nach mit allen zum Vornamen passenden Nachnamen befüllt. Der letzte bleibt dann stehen.

Ad 2) Ja klar. Du musst halt wechselseitig abfragen, welches Feld befüllt ist. Aber die Herangehensweise ist meines Erachtens nicht gut. Die Schleifenlösung ist dafür suboptimal.
Du bildest hier eine Datenbank nach.
a) Dafür ist Access wesentlich besser geeignet. Mach dir Gedanken, dafür Energie zu investieren
b) Datensätze müssen eindeutig sein. Doppelte Namen mögen jetzt noch kein Thema sein. Spätestens wenn es passiert, fängst du wieder von vorne an. Datensätze machst du eindeutig, indem du eine einmalige ID vergibst. Dann kannst du auch 30 Peter Müllers haben. Vergib also eine Spalte ID.
c) Verwende besser Range.Find. Das ist schneller als die Schleifenlösung
Oder du lässt dir die Kunden in einer Listbox anzeigen, welche du mittels Combobox einschränken kannst. Bei Herber hat Luschi dazu ein schönes Beispiel gezeigt:
https://www.herber.de/forum/archiv/1532t...rform.html

Ad 3) Setze die Eigenschaft MatchEntry auf 2.
Schöne Grüße
Berni
[-] Folgende(r) 1 Nutzer sagt Danke an MisterBurns für diesen Beitrag:
  • steschnu
Top
#7
Herzlichen Dank.
Finds toll, dass Ihr euch den Fragen angenommen habt, ist absolut nicht selbstverständlich, dass man sich freiwillig mit all den Problemchen von Laien herumschlägt.

Ich wollte mich schon lange mal mit Excel VBA befassen und darum habe ich mir das Projekt ausgesucht, darum auch Excel.

Das mit der ID werde ich umsetzen.

Das Range.Find kenn ich noch nicht, werde mich aber schlau machen.
Top
#8
Hallo Steschnu,

hast du auch einen "richtigen Namen" mit dem man dich ansprechen kann? Habe dir mal eine Beispieldatei gebastelt, die eine optimierte Suche enthält. Du kannst nach Begriffen suchen, die sich in den Spalten A bis F befinden, (kann erweitert werden). Die Treffer werden im Listenfeld angezeigt, dort nimmst du die Feinauswahl vor. Die Zeile, die dort angeklickt wird, ist die Grundlage für die Befüllung der Objekte. 
Im Quelltext sind noch weitere Optimierungen möglich, das gehe ich heute Abend noch mal ran, jetzt muss ich erst mal was arbeiten.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
[-] Folgende(r) 1 Nutzer sagt Danke an Klaus-Dieter für diesen Beitrag:
  • steschnu
Top
#9
Ich bin der Stefan und komme aus Zentralschweiz :)

Danke dir schon mal, ist natürlich super, wenn du die Quelltexte überarbeitest kann ich sie vergleichen und lerne was dazu.

Die "Listboxlösung" ist durchaus auch ne gute Variante. Hab mich gestern intensiv mit dem Thema beschäftigt, da ich sie für die Weiterführung für das Projekts sehr nützlich ist :)
Top
#10
Hallo Stefan,

anbei die Datei mit den optimierten Quelltexten.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste