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

Listbox Multiselect --- Schleifenprobleme

Listbox Multiselect --- Schleifenprobleme
Lars
Hallo liebe Excel-Profis,
ich bastle und zermürbe mir seit 2 Tagen den Kopf, wie ich eine Schleife in folgende Aufgabenstellung bekomme? Crying or Very sad
Habe mir eine Listbox erstellt, in welcher Daten in 10 Spalten aufgeführt werden. Die Daten stammen aus einem Bereich der Tabelle2 ("Daten").
Die Listbox in mit der Option Multiselect und fmListStyleOption in den Eigenschaften eingestellt.
Ziel ist es, dass der User per Auswahl in der Listbox eine oder beliebig viele Zeilen auswählt und dann diese Zeilen im Tabellblatt2 ("Daten") und natürlich die Listbox-Zeile gelöscht werden. Folgende Procedur habe ich mir erstellt, die bei Auswahl eines einzigen Datensatzes prima funktioniert.
Private Sub CommandButton3_Click()   '  Löschen
Dim i As Long
Dim intZ As Integer
Dim durchsuchen, finden As Range
Set durchsuchen = Sheets("Daten").Range("B8:L" & _
Sheets("Daten").Range("B65536").End(xlUp).Row)
For Each finden In durchsuchen
If finden.Text = TextBox6.Text Then
intZ = finden.Row
Cells(intZ, 7).EntireRow.Delete
i = ListBox1.ListIndex
ListBox1.RemoveItem (i)
Exit For
End If
Next finden
End Sub

Wenn ich nun mehrere Einträge auswähle, wird immer nur der unterste Treffer im Tabellenblatt gelöscht :-(
Ich versuche, mir seit einigen Monaten VBA im Selbststudium beizubringen, hab´auch schon manches hinbekommen, aber hier komme ich nicht auf die richtige Lösung... könnt Ihr mir weiterhelfen + mir die fehlenden Teile der korrekten Schleife kurz näher erläutern..? (möcht´s ja möglichst lernen / verstehen) .
************************************************************************************
Anbei noch ein paar Ergänzende Infos zur Funktion der Listbox.
Die Listbox ist auch mit mehreren Textboxen ausgestattet - u.a. mit einer Textbox, in welcher nach verschiedensten Eingabekriterien gesucht werden kann. Das klappt super.
Es gibt 10 Textboxen, die die Datensatzinformationen wiederspiegeln und anzeigen (z.B. Kd.-Nr., Auftrag. Nr. Standort usw.) Das läuft auch schon. Diese Textboxen dienen aber auch dazu, Änderungen im Datensatz vornehmen zukönnen (Funktion habe ich noch nicht erstellt). Mir geht es jetzt erstmal um den Lösch-Befehl (ausgewählte Datensätze in Tabelle und Listbox).
Da durch die Suchfunktion die Trefferanzahl variieren kann und daher nicht immer identisch zur Reihenfolge im Tabellenblatt sind, ist der Wert aus Textbox6 das entscheidende Kriterium, nach welchem gesucht und gelöscht werden soll, da es diesen Wert nur jeweils 1 x in allen Datensätzen geben kann (das wird schon beim Anlegen der Daten überprüft und verhindert. Alle anderen Daten können sich durchaus gleichen (weil es Kundenstammdaten sind). Daher möchte ich der Löschfunktion sagen, suche nach allen ausgewählten Datensätzen der Listbox mit dem Suchkriterium der Textbox6. Diese Werte stehen in Spalte G der Tabelle2 (Daten).
Hoffe, das ist einigermaßen nachvollziehbar?...
ps: wie muss es richtig formuliert sein, wenn ich die ausgewählten Zeilen dann im Tabellenblatt2 ("Daten") ansprechen + löschen will? Ist die Definition über "Set durchsuchen" und "intZ" ausreichend definiert?
************************************************************************************
Gruß Lars
kannst Du ein Beispiel posten ? oT
29.07.2011 16:44:40
Matthias
AW: kannst Du ein Beispiel posten ? oT
29.07.2011 17:22:40
Lars
Hallo Matthias,
was genau meinst/benötigst Du als Beispiel?
Gruß Lars
AW: Listbox Multiselect --- Schleifenprobleme
29.07.2011 17:24:14
Lars
Hallo Matthias,
was genau meinst/benötigst Du als Beispiel?
Gruß Lars
was ich meine ...
29.07.2011 17:31:33
Matthias
Hallo
Zum Nachbauen hat nicht jeder Lust ... einfach ein Beispiel hier hochladen
https://www.herber.de/forum/file_upload.html
Kunden und Standorte einfach durch DummyDaten ersetzen.
Ansonsten sollten die Objekte und der momentane Code schon eingebunden sein
Überflüssiges sollte dabei einfach weggelassen werden.
Dann könnten Interssierte mal ein bisschen Testen
Zum Nachbauen habe persönlich ich keine Lust.
Gruß Matthias
Anzeige
AW: was ich meine ...
29.07.2011 17:36:42
Lars
Hallo Mattgias,
schaffe ich heute nicht mehr, würdest Du DIr das morgen mal anschauen?
Gruß Lars
Natürlich, wenn ich Zeit habe ...
29.07.2011 17:51:19
Matthias
Hallo
... und wenn ich keine Zeit habe, dann machts garantiert ein Anderer
Gruß Matthias
AW: Natürlich, wenn ich Zeit habe ...
30.07.2011 18:20:15
Lars
https://www.herber.de/bbs/user/75953.xls
Hallo Matthias & alle Excelprofis,
anbei mal die Musterdatei zu meinem Problem.
Ich möchte in der Userform beliebig viele Datensätze auswählen
und über die Löschfunktion sowohl in der Listbox, als auch im Tabellenblatt (dienst als "Speicher" der Daten)
löschen können.
Ich hoffe, jetzt wird mein Problem etwas deutlicher?
Gruß Lars
Anzeige
AW: Natürlich, wenn ich Zeit habe ...
31.07.2011 08:31:36
Matthias
Hallo Lars
Bevor ich mich intensiv in Dein Projekt reindenken muß, hier eine Beispieldatei.
Im Beispiel werden die markierten Zeilen der Listbox, wie auch die zugehörigen Daten in der Tabelle entfernt.
https://www.herber.de/bbs/user/75955.xls
Ich hoffe ich konnte so ein bisschen zum Verständnis beitragen
Gruß Matthias
AW: Natürlich, wenn ich Zeit habe ...
31.07.2011 15:38:38
Lars
Hallo Matthias + Excelgemeinde,
Danke für Deine Antw. So, wie Deine Musterdatei funktioniert, klappt es bei meiner geposteten ja auch schon - nämlich bei einer "Einfachauswahl".
Ich möchte in meiner Datei aber auch eine Mehrfachauswahl vornehmen können, so dass dann alle "Listboxeinträge mit Häkchen" gelöscht werden. Die Einträge selbst kommen ja duch die Suchfunktion in die Listbox. Nun soll man einen, oder mehrere Häkchen setzen können und dann sollen sich sowohl Listboxeintrag, als auch die dazugehörige Zeile in der Tabelle löschen....
Mein Problem besteht also im Aufbau der Schleife für die Mehrfachauswahl..... :-(
Gruß Lars
Anzeige
AW: Natürlich, wenn ich Zeit habe ...
31.07.2011 19:28:42
Matthias
Hallo
So, wie Deine Musterdatei funktioniert, klappt es bei meiner geposteten ja auch schon ...
Nein eben nicht.
Du mußt innerhalb der Listbox die Schleife über die selektierten Einträge (die mit dem Häkchen) laufen lassen.
 With ListBox1
For x = .ListCount - 1 To 0 Step -1    'die Schleife unbedingt rücwärts laufen lassen!
 If .Selected(x) = True Then       'also wenn Häckchen gesetzt ist dann ...
.RemoveItem (x)                'entferne den Eintrag in der Listbox
Cells(x + 1, 1).ClearContents 'und hier entferne den Eintrag in der der Tabelle
End If
Next
End With
Cells(x + 1, 1).ClearContents das geht so natürlich nur für meine Beispieldatei,
denn die Box wird ja im Beispiel anders befüllt
Anstatt dieser Zeile musst Du natürlich einen eigenen Code zum Enfernen aus
der Tabelle benutzen.
Gruß Matthias
Anzeige
ich hatte nun Zeit ...
01.08.2011 06:18:52
Matthias
Hallo Lars
Ich habe mich nun doch mal mit Deinem Projekt intensiver beschäftig.
Anbei die Datei mit dem geänderten Code zum Löschen der markierten Einträge in der Listbox
und dem Entfernen der entsprechenden Zeile aus der Tabelle
Wenn Du das Formular startest, schiebe mal das UserForm soweit nach rechts, das Du die AuftragsNr. in der Tabelle siehst. Füll Deine Listbox und wähle einige zu löschende Einträge aus.
Zur besseren Visualisierung des Löschvorgangs habe ich die Zeile vor dem Löschen gelb markiert
Diesen Teil im Code kannst Du ja wieder löschen
Ich denke, es passt so
https://www.herber.de/bbs/user/75962.xls
Userbild
Anzeige
AW: Natürlich, wenn ich Zeit habe ...
05.08.2011 00:03:08
Lars
Hallo Matthias,
sorry, hane erst jetzt Zeit zum antw.
Erstmal Vielen Dank für Deine Hilfe, der Code funktioniert einwandfrei :-)
Habe noch ein weiteres Problem - vielleicht kannst Du Dir das auch anschauen?
Ich möchte über die Userform auch neue Datensätze anlegen können. Dabei soll aber verhindert werden, dass ein Datensatz versehentlich doppelt angelegt wird. Das "doppelt" soll sich auf folgende Prüfkriterien befinden:
Existiert im gesamten Datensatz bereits eine Zeile, in welcher die Werte der 4. und 7. Spalte (als Paar) vorhanden sind, soll das Speichern verhindert werden. Mit folgendem Code funktioniert es schon ganz gut - allerdings gelingt mir nur die Prüfung auf die 7. Spalte. Es soll aber erst "kein Speichern" möglich sein, wenn die Kombination Spalte 4 und 7 bereits so schon existiert.
Was muss getan werden, damit mein Code das ausführt?
Private Sub CommandButton4_Click()   '  Eintragen
Dim intZ As Integer
Dim lZeile As Long
If TextBox6.Value = "" Then
MsgBox "Keine Auftragsdaten zum Speichern vorhanden. Erfassen Sie einen Datensatz vollstä _
ndig und wiederholen Sie den Speichervorgang!", vbOKOnly, "Hinweis"
Exit Sub
End If
intZ = Range("C65536").End(xlUp).Row + 1
Cells(intZ, 2) = TextBox1 ' Kd.-Nr.
Cells(intZ, 3) = TextBox2 ' Firma/Name
Cells(intZ, 4) = TextBox3 ' Tor-Nr.
Cells(intZ, 5) = ComboBox2 ' Hersteller
Cells(intZ, 6) = ComboBox1 ' Tor-Typ
Cells(intZ, 7) = TextBox6 ' Auftr.-Nr.
Cells(intZ, 8) = ComboBox3 ' BJ
Cells(intZ, 9) = TextBox14 ' Farbe
Cells(intZ, 10) = TextBox9 ' Tor-Größe
Cells(intZ, 11) = ComboBox5 ' Steuerung
Cells(intZ, 12) = ComboBox4 ' Farbe
Cells(intZ, 13) = TextBox15 ' nä. Wartung
Sheets("Daten").Select
For lZeile = Cells(Rows.Count, 7).End(xlUp).Row To 1 Step -1
If Application.WorksheetFunction.CountIf(Columns(7), Range("G" & lZeile).Value) > 1 Then
MsgBox "Datensatz  [Auftragsnummer]  ist bereits vorhanden! Die Eingabe wird nicht  _
gespeichert!", vbOKOnly, "Speichern nicht möglich! "
Rows(lZeile).Delete Shift:=xlUp
End If
Next lZeile
Call CommandButton1_Click
TextBox13.SetFocus
End Sub

Würde mich sehr über Lösungsansätze/Vorschläge freuen.
Gruß aus Bremen
Lars
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige