Bestimmter Bereich nur eine bestimmte Menge an Zellen eine Eintragung möglich

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Bestimmter Bereich nur eine bestimmte Menge an Zellen eine Eintragung möglich

    Hallo alle zusammen,

    ich hoffe es kann mir hier einer bei meinem Problem weiterhelfen.

    Ich möchte über VBA in einem Datenblatt in einem bestimmten Bereich sagen wir A1-A10 in nur 5 Zellen davon etwas eintragen können, möchte ich in irgendeiner 6ten Zelle etwas eintragen, dann soll eine Meldung auftauchen wie "Das ist nicht möglich" und die 6te Eintragung selbstständig entfernt. Diese Regelung soll aber auch für andere Bereich gelten z.B. B5-B15 usw.

    Zusätzlich soll die Regelung außer Kraft gesetzt werden, wenn bestimmte User in der Tabelle arbeiten (so dass sie alle Zellen von A1-A10 sowie in den anderen Bereichen etwas eintragen können).

    Ich hoffe mir kann jemand dabei helfen.

    Danke im Voraus.

    Jo

    MCJo schrieb:

    ich würde gern das ganze aber übers VBA regeln lassen
    Klar.
    Warum sollte man auch bereits vorgegebene Funktionalität nutzen.
    Die Excel-Entwickler haben das bestimmt nicht richtig durchdacht. ;)

    Natürlich kannst du versuchen, das in VBA nachzuprogrammieren.
    Du kannst im Worksheet_SelectionChange-Event den Wert merken, wie er vor der Änderung ist.
    Und im Worksheet_Change-Event entscheiden, ob du die Änderung behalten willst.
    Normale Eingaben kriegst du damit abgefangen, aber ganz wasserdicht wird das nicht.
    C&P eines ganzen Bereichs kriegst du da nicht so einfach abgefangen.
    Wenn du dir nicht einen Spiegel des Arbeitsblatts halten willst, fällt mir nur ein, ggf. Appplication.UnDo einzubeziehen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    MCJo schrieb:

    if worksheetfunction.count1(range("A1:A10")) > 5 then Target.clear
    Soll was bewirken?

    PS:
    Die Signatur ist übrigens falsch. Richtig ist:

    Visual Basic-Quellcode

    1. Sub Worksheet_Change(ByVal Target As Range)


    PPS:
    Du solltest auch überlegen, was passiert, wenn in Target die ganze Spalte steht, weil sie z,B. durch FillDown verändert wurde.
    Deswegen nur den entsprechenden Range bearbeiten!

    Visual Basic-Quellcode

    1. Private Sub Worksheet_Change(ByVal Target As Range)
    2. Dim ProtectedRange As Range
    3. Set ProtectedRange = Intersect(Target, Range("A1:A10"))
    4. If ProtectedRange Is Nothing Then Exit Sub
    5. If AnyUsefulDeleteCondition Then ProtectedRange.ClearContents
    6. End Sub
    Wenn du bei der Löschbedingung nicht aufpasst, verursachst du eine Endlosschleife, weil ​ProtectedRange.ClearContentsein neues Change-Event auslöst.

    Wie du siehst gibt's da einige Stolperfallen, die du dir durch deine DasRadNeuErfinden-Methode einhandelst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „petaod“ ()