Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zelle sperren, wenn bestimmter Wert eingetragen

Zelle sperren, wenn bestimmter Wert eingetragen
18.12.2013 12:03:19
Sören
Hallo Forengemeinde,
ich habe mal wieder ein Problem bzgl. einer Excel Tabelle, die bei uns als Terminliste genutzt wird.
Die Tabelle ist mit einem Blattschutz versehen, welcher über eine Checkbox (chkPS) gesteuert wird. Ist der Haken drin, ist der Blattschutz aktiviert.
Ein Terminblock ist wie folgt aufgebaut (Zellen beispielhaft):
Zelle AA = Wert zwecks Einfärbung (bedingte Formatierung), ob Termin im roten/gelben/grünen Bereich
Zelle AB = der Termin an sich
Zelle AC = Differenz zum vorherigen Termin bei Änderung
Die Zelle AB ist nicht durch den Blattschutz geschützt, da die Bearbeiter den Termin ändern können sollen. Es sei denn, der Termin ist als bearbeitet deklariert, dann wird in Zelle AA ein x geschrieben.
Sobald in Zelle AA ein x steht, möchte ich die Zelle AB geschützt haben, also kann der dort eingetragene Termin nicht mehr geändert werden.
Kann mir jemand dabei helfen?
Ich habe schon ein Code ausprobiert, dieser hilft mir aber nicht weiter:

Private Sub Workbook_SheetChange(ByVal Tabellenblatt As Object, ByVal Target As Excel.Range)
'Zellen mit Formeln werden vor Überschreiben
'geschützt, ohne den Blattschutz aktivieren zu müssen
Dim WertAktuell()
Dim rngArea As Range
Dim rngAZ As Range
Dim rngZelle As Range
Dim lngZ As Long
Set rngAZ = ActiveCell
On Error GoTo Ende
Application.EnableEvents = False
Select Case Tabellenblatt.Name
Case "Tabelle8", "Tabelle9" 'diese Tabellenblätter stehen hier nur als Dummy falls dies spä _
ter gebraucht wird..
'die Formeln dieser Tabellen werden nicht geschützt
Case Else
'die Auswahl ließe sich durch das Entfernen von 'Case Else' umkehren
ReDim WertAktuell(1 To Target.Cells.Count)
For Each rngArea In Target.Areas
For Each rngZelle In rngArea.Cells
lngZ = lngZ + 1
WertAktuell(lngZ) = rngZelle.Value
Next rngZelle
Next rngArea
lngZ = 0
'BLATTSCHUTZ ohne BLATTSCHUTZ:
If Worksheets("Termine").chkPS = True Then
Application.Undo ' "x" And Worksheets("Termine").chkPS = True  _
Then
rngZelle = WertAktuell(lngZ) '

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zelle sperren, wenn bestimmter Wert eingetragen
18.12.2013 15:32:25
Sören
Hallo zusammen,
anscheinend habe ich das Problem gelöst, zumindest haben die ersten Testeinträge ein positives Ergebnis mit sich gebracht.
Etwas abgespeckt der Code :)

Private Sub Workbook_SheetChange(ByVal Tabellenblatt As Object, ByVal Target As Excel.Range)
'Zellen mit Formeln werden vor Überschreiben
'geschützt, ohne den Blattschutz aktivieren zu müssen
Dim WertAktuell()
Dim rngArea As Range
Dim rngAZ As Range
Dim rngZelle As Range
Dim lngZ As Long
Set rngAZ = ActiveCell
On Error GoTo Ende
Application.EnableEvents = False
For Each rngArea In Target.Areas
For Each rngZelle In rngArea.Cells
lngZ = lngZ + 1
If rngZelle.Locked = False Then
If rngZelle.Offset(0, -1).Value  "x" And Worksheets("Termine").chkPS = True  _
Then
rngZelle = WertAktuell(lngZ)
Else
Application.Undo
End If
End If
Next rngZelle
Next rngArea
rngAZ.Activate
Ende:
Application.EnableEvents = True
End Sub
Gruß
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zelle sperren, wenn bestimmter Wert eingetragen


Schritt-für-Schritt-Anleitung

Um eine Zelle in Excel zu sperren, wenn ein bestimmter Wert in einer anderen Zelle eingetragen wird, kannst Du den folgenden VBA-Code verwenden. Dieser Code wird in das entsprechende Arbeitsblatt eingefügt:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Wähle das Arbeitsblatt aus, in dem Du die Zelle sperren möchtest.

  3. Füge den folgenden Code in das Codefenster ein:

    Private Sub Workbook_SheetChange(ByVal Tabellenblatt As Object, ByVal Target As Excel.Range)
       Dim rngZelle As Range
       On Error GoTo Ende
       Application.EnableEvents = False
    
       For Each rngZelle In Target
           If rngZelle.Offset(0, -1).Value = "x" Then
               rngZelle.Locked = True
           Else
               rngZelle.Locked = False
           End If
       Next rngZelle
    
    Ende:
       Application.EnableEvents = True
    End Sub
  4. Schließe den VBA-Editor und speichere die Datei als Excel-Arbeitsmappe mit Makros (Dateiendung .xlsm).

  5. Aktiviere den Blattschutz, um die Sperrfunktion zu aktivieren.

Mit diesem Code wird die Zelle AB gesperrt, wenn in Zelle AA ein "x" eingetragen wird.


Häufige Fehler und Lösungen

  • Fehler: Zellen werden nicht gesperrt.

    • Lösung: Stelle sicher, dass der Blattschutz aktiviert ist. Der Code funktioniert nur, wenn der Blattschutz aktiv ist.
  • Fehler: Makros werden nicht ausgeführt.

    • Lösung: Überprüfe die Excel-Einstellungen und stelle sicher, dass die Makros aktiviert sind.

Alternative Methoden

Eine alternative Methode zur Sperrung von Zellen ist die Verwendung von Datenvalidierung. Du kannst eine Eingabemaske erstellen, die bestimmte Werte nicht zulässt, aber dies ist nicht so flexibel wie VBA.

  1. Wähle die Zelle aus, die Du einschränken möchtest.
  2. Gehe zu Daten > Datenüberprüfung.
  3. Wähle "Benutzerdefiniert" und gebe eine Formel ein, um die Eingabe zu validieren.

Diese Methode ist jedoch nicht so effektiv, wenn es darum geht, Zellen dynamisch zu sperren.


Praktische Beispiele

Angenommen, Du hast die Zellen wie folgt konfiguriert:

  • Zelle AA1: Hier wird ein "x" eingetragen.
  • Zelle AB1: Hier wird der Termin eingetragen, der gesperrt werden soll.

Wenn Du in Zelle AA1 ein "x" einträgst, wird die Zelle AB1 gesperrt, sodass der Termin nicht mehr verändert werden kann.


Tipps für Profis

  • Verwende Kommentare: Füge Kommentare zu den Zellen hinzu, um den Benutzern klar zu machen, warum bestimmte Zellen gesperrt sind.
  • Testen: Teste Deine Änderungen in einer Kopie der Datei, bevor Du sie in der Produktionsdatei anwendest, um unerwünschte Effekte zu vermeiden.
  • Ereignisprozeduren: Nutze andere Ereignisprozeduren wie Workbook_Open oder Workbook_BeforeClose, um die Sicherheit Deiner Daten weiter zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich die Sperrung wieder aufheben?
Du kannst die Sperrung aufheben, indem Du in Zelle AA den Wert von "x" entfernst. Die Zelle AB wird dann wieder entsperrt.

2. Funktioniert das in allen Excel-Versionen?
Ja, dieser VBA-Code sollte in Excel 2010 und neueren Versionen problemlos funktionieren. Achte darauf, dass Makros aktiviert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige