speedy132
Goto Top

Excel Liste mit Datenüberprüfung anlegen und anschließend selektieren ????

Hallo,

ich habe in Excel eine Mitarbeiterliste erstellt.
Diese einen Namen vergeben und über Datenüberprüfung - Liste diese angesprochen.
Somit können die MA mit Hilfe der Dropdownbox ausgewählt werden.

Jetzt möchte ich aber, das wenn ich einen MA in einer Zelle ausgewählt habe, dieser in einer anderen Zelle in der Auflistung nicht mehr auftaucht, da er ja schon im Schichtplan eingetragen wurde.

Was kann ich tun?

Content-Key: 264648

Url: https://administrator.de/contentid/264648

Ausgedruckt am: 28.03.2024 um 18:03 Uhr

Mitglied: eisbein
eisbein 26.02.2015 aktualisiert um 16:09:23 Uhr
Goto Top
Hallo!

Somit können die MA mit Hilfe der Dropdownbox ausgewählt werden.

Die Auswahl erfolgt also über Dropdownbox

das wenn ich einen MA in einer Zelle ausgewählt habe, dieser in einer anderen Zelle in der Auflistung nicht mehr auftaucht,

Die Auswahl erfolgt doch wieder in einer Zelle??

Was kann ich tun?

Kannst du dein Problem etwas nachvollziehbar schildern oder sogar einen Screenshot des Arbeitsblattes bereitstellen?

Gruß
Eisbein
Mitglied: speedy132
speedy132 26.02.2015 um 16:19:56 Uhr
Goto Top
Also Zellen A1 - A5 stehen die MA
A1: Max Muster
A2: Susi Strolch
A3: Benno Böhm
A4: Angela Merkel
A5: Mario Götze

Zellen A1-A5 Namen "Mitarbeiter" vergeben
Anderes Tabellenblatt ein Schichtplan:
Früh Mittag Spät
Dort über Daten-Datenüberprüfung den Namen eingetragen und die MA mithilfe der Dropdownbox ausgewählt. Soweit klappt alles.

Jetzt aber folgendes:
sobald ich ein Namen ausgwählt habe, muss dieser jetzt in den anderen Zellen aus der Dropdownbox entfernt werden, da er ja schon eingetragen wurde. Somit vermeide ich doppelte Eintragungen.
Mitglied: eisbein
eisbein 26.02.2015 um 16:35:17 Uhr
Goto Top
Es geht also darum den Inhalt der Dropdownbox (oder mehreren) dynamisch zu verändern, um den aktuell ausgewählten Namen (Mitarbeiter) aus der Dropdownbox-Liste zu entfernen?
Mitglied: speedy132
speedy132 26.02.2015 um 16:42:04 Uhr
Goto Top
ich denke so kann man das nennen
Mitglied: eisbein
eisbein 26.02.2015 um 16:56:38 Uhr
Goto Top
Nun, das Problem bei Dropdown ist, dass der Inhalt nur bedingt dynamisch verändert werden kann, da er an einen Bereich gebunden ist.

Was allerdings möglich wäre - das Tabellenblatt nach der aktuellen Auswahl im Dropdown zu durchsuchen und bei Erfolg eine Nachricht auszugeben und die Auswahl zu verweigern.

Dazu verweise ich mal -> http://www.ms-office-forum.net/forum/showthread.php?t=169590
Mitglied: speedy132
speedy132 26.02.2015 um 17:08:50 Uhr
Goto Top
erstmal danke für den Hinweis, der allerdings mich nicht weiter bringt.
Es muss doch auch in excel möglich sein das hinzubekommen. evtl mit indirekt oder so....
Mitglied: eisbein
eisbein 26.02.2015 aktualisiert um 17:22:27 Uhr
Goto Top
Ich habe doch etwas gefunden.

Du musst allerdings das ActiveX-Steuerelent "Combobox" oder "Listenfeld" verwenden.
Diesem kann man dann mittels .addItem Werte zuweisen und mit .removeItem wieder entfernen.

Gruß
Eisbein
Mitglied: eisbein
eisbein 26.02.2015 aktualisiert um 17:41:43 Uhr
Goto Top
Ich habe also ein ActiveX "Combobox23" erstellt

Private Sub ComboBox23_Click()
    Dim i As Byte
    i = ComboBox23.ListIndex
    ComboBox23.RemoveItem (i)
End Sub

Private Sub Worksheet_Activate()
    ComboBox23.AddItem "Haus"  
    ComboBox23.AddItem "Scheune"  
    ComboBox23.AddItem "Hütte"  
    ComboBox23.AddItem "Serverraum"  
End Sub

Eine Schleife für AddItem wäre in deinem Fall sinnvoll face-smile
Mitglied: 116301
Lösung 116301 01.03.2015, aktualisiert am 02.03.2015 um 14:21:01 Uhr
Goto Top
Hallo speedy132!

Der Einfachheit halber hätte ich persönlich, wie bereits vorgeschlagen, auch nur eine entsprechende Meldung ausgegeben. Für Deine Idee mit der Auswahlbeschränkung, bedarf es schon etwas mehr Aufwand, um dies Umzusetzen.face-wink

Hier mal eine Möglichkeit, wie man dies per Code im Tabellenblatt Schichtplan umsetzen könnte:
Option Explicit
Option Compare Text

'Mit dieser Function wird die temporäre Mitarbeiterliste nach jeder DropDown-Änderung automatisch angepasst  
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim oWks As Worksheet, oCell As Range, oFound As Range
    Dim sName As Variant, iOffset As Long, sFormula1 As String
    
    On Error Resume Next
    For Each oCell In Target
        sFormula1 = oCell.Validation.Formula1
        
        If sFormula1 Like "=Indirekt(TempBezug)" Then  
            Set oWks = GetSheet("Mitarbeiter")  
            
            If Not oWks Is Nothing Then
                Application.EnableEvents = False
                Range("TempListe").CurrentRegion.ClearContents  
                For Each sName In oWks.Range("Mitarbeiter").Value  
                    Set oFound = ActiveSheet.UsedRange.Find(sName, LookIn:=xlValues, LookAt:=xlWhole)
                    
                    If oFound Is Nothing Then
                        Range("TempListe").Offset(iOffset, 0).Value = sName:  iOffset = iOffset + 1  
                    End If
                Next
                Range("TempBezug").Value = Range("TempListe").CurrentRegion.Address  
                Application.EnableEvents = True
            End If
            Exit For
        End If
    Next
    On Error GoTo 0
End Sub

'Diese Function gibt das Sheet-Object des übergebenen Zell-Namens zurück,  
'sofern die erforderlichen Zell-Namen im Namens-Manager definiert sind.  
Public Function GetSheet(ByRef sCellName) As Worksheet
    Dim sName As Variant, bError As Boolean
    
    On Error Resume Next
    With ThisWorkbook
        For Each sName In Array("Mitarbeiter", "TempListe", "TempBezug")  
            If IsError(.Names(sName)) Then
                bError = True:  Exit For
            End If
        Next
        
        If Not bError Then
            Set GetSheet = Sheets(Split(Mid(.Names(sCellName).Value, 2), "!")(0))  
        End If
    End With
    On Error GoTo 0
End Function
Nachdem der Code in das entsprechende Tabellenblatt (Schichtplan) kopiert wurde, sind anschließend noch folgende Schritte auszuführen:

Schritt 1:
Zellbereich der Mitarbeiter im Tabellenblatt mit den Mitarbeitern definieren > Name = Mitarbeiter

Schritt 2:
Im Tabellenblatt mit dem Schichtplan am Ende eine freie Spalte auswählen, in der sich angrenzend Links und Rechts eine Leerspalte befindet z.B. Spalte X, dann erhält die Zelle X1 den Namen "TempBezug" und die Zelle X3 den Namen "TempListe". Nachdem die Namen vergeben sind, können diese Spalten ausgeblendet werden.

Schritt 3:
Im Tabellenblatt mit dem Schichtplan, in der Gültigkeitsregel die Quelle für die Mitarbeiterliste anpassen "=Indirekt(TempBezug)" und die anschließende Meldung mit "Ja" bestätigen.

Schritt 5:
Nachdem die vorigen Schritte ausgeführt wurden, muss die temporäre Mitarbeiterliste noch einmalig initialisiert werden, was durch einmaliges Drücken der Entf-Taste in einer beliebigen DropDown-Zelle geschieht...

Grüße Dieter
Mitglied: speedy132
speedy132 02.03.2015 um 14:21:14 Uhr
Goto Top
Herzlichen Dank Dieter,

genauso so etwas habe ich gesucht face-smile

Habe das jetzt mit verschiedenen Abteilungen durchgespielt und es funktioniert alles einwandfrei.

Super....