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

Bestimmten Wert einer Listbox löschen

Bestimmten Wert einer Listbox löschen
16.03.2021 15:38:36
St.
Hallo zusammen,
nachdem mir hier bisher immer geholfen werden konnte, hoffe ich natürlich auch mit dem nächsten Problem den Profis ihr Wissen entlocken zu können.
Ich habe 2 Listboxen auf einem Tabellenblatt. Beide beinhalten exakt (auch in der Reihenfolge) die gleichen Werte. Ziel: Wenn Werte der zweiten Listbox selektiert werden, möchte ich prüfen, ob der Wert bereits in der ersten Listbox ausgewählt wurde, dann soll ein Hinweis erstellt werden, dass der Wert bereits in der ersten Listbox ausgewählt wurde und der entsprechende Wert aus der zweiten Listbox soll wieder entmarkiert werden. Kurz:
1. Prüfe ob der selektierte Wert bereits in der ersten Listbox vorhanden ist
2. Gib einen Hinweis mit entsprechendem Wert aus
3. Entmarkiere den entsprechenden Wert in der zweiten Listbox wieder, dabei unterbinde das Change-Event der Listbox
Im folgenden Makro ermittele ich über zwei Arrays die Selektionen der Listboxen. Im Anschluss vergleiche ich die Arrays miteinander und erhalte auch bereits die Messagbox, welche der Werte doppelt markiert wurden. Aber leider schaffe ich es nicht die dann entsprechende Selektion in der zweiten Listbox zu löschen. (Nur der erste Werte funktioniert, weil der Index bei 0 jeweils steht). Ich habe mal die Stelle an der die Entmarkierung erfolgen soll fett markiert. lbweitSB ist die zweite Listbox.
Private Sub lbweitSB_Change()
Dim WKZ As String
Dim strSelweitSB As Variant
Dim varSelweitSB As Variant
Dim intSelweitSB As Integer
'If NoEvent = True Then Exit Sub
'Listbox1
'Daten der ListBox in Tabelle "Daten" wegeschreiben
Dim ii As Integer, Zeile As Long, Spalte As Long
Sheets("Daten").Range("D_WKZListe2").ClearContents 'Bereich R2:R33
With lbweitSB
Zeile = 2
Spalte = 19
For ii = 0 To .ListCount - 1
If .Selected(ii) = True Then
Sheets("Daten").Cells(Zeile, Spalte).Value = .List(ii, 0)
Zeile = Zeile + 1
strSelweitSB = strSelweitSB & "|" & .List(ii)
End If
Next
End With
varSelweitSB = Split(Mid(strSelweitSB, 2), "|") 'Array mit Auswahl
With lbzusSB
Zeile = 2
Spalte = 18
For ii = 0 To .ListCount - 1
If .Selected(ii) = True Then
Sheets("Daten").Cells(Zeile, Spalte).Value = .List(ii, 0)
Zeile = Zeile + 1
strSelzusSB = strSelzusSB & "|" & .List(ii)
End If
Next
End With
varSelzusSB = Split(Mid(strSelzusSB, 2), "|") 'Array mit Auswahl
For intSelweitSB = 0 To UBound(varSelweitSB)
For intvarSelzusSB = 0 To UBound(varSelzusSB)
If (varSelweitSB(intSelweitSB) = varSelzusSB(intvarSelzusSB)) Then
MsgBox "... " & varSelweitSB(intSelweitSB) & " ..." & vbCrLf & "...", vbInformation
'NoEvent = True
MsgBox lbweitSB.SelectedItems.Count.ToString()
lbweitSB.Selected(intSelweitSB) = False
'NoEvent = False
Else: End If
Next intvarSelzusSB
Next intSelweitSB
End Sub
Danke!

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestimmten Wert einer Listbox löschen
16.03.2021 16:00:12
Rudi
Hallo,
würde ich so machen:
Option Explicit
Dim objLBX1 As Object
Dim bolCODE As Boolean
Private Sub ListBox1_change()
Dim i As Integer
Set objLBX1 = CreateObject("scripting.dictionary")
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
objLBX1(.List(i)) = 0
End If
Next
End With
End Sub
Private Sub ListBox2_change()
Dim i As Integer
If Not bolCODE Then
With ListBox2
For i = 0 To .ListCount - 1
If .Selected(i) Then
If objLBX1.exists(.List(i)) Then
bolCODE = True
MsgBox "Bereits gewählt"
.Selected(i) = False
End If
End If
Next i
End With
End If
bolCODE = False
End Sub

Gruß
Rudi

Anzeige
AW: Bestimmten Wert einer Listbox löschen
16.03.2021 16:13:50
Daniel
Hi
ich würde das so machen:
1. verwende nicht das Change-Event, sondern das MouseUP-Event der zweiten Listbox.
dann kannst du nämlich per Code die Selektion ändern, ohne dass Makros ausgelöst werden.
das MouseUP-Event geht nur los, wenn der Anwender was ändert.
2. dann dieser Code im MouseUP-Event der zweiten Listbox:
(ich nehme, da ich den Code neu schreibe, Listbox1 und Listbox2 anstelle deiner Beschreibungen, daher bitte den Code nicht einfach kopieren, sondern lesen, verstehen und angepasst selber schreiben)

dim i as long
dim Txt as string
for i = 0 to Listbox2.ListCount - 1
if  Listbox2.Selected(i) Then
If Listbox1.Selected(i) Then
Listbox2.Selected(i) = False
Txt = txt & vblf "- " & Listbox2.List(i)
end if
end if
next
if txt  "" then Msgbox "Folgende Einträge würden doppelt ausgewählt und in Listbox2 wieder  _
abgewählt: " & Txt

Gruß Daniel

Anzeige
AW: Bestimmten Wert einer Listbox löschen
17.03.2021 07:21:26
St.
Guten Morgen Rudi,
guten Morgen Daniel,
vielen Dank! Beide Varianten klappen wunderbar, obwohl ich für meine Zwecke auf den Code von Daniel zurückgreife, weil ich alles in einem Change Event abbilden kann. Ich habe den dritten Code-Teil ersetzt und auch die Auswahl der ersten Listbox muss ich im ChangeEvent so nicht mehr direkt einlesen! Für interessierte das Ergebnis:
Sub ...()
Dim i As Long
Dim Txt As String
With lbweitSB
Zeile = 2   '1. Zeile in die selektierte Wochentage eingetragen werden sollen
Spalte = 19 'Spalte R - Spalte in die Wochentage eingetragen werden sollen
For ii = 0 To .ListCount - 1
If .Selected(ii) = True Then
Sheets("Daten").Cells(Zeile, Spalte).Value = .List(ii, 0)
Zeile = Zeile + 1
End If
Next
End With
For i = 0 To lbweitSB.ListCount - 1
If lbweitSB.Selected(i) Then
If lbzusSB.Selected(i) Then
lbweitSB.Selected(i) = False
Txt = Txt & vbLf & "- " & lbweitSB.List(i)
End If
End If
Next
If Txt  "" Then MsgBox "Folgende Einträge würden doppelt ausgewählt und in Listbox2 wieder" &  _
_
"abgewählt: " & Txt
End Sub
Einen schönen Start in den Tag.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige