Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1292to1296
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
Eintrag aus allen übrigen Comboboxen löschen
02.01.2013 15:04:12
Mexsalem
Hallo liebe Excelaner,
ich habe in einer Userform ca. 40 Comboboxen, die ich zuerst mit folgenden Einträgen initialisiere.
Private Sub UserForm_Initialize()
Dim i As Integer, iSpaltenname As Integer
Dim sAddress As String
'1.Combobox mit den Tabellennamen füllen
cbo_Zieltabelle.Clear
For i = 1 To Worksheets.Count
cbo_Zieltabelle.AddItem Worksheets(i).Name
Next
cbo_Zieltabelle.ListIndex = 0
'Jede weitere ComboBox mit den Spaltennamen füllen
' nur alle sichtbaren Spalten des UsedRange ermitteln
' und als Eintrag in ComboBox mit oder ohne Spalten-
' überschrift übernehmen
For Each ctrl In Controls
If TypeName(ctrl) = "ComboBox" And _
ctrl.Name  "cbo_Zieltabelle" Then
ctrl.AddItem "Bitte Spalte auswählen" '
For iSpaltenname = 1 To ActiveSheet.UsedRange.Columns.Count
If ActiveSheet.Cells(1, iSpaltenname)  "" And _
ActiveSheet.Columns(iSpaltenname).Hidden = False Then
sAddress = ActiveSheet.Cells(1, iSpaltenname).Address
sAddress = Mid(sAddress, InStr(sAddress, "$") + 1, _
InStr(2, sAddress, "$") - 2)
ctrl.AddItem "Spalte " & sAddress & " - " & _
ActiveSheet.Cells(1, iSpaltenname)
ElseIf ActiveSheet.Columns(iSpaltenname).Hidden = False Then
sAddress = ActiveSheet.Cells(1, iSpaltenname).Address
sAddress = Mid(sAddress, InStr(sAddress, "$") + 1, _
InStr(2, sAddress, "$") - 2)
ctrl.AddItem "Spalte " & sAddress
End If
Next iSpaltenname
End If
Next ctrl
End Sub
Ich möchte gerne erreichen, dass der Anwender nach der getätigten Auswahl der gewünschten Spalte, in den übrigen Comboboxen diese Spalte nicht mehr auswählen kann.
Die Comboxen befinden sich sowohl innerhalb, als auch ausserhalb eines Frames.
Mein bisheriger Ansatz den Eintrag zu löschen scheitert leider, kann mir jemand helfen ? Der Aufruf erfolgt aus allen Comboboxen über das Change-Ereignis und ruft eine Function auf :
Private Sub cbo_IndividuellerName_Change()
AusgewähltenEintragLöschen IndividuellerName
End Sub
Function AusgewähltenEintragLöschen(ActiveCombobox)
Dim MyListIndex
Dim ctrl As Object
MyListIndex = ActiveCombobox.ListIndex
If MyListIndex > -1 Then
For Each ctrl In Me.Controls
If TypeName(ctrl) = "ComboBox" And _
ctrl.Name  ActiveCombobox And _
ctrl.Name  "cbo_Zieltabelle" And _
ctrl.Enabled = True Then
ctrl.RemoveItem MyListIndex
' verursacht Laufzeitfehler 80004005 :
' "Nicht näher bezeichneter Fehler"
End If
Next ctrl
End If
End Function
Beste Grüße
Mexsalem

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

Betreff
Datum
Anwender
Anzeige
AW: Eintrag aus allen übrigen Comboboxen löschen
02.01.2013 16:44:06
Peter
Hallo Mexsalem,
warum setzt Du den ListIndex der Comboboxes nicht einfach auf -1 oder aber "Clearst" die ComboBoxes?
Gruß Peter

AW: Eintrag aus allen übrigen Comboboxen löschen
02.01.2013 18:08:29
Mexsalem
Hallo Peter,
der Anwender soll keine "geclearte"/leere Comboboxen bekommen, sondern nur den Eintrag, den er in einer anderen Combobox bereits ausgewählt nicht mehr in den anderen Comboboxen als Auswahl angezeigt bekommen.
Es geht konkret darum, dass mit den Comboboxen Spalten für spätere Eintragungen definiert werden sollen. D.h. WerteABC (Combobox1) kommen in Spalte A , dann darf keine Auswahl für die WerteDEF (Combobox2) auch in Spalte A möglich sein.
Gruß
Mexsalem

Anzeige
AW: Eintrag aus allen übrigen Comboboxen löschen
06.01.2013 10:09:40
fcs
Hallo Mexsalem,
der einfachste Weg dürfte dann sein, die Spaltentitel und deren Status(gewählt ja/nein) in Datenarrays zu verwalten.
Nach jeder Auswahl in einer Combobox werden dann die Auswahllisten der anderen ComboBoxen aktualisiert.
Gruß
Franz
Option Explicit
Private arrItemsList(), arrItemsSelected() As Boolean
Private bolUpdate_cbo As Boolean 'Merker zur Steuerung des Ablaufs beim Aktualisieren
' der ComboBox-Auswahllisten
Function AusgewähltenEintragLöschen(ActiveCombobox As String)
Dim MyListIndex, myListItem
Dim ctrl As Object, iItem As Integer, arrList(), iI As Integer
MyListIndex = Me.Controls(ActiveCombobox).ListIndex
If MyListIndex > -1 Then
'Selektierten Eintrag in der aktiven cbo im Array auf True setzen oder alle _
Einträge der Liste auf False setzen wenn 0. Eintrag ("Bitte Spalte auswählen") _
gewählt wurde
myListItem = Me.Controls(ActiveCombobox).Value
For iItem = 1 To UBound(arrItemsList)
For iI = 0 To Me.Controls(ActiveCombobox).ListCount - 1
If arrItemsList(iItem) = Me.Controls(ActiveCombobox).List(iI, 0) Then
If arrItemsList(iItem) = myListItem Then
If MyListIndex  0 Then arrItemsSelected(iItem) = True
Else
arrItemsSelected(iItem) = False
End If
End If
Next
Next
bolUpdate_cbo = True 'Merker setzen, dass Comboboxen-Auswahlllisten aktualisiert werden
'Aktualisieren der AUswahllisten in den anderen Comboboxen
For Each ctrl In Me.Controls
If TypeName(ctrl) = "ComboBox" And _
ctrl.Name  ActiveCombobox And _
ctrl.Name  "cbo_Zieltabelle" And _
ctrl.Enabled = True Then
'aktuelle Auswahl/Listindex der Combobox merken
myListItem = ""
MyListIndex = ctrl.ListIndex
If MyListIndex  -1 Then myListItem = ctrl.Value
'Array für Auswahlliste initialisieren
iI = -1
Erase arrList
'alle wählbaren Einträge + den aktiven Wert der Combobox in Datenarray übernehmen
For iItem = 0 To UBound(arrItemsList)
If arrItemsSelected(iItem) = False Or myListItem = arrItemsList(iItem) Then
iI = iI + 1
ReDim Preserve arrList(0 To iI)
arrList(iI) = arrItemsList(iItem)
End If
Next iItem
'neue Auswahlliste der Combobox zuweisen
ctrl.List = arrList
'Wert der Combobox auf gemerkten Wert setzen
If myListItem  "" Then ctrl.Value = myListItem
End If
Next ctrl
Erase arrList
bolUpdate_cbo = False 'Merker zurücksetzen, dass Comboboxen-Auswahlllisten aktualisiert  _
werden
End If
End Function
Private Sub cmbAbbrechen_Click()
'Abbrechen/Schliessen-Schaltfläche
Erase arrItemsList, arrItemsSelected
Unload Me
End Sub
Private Sub ComboBox1_Change()
If bolUpdate_cbo = True Then Exit Sub
AusgewähltenEintragLöschen "ComboBox1"
End Sub
Private Sub ComboBox2_Change()
If bolUpdate_cbo = True Then Exit Sub
AusgewähltenEintragLöschen "ComboBox2"
End Sub
'usw.
Private Sub UserForm_Initialize()
Dim i As Integer, iSpaltenname As Integer
Dim sAddress As String
Dim ctrl As Control
'1.Combobox mit den Tabellennamen füllen
cbo_Zieltabelle.Clear
For i = 1 To Worksheets.Count
cbo_Zieltabelle.AddItem Worksheets(i).Name
Next
cbo_Zieltabelle.ListIndex = 0
'Jede weitere ComboBox mit den Spaltennamen füllen
' nur alle sichtbaren Spalten des UsedRange ermitteln
' und als Eintrag in ComboBox mit oder ohne Spalten-
' überschrift übernehmen
i = 0
ReDim arrItemsList(0 To 0)
arrItemsList(0) = "Bitte Spalte auswählen" '
For iSpaltenname = 1 To ActiveSheet.UsedRange.Columns.Count
If ActiveSheet.Columns(iSpaltenname).Hidden = False Then
i = i + 1
ReDim Preserve arrItemsList(0 To i)
sAddress = ActiveSheet.Cells(1, iSpaltenname).EntireColumn.Address _
(Columnabsolute:=False, Rowabsolute:=False, ReferenceStyle:=xlA1)
sAddress = Left(sAddress, InStr(sAddress, ":") - 1)
arrItemsList(i) = "Spalte " & sAddress
If ActiveSheet.Cells(1, iSpaltenname)  "" Then
arrItemsList(i) = arrItemsList(i) & " - " & ActiveSheet.Cells(1, iSpaltenname)
End If
End If
Next iSpaltenname
ReDim arrItemsSelected(0 To UBound(arrItemsList))
For Each ctrl In Controls
If TypeName(ctrl) = "ComboBox" And _
ctrl.Name  "cbo_Zieltabelle" Then
ctrl.List = arrItemsList
End If
Next ctrl
End Sub

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige