PDA

Vollständige Version anzeigen : PLZ und Ort aus ComboBox


Jens
09.07.2014, 06:43
hallo zusammen
ich habe in einer Userform 2 Comboboxen eingebaut
in der Combobox 1 kann eine PLZ eingegeben werden und in der 2. Combobox werden die dazugehörigen Orte zur Auswahl gestellt.Option Explicit

===================================================
' Userform mit:
' ComboBox1: PLZ
' ComboBox2: Ort
' CommandButton1: "In Datenbank aufnehmen"
'
' Tabellenblatt:
' Tabelle1: Spalte A: PLZ, Spalte B: Ort
' ===================================================

Private Sub UserForm_Initialize()
'PLZ in Combobox1
Call FuelleCombo1 'Makro aufrufen
ComboBox1.SetFocus
End Sub


Private Sub ComboBox1_Change() 'Es wurde eine neue PLZ ausgewählt
Dim rngPLZ As Range, strAdr As String
'Inhalt von Combobox2 löschen
Me.ComboBox2.Clear

'PLZ suchen
Set rngPLZ = Worksheets("PLZ_Ort").Columns(1).Find(Me.ComboBox1.Value, , xlValues, xlWhole)
If Not rngPLZ Is Nothing Then
strAdr = rngPLZ.Address 'Ersten Fundort merken
Do
Me.ComboBox2.AddItem rngPLZ.Offset(0, 1).Value 'Ort in Combobox aufnehmen
Set rngPLZ = Worksheets("PLZ_Ort").Columns(1).FindNext(rngPLZ) 'nächste PLZ suchen
Loop While strAdr <> rngPLZ.Address 'Solange bis erster Fundort erneut gefunden wurde
Me.ComboBox2.Value = Me.ComboBox2.List(0, 0)

End If

End Sub

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Der Fokus wurde von Combobox1 weggenommen. (Combobox1 wurde verlassen)

If ComboBox2.ListCount = 0 And ComboBox2.Value = "" Then
MsgBox "Es konnte kein passender Ort zur Postleitzahl ermittelt werden." & vbLf & vbLf & _
"Sie können einen Ort in das Auswahlfeld eingeben" & vbLf & _
"und auf ""In Datenbank aufnehmen"" klicken."
Else:
ComboBox2.SetFocus
ComboBox2.DropDown
End If
End Sub


Private Sub FuelleCombo1()
'Combobox1 neu füllen
'Hier sollte vielleicht ein Code hin, der mehrfaches Aufführen der selben PLZ verhindert.
Me.ComboBox1.RowSource = Worksheets("PLZ_Ort").UsedRange.Columns(1).Address(, , , True)
End Sub


Ich wollte nun eine Möglichkeit haben die das nach Eingabe eines Ortes in der Combobox 2 die dazugehörige PLZ im Combobox 1 steht.
Dazu habe ich den Code versucht abzuändern.
[CODE]' ===================================================
' Userform mit:
' ComboBox1: PLZ
' ComboBox2: Ort
' CommandButton1: "In Datenbank aufnehmen"
'
' Tabellenblatt:
' Tabelle1: Spalte A: PLZ, Spalte B: Ort
' ===================================================

Private Sub UserForm_Initialize()
'PLZ in Combobox1
Call FuelleCombo2 'Makro aufrufen
ComboBox2.SetFocus
End Sub


Private Sub ComboBox2_Change() 'Es wurde eine neue PLZ ausgewählt
Dim rngPLZ As Range, strAdr As String
'Inhalt von Combobox2 löschen
Me.ComboBox1.Clear

'PLZ suchen
Set rngPLZ = Worksheets("PLZ_Ort").Columns(2).Find(Me.ComboBox2.Text, , xlValues, xlWhole)
If Not rngPLZ Is Nothing Then
strAdr = rngPLZ.Address 'Ersten Fundort merken
Do
Me.ComboBox1.AddItem rngPLZ.Offset(0, 2).Value 'Ort in Combobox aufnehmen
Set rngPLZ = Worksheets("PLZ_Ort").Columns(2).FindNext(rngPLZ) 'nächste PLZ suchen
Loop While strAdr <> rngPLZ.Address 'Solange bis erster Fundort erneut gefunden wurde
Me.ComboBox1.Value = Me.ComboBox1.List(0, 0)

End If

End Sub

Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Der Fokus wurde von Combobox1 weggenommen. (Combobox1 wurde verlassen)

If ComboBox1.ListCount = 0 And ComboBox1.Value = "" Then
MsgBox "Es konnte kein passender Ort zur Postleitzahl ermittelt werden." & vbLf & vbLf & _
"Sie können einen Ort in das Auswahlfeld eingeben" & vbLf & _
"und auf ""In Datenbank aufnehmen"" klicken."
Else:
ComboBox1.SetFocus
ComboBox1.DropDown
End If
End Sub


Private Sub FuelleCombo2()
'Combobox1 neu füllen
'Hier sollte vielleicht ein Code hin, der mehrfaches Aufführen der selben PLZ verhindert.
Me.ComboBox2.RowSource = Worksheets("PLZ_Ort").UsedRange.Columns(2).Address(, , , True)
End Sub

wer kann mir helfen den Code für die Combobox umzubauen.

Jens
09.07.2014, 11:30
Hat keiner eine Idee ?

Hajo_Zi
09.07.2014, 11:33
meine Meinung dazu.
Der Dateiname sollte was mit dem Problem zu tun haben.
Ich habe mir z.B. einen Ordner angelegt in dem ich alle Dateien aus dem Internet speichere. Bei Dateinamen wie Test..., Mappe…, Beispiel… wird eine vorhandene überschrieben.
Schaue hier, Dateiname im Beitrag (http://www.ms-office-forum.net/forum/showthread.php?t=58538&highlight=Beitrags-Nr#3)
das ist nun das Word -Forum, das gilt hier aber auch.

<img src="http://Hajo-Excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/index.htm"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

Jens
09.07.2014, 11:44
Hallo Hajo
ich habe die Datei umbenannt sodas der Name auch was mit dem Problem zu Tun hat.
Vieleicht kannst du mir einen Tip geben wie ich den Code anpassen kann um eine Suche auch über die Combobox2 als der Ortsname ausführen kann.
Die Combobox1 für die PLZ funktioniert super.

Jens

Hajo_Zi
09.07.2014, 12:10
ich habe es jetzt so interpretiert das Du den Ort eingeben möchtest und es soll die Postleitzahl angezeigt werden.
Das Change musste ich für meinen Code ausschalten, da falsch.
Option Explicit

Private Sub ComboBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If ComboBox2 <> "" Then
ComboBox1.Tag = "1"
' erstellt von HajoZiplies@web.de 09.07.14
Dim RaFound As Range
Dim Loletzte As Long
With ThisWorkbook.Worksheets("PLZ_Ort")
Loletzte = IIf(IsEmpty(.Cells(.Rows.Count, 2)), .Cells(.Rows.Count, 2).End(xlUp).Row, .Rows.Count)
' Teilweise
'Set RaFound = .Columns(2).Find(ComboBox2, , xlValues, xlPart, , xlNext)
' kompletter Vergleich und Inhalt
Set RaFound = .Columns(2).Find(ComboBox2, , xlValues, xlWhole, , xlNext)
If Not RaFound Is Nothing Then
ComboBox1 = RaFound.Offset(0, -1)
Else
MsgBox "Ort nicht gefunden"
End If
Set RaFound = Nothing
End With
End If
ComboBox1.Tag = ""
End Sub

' ===================================================
' Userform mit:
' ComboBox1: PLZ
' ComboBox2: Ort
' CommandButton1: "In Datenbank aufnehmen"
'
' Tabellenblatt:
' Tabelle1: Spalte A: PLZ, Spalte B: Ort
' ===================================================

Private Sub UserForm_Initialize()
'PLZ in Combobox1
Call FuelleCombo1 'Makro aufrufen
ComboBox1.SetFocus
End Sub


Private Sub ComboBox1_Change() 'Es wurde eine neue PLZ ausgewählt
If ComboBox1.Tag <> "" Then Exit Sub


<a href="http://Hajo-Excel.de/index.htm" target="_blank" title="Hajo's Excelseiten">Gruß Hajo</a>

Jens
09.07.2014, 12:56
Hallo Hajo
vielen Dank für deine Hilfe
ich habe den Code in der Userform so eingebaut. Nach der Eingabe in der Combobox2 und Enter erhalte ich nur einen Eintrag in der Combobox1.
Bei der Eingebe von Dresden oder Leipzig müsste duch mehrere Einträge in der Combobox1 erscheinen.

Jens

Hajo_Zi
09.07.2014, 13:01
ich habe mich an diese Aussage gehalten.
die dazugehörige PLZ im Combobox 1
das ist bei mir eine.
Bei der neuen Aufgabe musst Du mit FindNext arbeiten. Benutze die Suche des Forums.
Ich erstelle die Lösung für das was im Beitrag dargestellt wurde. Wird diese Darstellung geändert, überlasse ich anderen die Lösung, da ich schon eine Lösung erstellt hatte und dafür Zeit investiert habe. Ich arbeite nicht für den Papierkorb.

<a href="http://Hajo-Excel.de/index.htm" target="_blank" title="Hajo's Excelseiten">Gruß Hajo</a>

haklesoft
09.07.2014, 14:39
Hallo Jens,

ich geh mal davon aus, dass Deine PLZ/Orts-Tabelle in ihrer endgültigen Fassung den Gesamtbestand aller PLZ+Orte beinhalten wird.

Die ganze Sucherei und fast allen Code könntest Du Dir sparen, wenn Du in der ersten Combobox alle PLZ (inkl. der Doubletten) und in der zweiten Combobox alle Ortsnamen in der gleichen Reihenfolge einmalig aufnimmst.

Im Code musst Du dann nur noch den Listindex der Combobox, die gerade nicht den Focus hat mit dem anderen ListIndex synchronisieren und hast so immer den zur PLZ passenden Ortsnamen und umgekehrt.