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

In ListBox suchen

In ListBox suchen
23.08.2017 09:21:13
Antonio
Gutmorgen,
ich versuche im ListBox Elemente zu suchen un zu filtern, das klappt auch relativ gut, aber wenn ich versuche ein Eintrag zu editieren, erscheint in die TextBoxen der Eintrag der Tabelle1.
Kann mir bitte jemand helfen den Fehler zu finden?
Danke in Voraus
Antonio
hier meine Mappe, bitte ausprobieren, im Code ganz unten ist die SUCHE.

Die Datei https://www.herber.de/bbs/user/115650.xlsm wurde aus Datenschutzgründen gelöscht


15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: In ListBox suchen
23.08.2017 10:13:03
Antonio
Keiner der mir helfen kann?
AW: In ListBox suchen
23.08.2017 11:01:53
ChrisL
Hi
Wenn die Listbox gefiltert ist, dann stimmt der ListIndex natürlich nicht mit der Zeilennummer überein. Da deine Nummern in Spalte A nicht eindeutig sind (mehrfach und änderbar), kann man nicht danach suchen. D.h. ein veränderter Datensatz kann nicht mehr klar zugeordnet werden.
Unter diesen Voraussetzungen müsstest du umbauen und die Zeilennummer in einer versteckten ListBox-Spalte speichern. Anhand dieser Nummer kannst du dann die Zuordnung zur Zeile vornehmen.
Da du es scheinbar eilig hast und ich auch keine Lust habe dein Projekt neu zu strukturieren, schau mal ob du nicht einen Archivbeitrag findest, denn so ähnliche Aufgaben wurden schon x-fach gelöst.
cu
Chris
Anzeige
AW: In ListBox suchen
23.08.2017 11:57:06
Antonio
Hallo Chris, danke für deine Meldung.
Das mit der Zeilennummer der Spalte A (mehrfach und änderbar)ist sicher nicht die Beste Methode, aber die Nummerierung entspricht gleichzeitig die Pos. Nr. in der Zeichnung.
Aber dein Vorschlag ist nicht schlecht.
Wäre dann besser wenn ganz Vorne eine ID Nr. stehen würde und für die Pos.Nr. eine extra Spalte?
AW: In ListBox suchen
23.08.2017 12:23:04
ChrisL
Hi Antonio
Eine eindeutige ID würde es erleichtern und du müsstest die Zeilennummer nicht in einer extra Spalte speichern. Aber beide Varianten sind möglich.
cu
Chris
AW: In ListBox suchen
23.08.2017 12:41:53
Antonio
Hall Chris,
habe mich für die Variante mit dem ID Nr. entscieden.
Wie du aus dem Bild entnehmen kannst:
1)im Suche TB etwas eingeben
2)LB sucht und filtert, liste reduziert sich
3)click auf einem Item, in die TBen wird der falsche item gezeigt
ab hier weiß ich nicht wie der ID eingesetzt werden kann,
etwa so evtll?:
Set zelle1 = Sheets("DatenBlatt").Columns(1).Find(what:=ID, Lookat:=xlwhole, Searchdirection:=  _
_
xlnext)
set Zelle2 = Sheets("DatenBlatt").Columns(1).Find(What:=ID, LookAt:=xlwhole, Searchdirection:=  _
_
xlprevious)
Listbox1.List = Range(Zelle1, Zelle2).Resize(, 3).Value
Ich bitte um einige Anregungen.
Antonio
Userbild
Anzeige
AW: In ListBox suchen
23.08.2017 16:01:01
ChrisL
Hi Antonio
Ich weiss jetzt nicht wo du genau dran bist, aber wenn ich davon ausgehe dass die ID in Spalte A steht und in TextBox1 angezeigt wird, dann bräuchte es eigentlich nur noch die Änderung im Übertrag.
'Neu:
If WorksheetFunction.CountIf(Columns(1), CLng(TextBox1)) = 0 Then
xZeile = [A65536].End(xlUp).Row + 1
Else
xZeile = Application.Match(CLng(TextBox1), Columns(1), 0)
End If
'Alt:
'If ListBox1.ListIndex = 0 Then
'    xZeile = [A65536].End(xlUp).Row + 1
'Else
'    xZeile = ListBox1.ListIndex + 1
'End If
(n.b. mit Find geht es natürlich auch, ich verwende meist =VERGLEICH() resp. Match bei eindeutiger Suche)
cu
Chris
PS: ID ist vom Typ Long (Ganzzahl)
PPS: Ist zwar jetzt sowieso egal, aber im alten Code hättest du übrigens "If Listbox1.ListIndex = -1 Then" machen müssen
Anzeige
AW: In ListBox suchen
24.08.2017 08:06:28
Antonio
Hi Chris,
ich habe mich vielleicht nicht duetlich ausgedruckt, liegt evtll. an meine deutsche Kenntnisse.
Mein Problem liegt daran das nach der SUCHE in LB und nach der Auswahl eines Item, wirden mir die falsche Einträge aufgerufen.
Eine kleine Anleitung (bitte versuch es wenn Zeit hast):
1) Programm ausführen - LB füllt sich - achte daraf Z.B. auf die erste 5 Einträge
2) LB click - alles OK! - die Einträge in TBen sind richtig
3) in TB suchen gib bitte "mem" - im LB reduziert sich die Liste auf die Membrane
Bis jetzt alles OK!
4) In LB click auf das dritte ITEM - die Einträge in TBen sin FALSCH
5) Es sind die gleiche Einträge wie in Punkt 2)
Der LB behält anscheinend im Hintergrund die Tabelle1, und hier komme ich nicht dahinter.
Ich hoffe dir es klar dargestellt zu haben und das du mir weiter bringen kannst.
Anbei die Mappe etwa im Design geändert,ich brauche nicht alle Spalten, in Suche darzustellen, wichtig ist beim LB click das die TBen vollständig gefüllt werden.
Antonio
PS: ich habe es nicht eilig.
https://www.herber.de/bbs/user/115689.xlsm
Anzeige
AW: In ListBox suchen
24.08.2017 09:01:56
ChrisL
Hi Antonio
Folgendes:
ListBox1.List(ListBox.ListIndex, 0) + 1
entspricht neu der ID des ausgewählten ListBox Eintrags d.h. es wird der Wert aus ListBox Spalte A ausgelesen.
Mit diesem Wert kannst du dann in der Tabelle suchen.
Weiter sehe ich noch folgende Unstimmigkeiten:
- ListIndex 0 (null) entspricht dem ersten ListBox Eintrag. -1 bedeutet dass nichts ausgewählt ist.
- Einmal lädst du die ListBox ohne Überschrift und einmal mit. Die Titel würde ich nicht in der ListBox darstellen.
- Wenn du die Tabelle Spalte A nicht zentrierst formatierst sieht du, dass die ID 2, 3 und 12 keine richtige Zahlen sind.
Private Sub ListBox1_Click() 'Eintrag an TextBox
Dim i As Byte, xZeile As Long
With ListBox1
For i = 1 To 11
If .ListIndex = -1 Then
Controls("TextBox" & i) = ""
Else
xZeile = Application.Match(CLng(.List(.ListIndex, 0)), Columns(1), 0)
Controls("TextBox" & i) = Cells(xZeile, i)
End If
Next i
End With
End Sub

Private Sub CommandButton1_Click()      'Löschen
Dim i As Byte
With ListBox1
If .ListIndex  -1 Then
Rows(.List(.ListIndex, 0) + 1).Delete
For i = 1 To 11
Controls("TextBox" & i) = ""
Next i
UserForm_Initialize
End If
End With
End Sub

Private Sub CommandButton2_Click()      'Übernehmen
Dim xZeile As Long, i As Byte
If TextBox1 = "" Then Exit Sub
If WorksheetFunction.CountIf(Columns(1), CLng(TextBox1)) = 0 Then
xZeile = [A65536].End(xlUp).Row + 1
Else
xZeile = Application.Match(CLng(TextBox1), Columns(1), 0)
End If
For i = 1 To 11
Select Case i
Case 9, 10, 11
Cells(xZeile, i) = Format(Controls("TextBox" & i).Value, "€ ####0.00")
Case Else
Cells(xZeile, i) = Controls("TextBox" & i)
End Select
Controls("TextBox" & i) = ""
Next i
UserForm_Initialize
End Sub

Private Sub CommandButton3_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
Dim L As Long
With ListBox1
.Clear
.ColumnCount = 5
.ColumnWidths = "30;30;100;300;100"
For L = 2 To Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
.AddItem Tabelle1.Cells(L, 1)
.List(.ListCount - 1, 1) = Tabelle1.Cells(L, 2)
.List(.ListCount - 1, 2) = Tabelle1.Cells(L, 3)
.List(.ListCount - 1, 3) = Tabelle1.Cells(L, 5)
.List(.ListCount - 1, 4) = Tabelle1.Cells(L, 6)
Next
.ListIndex = -1
End With
End Sub

Private Sub TextBox12_Change()
'Suchen
Dim lng As Long
Dim i As Integer
With ListBox1
.Clear
.ColumnCount = 5
.ColumnWidths = "30;30;100;300;100"
For lng = 2 To Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
If InStr(LCase(Cells(lng, 5).Value), LCase(TextBox12.Value)) > 0 Then
.AddItem Cells(lng, 1)
.Column(1, i) = Tabelle1.Cells(lng, 2)
.Column(2, i) = Tabelle1.Cells(lng, 3)
.Column(3, i) = Tabelle1.Cells(lng, 5)
.Column(4, i) = Tabelle1.Cells(lng, 6)
i = i + 1
End If
Next lng
End With
End Sub

cu
Chris
Anzeige
AW: In ListBox suchen
24.08.2017 09:42:32
Antonio
Dear Chris,
also, mir ist der Kinn runtergefallen, ****Natürlich freu mich das es endlich FUNZT***** BUT....
habe mir dein Code genau angeschaut und habe einige Zeilen bemerkt wie:
For i = 1 To 11
Controls("TextBox" & i) = ""
was dazu gelernt.
For i = 1 To 11
Select Case i
Case 9, 10, 11
Cells(xZeile, i) = Format(Controls("TextBox" & i).Value, "€ ####0.00")
Case Else
Cells(xZeile, i) = Controls("TextBox" & i)
End Select
Controls("TextBox" & i) = ""
nie gedacht sowas zu machen mit Select Case.
was dazu gelernt.
Private Sub UserForm_Initialize()
Dim L As Long
With ListBox1
.Clear
.ColumnCount = 5
.ColumnWidths = "30;30;100;300;100"
For L = 2 To Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
.AddItem Tabelle1.Cells(L, 1)
.List(.ListCount - 1, 1) = Tabelle1.Cells(L, 2)
.List(.ListCount - 1, 2) = Tabelle1.Cells(L, 3)
.List(.ListCount - 1, 3) = Tabelle1.Cells(L, 5)
.List(.ListCount - 1, 4) = Tabelle1.Cells(L, 6)
Next
.ListIndex = -1
End With
End Sub
Private Sub TextBox12_Change()
'Suchen
Dim lng As Long
Dim i As Integer
With ListBox1
.Clear
.ColumnCount = 5
.ColumnWidths = "30;30;100;300;100"
For lng = 2 To Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
If InStr(LCase(Cells(lng, 5).Value), LCase(TextBox12.Value)) > 0 Then
.AddItem Cells(lng, 1)
.Column(1, i) = Tabelle1.Cells(lng, 2)
.Column(2, i) = Tabelle1.Cells(lng, 3)
.Column(3, i) = Tabelle1.Cells(lng, 5)
.Column(4, i) = Tabelle1.Cells(lng, 6)
i = i + 1
End If
Next lng
End With
End Sub
hier habe ich mich auf die Finger gehauen das ich nicht dahinter gekommen bin, war aber ziehmlich nah.
was dazu gelernt.
Aber das, das ist der KNULLER:
Private Sub ListBox1_Click() 'Eintrag an TextBox
Dim i As Byte, xZeile As Long
With ListBox1
For i = 1 To 11
If .ListIndex = -1 Then
Controls("TextBox" & i) = ""
Else
xZeile = Application.Match(CLng(.List(.ListIndex, 0)), Columns(1), 0)
Controls("TextBox" & i) = Cells(xZeile, i)
End If
Next i
End With
End Sub
und wieder was dazu gelernt.
Vielen vielen Dank für deine Geduld und deine Gabe die Dinge so zu erklären das sie verständlich sind.
Alles Gute und Danke nochmal
Antonio
der Buam aus der Steiermark
Anzeige
AW: In ListBox suchen
24.08.2017 09:55:48
ChrisL
Hi Antonio
Bitte und Danke für die Rückmeldung. Hier habe ich noch einen kleinen Fehler entdeckt:
Private Sub CommandButton1_Click()      'Löschen
Dim i As Byte, xZeile As Long
With ListBox1
If .ListIndex  -1 Then
xZeile = Application.Match(CLng(.List(.ListIndex, 0)), Columns(1), 0)
Rows(xZeile).Delete
For i = 1 To 11
Controls("TextBox" & i) = ""
Next i
UserForm_Initialize
End If
End With
End Sub
cu
Chris
AW: In ListBox suchen
24.08.2017 09:59:12
Antonio
Hi das habe ich nicht verstanden:
"- Wenn du die Tabelle Spalte A nicht zentrierst formatierst sieht du, dass die ID 2, 3 und 12 keine richtige Zahlen sind."
mir ist aufgefallen das bei diese Einträg (2,3,12) : Laufzeitfehler.
Soll heißen die Spalte A soll nicht zentriet formatiert sein.
Stimmt, inszwischen geändert, keine Laufzeitfehler mehr.
ANtonio
Anzeige
AW: In ListBox suchen
24.08.2017 10:23:22
ChrisL
Hi Antonio
Die Formatierung ist egal, zentriert ist schon OK. Aber zur Feststellung was echte Zahlen sind...
OK jetzt habe ich gesehen, es liegt am Code. Die Übernahme aus TextBox erfolgt als Text:
Private Sub CommandButton2_Click()      'Übernehmen
Dim xZeile As Long, i As Byte
If TextBox1 = "" Then Exit Sub
If WorksheetFunction.CountIf(Columns(1), CLng(TextBox1)) = 0 Then
xZeile = [A65536].End(xlUp).Row + 1
Else
xZeile = Application.Match(CLng(TextBox1), Columns(1), 0)
End If
For i = 1 To 11
Select Case i
Case 1
            Cells(xZeile, i) = CLng(TextBox1)
Case 9, 10, 11
Cells(xZeile, i) = Format(Controls("TextBox" & i).Value, "€ ####0.00")
Case Else
Cells(xZeile, i) = Controls("TextBox" & i)
End Select
Controls("TextBox" & i) = ""
Next i
UserForm_Initialize
End Sub
cu
Chris
Anzeige
AW: In ListBox suchen
24.08.2017 11:22:24
Antonio
Hi Chris,
sobald ich über die Form einen Preis eingebe, macht mir Excel in alle Spalten mit Zahlen einen grünen Dreieck links oben, siehe Bilder, und diese Zeilen verursachen dann den Laufzeitfehler 13.
Wenn ich die Tabelle händisch schreibe ist dann i.O. macht aber keinen Sinn (brauche dann auch kein Formular)
Userbild
Userbild

Case 1
Cells(xZeile, i) = CLng(TextBox1)
ändert sich nichts.
vielleicht liegt an Excel, werde nachschauen
Danke für die Korrekturen.
Antonio
Anzeige
AW: In ListBox suchen
24.08.2017 11:43:51
ChrisL
Hi
Noch ein Versuch:
Private Sub CommandButton2_Click()      'Übernehmen
Dim xZeile As Long, i As Byte
If TextBox1 = "" Then Exit Sub
If WorksheetFunction.CountIf(Columns(1), CLng(TextBox1)) = 0 Then
xZeile = [A65536].End(xlUp).Row + 1
Else
xZeile = Application.Match(CLng(TextBox1), Columns(1), 0)
End If
For i = 1 To 11
Cells(xZeile, i) = Controls("TextBox" & i).Value
Controls("TextBox" & i) = ""
Next i
UserForm_Initialize
End Sub

Die Formatierung muss eigentlich gar nicht übertragen werden, dies wird durch die Tabellenformatierung erledigt. Dafür wäre ".Value" nicht schlecht ;)
cu
Chris
AW: In ListBox suchen
24.08.2017 11:58:59
Antonio
***DANKE***
***DANKE***
***DANKE***
***DANKE***
***DANKE***
Antonio
der glückliche Buam aus der Steiermark

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige