Clever-Excel-Forum

Normale Version: Userform Listbox Suche PLZ / Ort
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Community,

eine weitere Sache bei der ich nicht weiterkomme.
Ich nutze schon seit langem das Script von Hajo welches mir zu einem gesuchten Ort die PLZ in einer Userform anzeigt. Nun gibt es nichts komfortableres als die PLZ und den Ort aus dieser Listbox direkt in die aktive Zeile zu schreiben. Da diese Listbox 2 Columns hat, weiß ich leider nur wie ich den Ort ausgeben kann, die PLZ bekomme ich nicht übermittelt. Könnte sich das jemand anschauen?

Besten Dank im Voraus und viele Grüße
Steve

[attachment=35990]
Guten Morgen, ich noch einmal :)

Eventuell noch eine kurze Anmerkung. Das Script von Hajo füllt nach einem Change in der Textbox die ListBox mit:

' Ort eintragen
Lst_Postleitzahlen.AddItem .Cells(LoI, 1)
' Postleitzahl eintragen
Lst_Postleitzahlen.List(LoZeile, 1) = .Cells(LoI, 2)



Den Ort bekomme ich mit 

Private Sub Lst_Postleitzahlen_Click()
ActiveCell.Value = Lst_Postleitzahlen.Value
End Sub


Jetzt benötige ich nur noch den Value der sich daneben befindet. Das ist wohl in der .Cells(LoI, 2) versteckt.
Kann ich den Inhalt aus .Cell(LoI, 2) irgendwie zwischenspeichern um diesen unter Private Sub Lst_Postleitzahlen_Click() verwenden zu können?
Hallo Steve,
Private Sub Eintragen_Click()
With Lst_Postleitzahlen
ActiveCell.Value = .List(.ListIndex, 1) & " " & .List(.ListIndex, 0)
End With
End Sub
Gruß Uwe
Hi

Du könntest mal die Code Alternative versuchen.

In das Blattmodul von "Eingabe"
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 2 Then
   frm_Suche.Show
   Cancel = True
End If
End Sub

In das Blattmodul der UserForm.
Code:
Option Explicit
Dim Werte As Variant


Private Sub UserForm_Activate()
Werte = Sheets("plzdaten").Range("A1").CurrentRegion
End Sub

Private Sub Eintragen_Click()
If Lst_Postleitzahlen.ListIndex < 0 Then
   MsgBox "Es ist kein Wert in der Liste Markiert."
Else
   ActiveCell.Value = Lst_Postleitzahlen.List(Lst_Postleitzahlen.ListIndex, 0)
   ActiveCell.Offset(, 1).Value = Lst_Postleitzahlen.List(Lst_Postleitzahlen.ListIndex, 1)
   Unload Me
End If
End Sub

Private Sub Txt_Ort_Change()
Dim w As Variant
Lst_Postleitzahlen.Clear
If Txt_Ort <> "" Then
   For w = 2 To UBound(Werte, 1)
     If InStr(1, Werte(w, 1), Txt_Ort.Text, vbTextCompare) = 1 Then
        Lst_Postleitzahlen.AddItem "a"
        Lst_Postleitzahlen.List(Lst_Postleitzahlen.ListCount - 1, 0) = Werte(w, 1)
        Lst_Postleitzahlen.List(Lst_Postleitzahlen.ListCount - 1, 1) = Werte(w, 2)
     End If
   Next w
End If
End Sub

Und die ColumnCount-Eigenschaft der Listbox auf 2 stellen.

Gruß Elex
Und verbessere:

Statt
Code:
Private Sub UserForm_Initialize()
Dim strAdr As String
    With Worksheets("plzdaten")
        ' letzte belegte Zeile unabhängig von Excelversion für Spalte A (1)
        LoLetzte = IIf(IsEmpty(Worksheets("plzDaten").Cells(.Rows.Count, 1)), _
            Worksheets("plzDaten").Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
        ' Adressbereich der Listbox zuweisen
        strAdr = "plzDaten!" & "A2:b" & LoLetzte
        Lst_Postleitzahlen.RowSource = strAdr
        Lst_Postleitzahlen.ColumnCount = 2          ' Spaltenanzahl der Listbox einstellen
    End With
End Sub

reicht
Code:
Private Sub UserForm_Initialize()
  Lst_Postleitzahlen.List=Tabelle1.cells(1).currentregion.value
End Sub

Die Eigenschaft columncount sollte im Design Mode erstellt werden müssen.

Und Eintragen so:

Code:
Private Sub Eintragen_Click()
    ActiveCell.Resize(, 2) = Application.Index(Lst_Postleitzahlen.List, Lst_Postleitzahlen.ListIndex)
End Sub
Hallo Kuwer,

besten Dank! Das hat geholfen. Nun weiss ich auch das ich zukünftig ein With Lst_Postleitzahlen benötige! 

Auch an die anderen vielen Dank! Ich schaue mir die anderen Lösungenwege ebenfalls noch einmal an!

Viele Grüße Steve
Hallo Steve,

(22.12.2020, 16:55)tyr0n schrieb: [ -> ]Nun weiss ich auch das ich zukünftig ein With Lst_Postleitzahlen benötige! 

das ist nicht zwingend erforderlich, macht es aber erheblich übersichtlicher.

Code:
Private Sub Eintragen_Click()
  ActiveCell.Value = Lst_Postleitzahlen.List(Lst_Postleitzahlen.ListIndex, 1) & " " & Lst_Postleitzahlen.List(Lst_Postleitzahlen.ListIndex, 0)
End Sub

Gruß Uwe