Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1780to1784
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
combobox removeitem
04.09.2020 08:12:56
Jonny
Hallo liebe Profis!
Könnt ihr mir vielleicht auf die Sprünge helfen?
Ich habe eine UserForm mit mehreren Comboboxen die beim Initialisieren alle mit den selben Items gefüllt werden (also die Auswahlmöglichkeit ist gleich, die Auswahl selbst trifft der User).
Wenn jetzt bei einer UserForm "Möglichkeit 1" angewählt wurde, möchte ich dass die "Möglichkeit 1" bei den anderen Comboboxen nicht mehr zur Verfügung steht (um eine Doppelauswahl zu vermeiden).
Das sollte mit "RemoveItem" funktionieren.
Allerdings muss ich (glaube ich) zuerst herausfinden welchen Indexwert "Möglichkeit 1" in jeder anderen Combobox hat.
Weiß jemand wie ich das am besten mache?

Vielen Dank für die Hilfe!!!
Jonny

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: combobox removeitem
04.09.2020 08:41:01
Nepumuk
Hallo Jonny,
ein Beispiel:
Private Sub ComboBox1_Change()
    Call ClearItem(ComboBox1)
End Sub

Private Sub ComboBox2_Change()
    Call ClearItem(ComboBox2)
End Sub

Private Sub ClearItem(ByRef probjComboBox As MSForms.ComboBox)
    Dim objControl As Control
    Dim lngIndex As Long
    For Each objControl In Controls
        If TypeOf objControl Is MSForms.ComboBox Then
            If Not objControl Is probjComboBox Then
                For lngIndex = 0 To objControl.ListCount - 1
                    If objControl.List(lngIndex) = probjComboBox.Text Then
                        Call objControl.RemoveItem(lngIndex)
                        Exit For
                    End If
                Next
            End If
        End If
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: combobox removeitem
04.09.2020 08:43:48
Oberschlumpf
Hi :-)
DAS ist dann die VBA-Variante meiner vorherigen Textformulierung :-)
Ciao
Thorsten
AW: combobox removeitem
04.09.2020 10:53:25
Jonny
wow, ich musste jetzt offline sein und hab gerade alle eure antworten gelesen.
VIELEN DANK für eure hilfe und zeit!
das problem ist damit gelöst! :-)
vielen dank!
jonny
AW: combobox removeitem
04.09.2020 11:17:54
Daniel
das ist aber noch unvollständig, bzw funktioniert so nicht richtig.
Beispiel folgender Ablauf:
1. ich wähle in Combobox1 Eintrag1
2. ich wechsle in Combobox1 von Eintrag1 auf Eintrag2
in Combobox2 fehlen jetzt Eintrag2 UND Eintrag1, obwohl Eintrag1 ja nicht gewählt ist und frei wäre.
hier fehlt also noch das Wiedereinfügen der alten Einträge in die Comboboxen, falls ein Eintrag in ein einer Combobox verändert wird.
Gruß Daniel
Anzeige
AW: combobox removeitem
04.09.2020 12:15:10
Jonny
stimmt daniel!
in diesem sonderfall erscheint der eintrag nicht mehr.
leider hab ich keine idee wie man damit umgehen könnte.
mein gedanke war: mit "clear" die combobox leeren und alle items erneut hinzufügen.
aber dann löscht man ja auch die bereits getätigten einträge... :-/
hast du, oder jemand anders eine idee wie man den eben ersetzten eintrag wieder in alle comboboxen hinzufügt? (und dann auch noch an der richtigen stelle - das dürfte die nächste herausforderung sein...)
Wer lesen kann ist im Vorteil
04.09.2020 12:34:40
Daniel
du hast doch noch mehr Lösungsvorschläge bekommen, warum beschäftigst du dich nur mit einem?
Gruß Daniel
Anzeige
AW: Wer lesen kann ist im Vorteil
04.09.2020 13:45:29
Jonny
ziemlich peinlich, aber du hast vollkommen recht!
dein code hat mich deshalb zuerst abgeschreckt, weil ich beim initialisieren nicht mit einem string gearbeitet habe, sondern eine tabelle mittels schleife durchgegangen bin und nur "nicht ausgeblendete" zellen mittels "additem" hinzugefügt habe.
aber ich konnte das problem umgehen, so sieht jetzt mein code aus:
Private Sub UserForm_Initialize()
'strListeVst wird der String, der die RowSource der Comboboxen darstellt
Dim n As Long
For n = 1 To Application.Max(Tabelle_Daten.Range("A:A"))
If Tabelle_Daten.Rows(n + 2).EntireRow.Hidden = False Then
strListeVst = strListeVst & ";" & Tabelle_Daten.Cells(n + 2, 1).Value
End If
Next n
strListeVst = strListeVst & ";" 'der String strListeVst muss am Anfang und am Ende ein ";"  _
aufweisen!
End Sub
Vielen Dank Daniel!
Ich freu mich voll! :-D
Anzeige
AW: combobox removeitem
04.09.2020 08:42:34
Oberschlumpf
Hi Jonny,
durchsuch doch, mit Übergabe der Auswahl aus der Combobox, die du (Anwender) angeklickt hat, in einer ausgelagerten Sub alle anderen Combos.
Wenn Auswahl in anderen Combos gefunden, dann RemoveItem.
Und diese Schritte wiederholst du bei jeder Anwenderauswahl aus einer der Comboboxen.
Hilfts?
Nein? Dann bitte per Upload eine Bsp-Datei mit allen Controls + Daten, wie du es hier beschrieben hast.
Ciao
Thorsten
AW: combobox removeitem
04.09.2020 09:31:42
Daniel
HI
wird mit RemoveItem und Index schwierig.
sobald du nämlich ein Element aus einer Combobox entfernt hast, ändern sich ja die Indizes im vergleich zu den anderen Boxen.
es gibt mehrere Möglichkeiten, das Problem anzugehen.
eine wäre folgende:
1. schreibe im Initialize-Event der Userform die Auswahlmöglichkeiten mit Trennzeichen getrennt in eine Modulweit gültige String-Variable (Deklaration ausßerhalb der Makros)
2. in den Drop-Button-Events der Comboboxen gehst übernimmst du dann diese String-Variable und löschst aus ihr alle Teiltexe, die schon von den andern Combobox belegt sind.
dann splittest du den Text in ein Array und weist ihn der Combobox zu.
um dir Schreibarbeit zu sparen, machst du den Schritt 2 ein einer eigenen Prozedur und rufst diese im Split-Event nur auf.
die jeweils aufrufende Combobox kann über das Objekt "ActiveControl" ermittelt werden, so dass du den Code allgemeingültig für jede Combobox schreiben kannt.
sieht als Code in etwas so aus:
Option Explicit
Dim strListeVst As String
Private Sub ComboBox1_DropButtonClick()
Call Combobox_Fill
End Sub
Private Sub ComboBox2_DropButtonClick()
Call Combobox_Fill
End Sub
Private Sub ComboBox3_DropButtonClick()
Call Combobox_Fill
End Sub
Private Sub UserForm_Initialize()
strListeVst = ";Auswahl1;Auswahl2;Auswahl3;Auswahl4;Auswahl5;"
End Sub
Private Sub Combobox_Fill()
Dim strListe As String
Dim cb As ComboBox
strListe = strListeVst
For Each cb In Me.Controls
If Not cb.Name = ActiveControl.Name Then
strListe = Replace(strListe, ";" & cb.Text & ";", ";")
End If
Next
strListe = Mid(strListe, 2, Len(strListe) - 2)
ActiveControl.List = Split(strListe, ";")
End Sub
Gruß Daniel
Anzeige
Korrektur
04.09.2020 10:39:20
Daniel
Sorry, da eine Userform in der Regel noch mehr Steuerelemente enthält, sollte man das Marko so schreiben:
Private Sub Combobox_Fill()
Dim strListe As String
Dim cb As Control
strListe = strListeVst
For Each cb In Me.Controls
If TypeName(cb) = "ComboBox" Then
If Not cb.Name = ActiveControl.Name Then
strListe = Replace(strListe, ";" & cb.Text & ";", ";")
End If
End If
Next
strListe = Mid(strListe, 2, Len(strListe) - 2)
ActiveControl.List = Split(strListe, ";")
End Sub
Gruß Daniel

50 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige