PDA

Vollständige Version anzeigen : Suchfunktion mit Ausgabe in einer Listbox


Sayawa
31.08.2017, 14:39
Hallo Zusammen,

ich habe eine Liste in der Lieferanten gepflegt werden. Das mit dem Eintragen über eine Userform klappt schon super. Nun will ich aber in den vorhandenen Lieferanten suchen und ggf. Änderungen vornehmen.

Die Suchfunktion habe ich auch programmiert. Allerdings habe ich nun das Problem das in der Listbox mit AddItem nur 10 Spalten ausgegeben werden können. Meine Lieferanten Datei hat aber 11 Spalten.

Gesucht wird in der zweiten Spalte nach dem Kurznamen des Lieferanten. Ich würde gerne mit RowSource statt mit AddItem arbeiten. Ich bekomme dann aber bei meiner Suche alle Lieferanten gelistet und nicht nur ein Suchergebnis.

Mein Code.

Dim rngcellKurzname As Range
Dim KName As String
Dim LfNr As String

'Es wird die Spalte B durchsucht.
With Range("B:B")

'Die Ergebnistabelle wird geleert
ListBox1.Clear

Set rngcellKurzname = .Find(TextBox2)

If Not rngcellKurzname Is Nothing Then

KName = rngcellKurzname.Address
'Mit einer Do Loop Schleife werden die Treffer abgearbeitet.
Do
'ListBox mit Treffern befüllen
With ListBox1
'Spaltenanzahl
.ColumnCount = 10

'Item hinzufügen
.AddItem
'Alle Treffer
.List(.ListCount - 1, 0) = rngcellKurzname.Value
'Die dazugehörigen Daten rechts neben dem Treffer: .Offset(0, X) X = Spalten daneben


.List(.ListCount - 1, 1) = rngcellKurzname.Offset(0, 1).Value 'Firmenname
.List(.ListCount - 1, 2) = rngcellKurzname.Offset(0, 2).Value 'Strasse
.List(.ListCount - 1, 3) = rngcellKurzname.Offset(0, 3).Value 'PLZ
.List(.ListCount - 1, 4) = rngcellKurzname.Offset(0, 4).Value 'Ort
.List(.ListCount - 1, 5) = rngcellKurzname.Offset(0, 5).Value 'Postfach
.List(.ListCount - 1, 6) = rngcellKurzname.Offset(0, 6).Value 'Land
.List(.ListCount - 1, 7) = rngcellKurzname.Offset(0, 7).Value 'Vorwahl
.List(.ListCount - 1, 8) = rngcellKurzname.Offset(0, 8).Value 'Telefon
.List(.ListCount - 1, 9) = rngcellKurzname.Offset(0, 9).Value 'E-Mail

'Definition der Spaltenbreite
.ColumnWidths = "2cm;5cm;4,5cm;1,5cm;2,5cm;2cm;2cm;1cm;2cm;4cm"

End With

'mit .FindNext springen wir zum nächsten Treffer der Suche.
Set rngcellKurzname = .FindNext(rngcellKurzname)
'Die Schleife soll solange arbeiten wie Treffer vorhanden sind.
'Die Schleife soll austreten sobald der erste Treffer wieder erreicht wurde
Loop While Not rngcellKurzname Is Nothing And rngcellKurzname.Address <> KName

End If

End With

Label12.Caption = ListBox1.ListCount & " Treffer"

If ListBox1.ListCount = 1 Then
Application.Goto Range(ListBox1.List(0, 9))
End If

End Sub

Hajo_Zi
31.08.2017, 15:29
erstelle eine neue Tabelle mit Deinen Daten, dann gehen auch mehr als 10 Spalten.

<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>

amicro2000
31.08.2017, 16:12
Hallo Sayawa,

befülle erst ein array mit den gefundenen Einträgen.

Dieses darf auch mehrer Spalten haben.

dann einfach mit Listbox.list = array befüllen.

Sayawa
04.09.2017, 09:05
Hallo und danke für die raschen Antworten.

Wie befülle ich den ein Array mit den gefundenen Einträgen. Bzw. wo muss ich meinen Code ändern damit es funktioniert?

Beverly
04.09.2017, 10:03
Hi,

nach diesem Prinzip:

Dim arrWerte()
Dim lngZeile As Long
Dim lngZaehler As Long
Dim lngAnzahl As Long
lngAnzahl = Application.CountIf(Columns(2), TextBox2.Value)
ReDim arrWerte(0 To lngAnzahl - 1, 13)
For lngZeile = 1 To 10
If Cells(lngZeile, 1) = TextBox2.Value Then
arrWerte(lngZaehler, 0) = Cells(lngZeile, 1)
arrWerte(lngZaehler, 1) = Cells(lngZeile, 2)
arrWerte(lngZaehler, 2) = Cells(lngZeile, 3)
arrWerte(lngZaehler, 3) = Cells(lngZeile, 4)
arrWerte(lngZaehler, 4) = Cells(lngZeile, 5)
arrWerte(lngZaehler, 5) = Cells(lngZeile, 6)
arrWerte(lngZaehler, 6) = Cells(lngZeile, 7)
arrWerte(lngZaehler, 7) = Cells(lngZeile, 8)
arrWerte(lngZaehler, 8) = Cells(lngZeile, 9)
arrWerte(lngZaehler, 9) = Cells(lngZeile, 10)
arrWerte(lngZaehler, 10) = Cells(lngZeile, 11)
arrWerte(lngZaehler, 11) = Cells(lngZeile, 12)
arrWerte(lngZaehler, 12) = Cells(lngZeile, 13)
lngZaehler = lngZaehler + 1
End If
Next lngZeile
With ListBox1
.ColumnCount = 14
.List = arrWerte()
End With


<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>