verbundene Zellen nach Eingabe sperren

  • Excel

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von roddy.

    verbundene Zellen nach Eingabe sperren

    Hallo Experten,

    ich habe eine Messwerttabelle die gefüllt wird. Nach jeder Eingabe eines Wertes soll die jeweilige Zelle gesperrt werden.

    Als Neuling im VBA-Geschäft habe ich im Internet recherchiert und folgenden Code gefunden.
    Private Sub Worksheet_Change(ByVal Target As Range)
    '################################################################################

    'Code sperrt die Zelle in die eine Eingabe gemacht wurde
    Dim rngCell As RangeSet Target = Intersect(Target, Range("C14:T85"))

    If Target Is Nothing Then Exit SubMe.Unprotect ("test")For Each rngCell In Target
    rngCell.Locked = rngCell <> "" 'an dieser Zeile bleibt er hängen!
    NextMe.Protect ("test")
    End Sub

    Habe diesen Code nur mit dem entsprechenden Zellbereich erweitert, welcher für mich relevant ist. Der Code funktioniert auch soweit, nur bei verbundenen Zellen (Zellen aus mehreren Einzelzellen) bekomme ich einen Fehlermeldung „Laufzeitfehler 1004; Die Locked-Eigenschaft des Range-Objektes kann nicht festgelegt werden.

    Habe im Internet schon nach einer Lösungsmöglichkeit gesucht, diesen Fehler zu beseitigen aber habe nichts gefunden.

    Ich wäre euch sehr dankbar, wenn mir jemand sagen könnte, was ich in diesem Code ändern müsste, damit er mir auch verbundene Zellen sperrt.

    Vielen Dank schon mal für eure Hilfe.
    Ohne es jetzt zu testen. Hasu Du schon probiert, dass er die Fehler einfach überspingt?

    Visual Basic-Quellcode

    1. private sub test
    2. on error resume next
    3. eigentliche sub
    4. ..
    5. ..
    6. ..
    7. err.clear
    8. on error goto 0
    9. end sub
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Hallo peterfido,

    erst einmal vielen dank für deine Hilfe. Ich habe den Quellcode nun wie folgt geändert.

    Visual Basic-Quellcode

    1. Private Sub Worksheet_Change(ByVal Target As Range)
    2. '################################################################################
    3. 'Code sperrt die Zelle in die eine Eingabe gemacht wurde
    4. Dim rngCell As Range
    5. Set Target = Intersect(Target, Range("C14:T85"))
    6. If Target Is Nothing Then Exit Sub
    7. Me.Unprotect ("test")
    8. For Each rngCell In Target
    9. On Error Resume Next
    10. Err.Clean
    11. On Error GoTo Sprungmarke
    12. rngCell.Locked = rngCell <> ""
    13. Sprungmarke:
    14. Next
    15. Me.Protect ("test")
    16. End Sub


    Jetzt wird der Fehler übersprungen aber die Zelle nicht gesperrt. Gibt es trotzdem eine Möglichkeit wie die Zelle nach der Eingabe gesperrt werden kann?

    Habe noch eine Frage....

    Ist es möglich den Quellcode so zu erweitern, das wenn ein Eintrag doch geändert werden muss, ein Fenster geöffnet wird, in das das Passwort eingegeben werden kann.

    Bin für jede Hilfe in dieser Richtung sehr Dankbar.

    mfg Ronny

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ronny.s85“ ()

    Zunächst einmal:

    Verwende "On Error" nur im Notfall bzw. nur wenn es wirklich erwünscht ist, im Fall eines Fehlers den Befehl zu überspringen (Das geht dann einfach mit der Zeile "On Error Resume Next").

    Was die verbundenen Zellen angeht:

    Schreibe anstelle dieser Zeile:

    Visual Basic-Quellcode

    1. rngCell.Locked = rngCell <> ""


    dieses:

    Visual Basic-Quellcode

    1. rngCell.Select
    2. Selection.Locked = rngCell <> ""


    rngCell ist eine einzelne Zelle. Wenn Zellen verbunden sind, lassen sich bestimmte Methoden nur mit dem Zellbereich, den die verbundenen Zellen darstellen, ansprechen. Durch "rngCell.Select" wird die Zelle ausgewählt und somit der verbundene Zellbereich. "Selection" ist dann dieser Zellbereich, worauf dann ohne Fehlermeldung auf die Locked-Eigenschaft zugegriffen werden kann.