Herbers Excel-Forum - das Archiv

Zellen sperren, wenn andere Zelle leer

Bild

Betrifft: Zellen sperren, wenn andere Zelle leer
von: Patrick

Geschrieben am: 29.03.2005 20:20:53
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
Bild

Betrifft: AW: Zellen sperren, wenn andere Zelle leer
von: Luc :-?

Geschrieben am: 29.03.2005 20:37:00
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 :-?
Bild

Betrifft: AW: Zellen sperren, wenn andere Zelle leer
von: Patrick

Geschrieben am: 29.03.2005 20:48:39
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
Bild

Betrifft: AW: Zellen sperren, wenn andere Zelle leer
von: Patrick

Geschrieben am: 29.03.2005 21:35:58
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
Bild

Betrifft: AW: Zellen sperren, wenn andere Zelle leer
von: Luc

Geschrieben am: 30.03.2005 11:19:39
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 :-?
Bild

Betrifft: AW: Zellen sperren, wenn andere Zelle leer
von: Patrick

Geschrieben am: 30.03.2005 20:57:12
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
Bild

Betrifft: Das sehe ich anders (s.a. OffTopic)! -- owT
von: Luc :-?
Geschrieben am: 31.03.2005 10:15:22
 Bild
Excel-Beispiele zum Thema "Zellen sperren, wenn andere Zelle leer"
Makros in Abhängigkeit vom Zellennamen aufrufen Zellen auf Kommentar überprüfen
Spalten bedingt summieren und Zellen formatieren Text aus Textbox in Zellen aufteilen
Zellen vergleichen und markieren Zählen formatierter Zellen
Daten aus Textdatei gezielt in Zellen übernehmen Zellen verbinden und trennen
Zellen bei Minuswerten schraffieren Zeilen oberhalb der markierten Zellen einfügen