Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zellen sperren, wenn andere Zelle leer

Zellen sperren, wenn andere Zelle leer
29.03.2005 20:20:53
Patrick
Hallo zusammen,
ist es möglich, dass man Zellen automatisch für die Eingabe sperrt und auf den Wert "0" setzt, wenn eine andere Zelle keinen Inhalt hat?
Beispiel:
Wenn C1=""; dann D1 sperren und Wert="0"
Wenn C2=""; dann D2 sperren und Wert="0"
usw.
Am Besten als Makro, welches die Änderung sofort übernimmt, da das dann für ca. 200-250 Zeilen in dem Blatt funktionieren müßte.
Gruß
Patrick
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen sperren, wenn andere Zelle leer
29.03.2005 20:37:00
Luc
Hallo Patrick,
das geht nur unter bestimmten Voraussetzungen:
1.das Tabellenblatt muss geschützt sein (nur userinterface)
2.die Zellen, die bearbeitet werden sollen, müssen ungesperrt sein
3.ein VBA-Programm muss auf das Arbeitsblatt-Ereignis Change reagieren, die relevanten Zellen prüfen und die zu sperrenden Zellen sperren bzw die Sperrung wieder aufheben.
Gruß Luc :-?
Anzeige
AW: Zellen sperren, wenn andere Zelle leer
29.03.2005 20:48:39
Patrick
Hallo Luc,
zu 1.das Tabellenblatt muss geschützt sein (nur userinterface)
- ja, ist es, da noch andere Bereiche dauerhaft geschützt sein sollen
2.die Zellen, die bearbeitet werden sollen, müssen ungesperrt sein
- die Zellen ohne Wert (C1) werden nur entsperrt, wenn ich sie bearbeite. Für andere sollen sie gesperrt bleiben. D1 bleibt offen, solange der Wert in C1 angegeben ist.
(Zur Info: in C1 stehen Artikelnummern drin, die erst bei Verfügbarkeit des Artikels feststehen. Deshalb müssen die nur zeitweise entsperrt werden. In D1 steht die Anzahl für den Artikel.)
3.ein VBA-Programm muss auf das Arbeitsblatt-Ereignis Change reagieren, die relevanten Zellen prüfen und die zu sperrenden Zellen sperren bzw die Sperrung wieder aufheben.
- ok, soweit komme ich auch, aber dann...
Gruß
Patrick
Anzeige
AW: Zellen sperren, wenn andere Zelle leer
29.03.2005 21:35:58
Patrick
Hallo Luc,
zu 1.das Tabellenblatt muss geschützt sein (nur userinterface)
- ja, ist es, da noch andere Bereiche dauerhaft geschützt sein sollen
2.die Zellen, die bearbeitet werden sollen, müssen ungesperrt sein
- die Zellen ohne Wert (C1) werden nur entsperrt, wenn ich sie bearbeite. Für andere sollen sie gesperrt bleiben. D1 bleibt offen, solange der Wert in C1 angegeben ist.
(Zur Info: in C1 stehen Artikelnummern drin, die erst bei Verfügbarkeit des Artikels feststehen. Deshalb müssen die nur zeitweise entsperrt werden. In D1 steht die Anzahl für den Artikel.)
3.ein VBA-Programm muss auf das Arbeitsblatt-Ereignis Change reagieren, die relevanten Zellen prüfen und die zu sperrenden Zellen sperren bzw die Sperrung wieder aufheben.
- ok, soweit komme ich auch, aber dann...
Gruß
Patrick
Anzeige
AW: Zellen sperren, wenn andere Zelle leer
30.03.2005 11:19:39
Luc
Hallo Patrick,
du kannst mir bis zur Ereignisprozedur Worksheet_Change im Arbeitsblatt(klassen)modul folgen?! Hast du VBA-Kenntnisse? Angegeben hast du Nein. Deine ersten VBA-Erfahrungen solltest du nicht unbedingt mit Ereignisprozeduren sammeln wollen. Die laufen nämlich in Abhängigkeit vom sie auslösenden Ereignis automatisch - ungewollte Endlosschleifen durch Selbstaufruf werden so sehr leicht möglich.
Ansonsten brauchst du einen Zyklus (For- bzw For-Each-Schleife), in dem die relevanten Zellen auf ihren Inhalt geprüft wdn und davon abhängig die .Locked-Eigenschaft der zu (ent-)sperrenden Zelle auf True (False) gesetzt wird:

Dim i As Long
For i = 1 To anzahlzeilen
If Cells(i, 3).Value = "" Then
Range(Cells(i, 3)).Locked = False
Range(Cells(i, 4)).Locked = True
Else
Range(Cells(i, 3)).Locked = True
Range(Cells(i, 4)).Locked = False
End If
Next i 

...oder falls die Markierung des betroffenen Bereichs bevorzugt wird...

Dim zelle As Range
For Each zelle In ActiveWindow.RangeSelection
If zelle.Value = "" Then
zelle.Locked = False
zelle.Offset(0, 1).Locked = True
Else
zelle.Locked = True
zelle.Offset(0, 1).Locked = False
End If
Next zelle 

Das Ganze funktioniert in eine Prozedur (sub) eines Standardmoduls verpackt bei Aufruf, in die o.g. Ereignisprozedur geschrieben automatisch bei Blattänderung. Lies unbedingt in der Online-Hilfe des Makro-Editors nach, bevor du den (nicht vollständigen!) Code einsetzt.
Gruß Luc :-?
Anzeige
AW: Zellen sperren, wenn andere Zelle leer
30.03.2005 20:57:12
Patrick
Hallo Luc,
mit VBA ansich habe ich tatsächlich recht wenig Erfahrung. Allerdings habe ich Erfahrungen in anderen Scriptsprachen, wie bspw. PHP und kenne daher durchaus die Macht von Prozeduren und Schleifen.
Es ist auch nicht so, dass ich Deinen VBA-Code nicht verstehe, mir fehlt es hauptsächlich an den entsprechenden Ausdrücken und Befehlen. Leider ist die VBA Hilfe in Excel nicht immer sehr schlüssig für Leute, die es erst erlernen müssen.
Es ist nicht so, dass ich zu faul bin es zu lernen, aber um genau das zu vermeiden was Du oben erwähnt hast. Wäer es natürlich gut, wenn Du dann nicht unebdingt Codeteile hinterlegst, sondern auch noch die letzten paar Zeilen einfügst.
Ich denke, dass ich Deinen Code vervollständigen kann; es wird aber mit Sicherheit auch Forenteilnehmer geben, die es nicht können und dann sollte man hier kein Halbwissen stehen lassen...
Gruß
Patrick
Anzeige
Das sehe ich anders (s.a. OffTopic)! -- owT
31.03.2005 10:15:22
Luc
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zellen sperren, wenn andere Zelle leer


Schritt-für-Schritt-Anleitung

Um Zellen in Excel zu sperren, wenn eine andere Zelle leer ist, kannst Du ein VBA-Makro verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

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

  2. Wähle das Arbeitsblatt aus, auf dem Du die Zellen sperren möchtest (z. B. "Tabelle1").

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

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim i As Long
       Dim anzahlzeilen As Long
    
       anzahlzeilen = 250 ' Anzahl der Zeilen, die Du prüfen möchtest
    
       For i = 1 To anzahlzeilen
           If Cells(i, 3).Value = "" Then
               Cells(i, 3).Locked = False
               Cells(i, 4).Locked = True
           Else
               Cells(i, 3).Locked = True
               Cells(i, 4).Locked = False
           End If
       Next i
    
       Me.Protect "DeinPasswort" ' Blatt schützen
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Schütze das Arbeitsblatt, indem Du auf „Überprüfen“ und dann auf „Blatt schützen“ klickst. Achte darauf, dass die Option „Benutzerschnittstelle schützen“ aktiviert ist.

Jetzt werden die Zellen in Spalte D automatisch gesperrt und auf "0" gesetzt, wenn die Zellen in Spalte C leer sind.


Häufige Fehler und Lösungen

  • Fehler: Die Zellen werden nicht gesperrt.

    • Stelle sicher, dass das Blatt geschützt ist und die Zellen, die bearbeitet werden sollen, ungesperrt sind.
  • Fehler: Der Code funktioniert nicht wie erwartet.

    • Überprüfe, ob der Code korrekt im entsprechenden Arbeitsblattmodul eingefügt wurde.
  • Fehler: Endlosschleifen im VBA-Code.

    • Achte darauf, dass die Ereignisprozedur nicht sich selbst aufruft. Verwende Application.EnableEvents = False und Application.EnableEvents = True, um dies zu verhindern.

Alternative Methoden

Wenn Du keine VBA-Makros verwenden möchtest, kannst Du auch Datenüberprüfung nutzen, um die Eingabe in Zellen zu steuern:

  1. Wähle die Zelle D1 aus.
  2. Gehe zu „Daten“ > „Datenüberprüfung“.
  3. Wähle „Benutzerdefiniert“ und gebe die folgende Formel ein:
    =C1<>""
  4. Setze die Fehlermeldung, um den Benutzer zu informieren, dass die Zelle gesperrt ist, wenn C1 leer ist.

Diese Methode bietet jedoch nicht die gleiche Flexibilität wie VBA.


Praktische Beispiele

Angenommen, Du möchtest in einem Lagerverwaltungssystem die Eingabe von Bestellmengen in Spalte D steuern, basierend auf den Artikelnummern in Spalte C:

  • Wenn C1 (Artikelnummer) leer ist, wird D1 (Bestellmenge) gesperrt und auf "0" gesetzt.
  • Der VBA-Code sorgt dafür, dass dies für bis zu 250 Zeilen funktioniert.

Tipps für Profis

  • Nutze die Offset-Methode, um benachbarte Zellen flexibler zu bearbeiten.

    zelle.Offset(0, 1).Locked = True ' Sperrt die nächste Zelle rechts
  • Teste den Code regelmäßig, um sicherzustellen, dass alles reibungslos funktioniert.

  • Verwende Debug.Print im VBA-Code, um den Ablauf zu überwachen und Fehler schneller zu identifizieren.


FAQ: Häufige Fragen

1. Wie kann ich das Makro schnell ausführen? Du kannst das Makro auch an ein Steuerelement wie einen Button binden, um es bei Bedarf auszuführen.

2. Was mache ich, wenn ich VBA nicht verstehe? Es gibt viele Tutorials und Ressourcen online, die helfen, die Grundlagen von VBA zu erlernen. Übung macht den Meister!

3. Ist es möglich, die Zellen trotzdem zu bearbeiten, wenn sie gesperrt sind? Nein, gesperrte Zellen können nicht bearbeitet werden, solange das Arbeitsblatt geschützt ist.

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