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

Beiträge aus den Excel-Beispielen zum Thema "Zellen sperren, wenn andere Zelle leer"