Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
540to544
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
540to544
540to544
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zellensperrung

Zellensperrung
04.01.2005 12:42:47
Martin
Hallo
Ist es möglich in Excel, eine Zelle zu sperren je nach Inhalt einer anderen Zelle. Z.B. Falls Zelle A1 den Wert "1" beinhaltet, sollte Zelle B1 gesperrt und nicht anklickbar sein (Blattschutz), falls A1 jedoch einen anderen Wert als "1" hat, soll Zelle B1 frei sein.
Bisher dachte ich, das sei nicht möglich, aber ich lasse mich sehr gerne eines besseren belehren.....
Besten Dank im voraus.

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellensperrung
04.01.2005 13:00:27
Matthias
Hallo Martin,
eine Möglichkeit ohne Blattschutz, mit Undo:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B1")) Is Nothing Then
If Range("A1") = 1 Then
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If
End If
End Sub
Den Code ins Arbeitsblattmodul.
Gruß Matthias
AW: Zellensperrung
04.01.2005 13:30:49
Martin
Hallo Matthias
Besten Dank für Deine Hilfe. Wenn ich den Code ins Arbeitsblattmodul setze, startet dann der Code mit dem Öffnen des Blatts oder muss ich noch einen Button wo einfügen?
Danke für eine kurze Erläuterung. Bin halt noch ein Anfänger......
PS: Ohne Code, direkt auf dem Blatt geht's nicht?
Anzeige
AW: Zellensperrung
04.01.2005 13:34:26
Matthias
Hallo MArtin,
der Code startet, sobald auf dem betreffenden Blatt eine Änderung durchgeführt wurde (das Change-Ereignis).
Der Code prüft, oder bei den von der Änderung betroffenen Zellen die Zelle B1 dabei ist.
Wenn ja wird geprüft, ob A1 = 1 ist
Und wenn das auch der Fall ist, wird der Undo-Befehl ausgeführt.
Geht natürlich alles nur bei aktiven Makros.
Ohne Makros gibt es da keine Möglichkeit.
Gruß Matthias
AW: Zellensperrung
04.01.2005 14:08:43
Martin
Hallo Matthias
Besten Dank nochmals für die Hilfe. Ich habe den Code in ein Modul der betreffenden Arbeitsblatt gestellt. (Das Blatt ist übrigens geschützt bis auf die betroffenen Zellen). Ich habe den Code wie folgt geändert:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("J18")) Is Nothing Then
If Range("C18") = 6 Then
With Range("J18")
.EnableEvents = False
End With
End If
End If
End Sub

Es funktioniert jedoch leider nicht. Nochmals die Situation: Zellen C18 und J18 (und auch andere) sind nicht gesperrt. Das Blatt ist geschützt. Wenn in Zelle C18 der Wert 6 eingegeben wird, soll Zelle J18 gesperrt/schreibgeschützt sein. Wenn in Zelle C18 ein anderer Wert (1,2,3,4,5,7,8, etc) eingegeben wird, soll Zelle J18 nicht schreibgeschützt sein, da dann dort eine Eingabe getätigt werden soll.
Besten Dank nochmals für Hilfe!
PS: Das ganze soll dann von C18 bis C48 resp. J18 bis J48 geschehen.
Martin
Anzeige
AW: Zellensperrung
04.01.2005 14:30:51
Matthias
Hallo Martin,
da hast du aber ziemlich schlampig abgeschrieben ;-)
jetzt der Code für den ganzen Bereich:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim b As Range, z As Range
Dim found As Boolean
Set b = Intersect(Target, Range("J18:J48"))
found = False
If Not b Is Nothing Then
For Each z In b
If z.Offset(0, -7).Value = 6 Then
found = True
Exit For
End If
Next z
If found Then
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If
End If
End Sub
Sollte ees nicht gleich klappen, setze mal im Direktfenster den Befehl
Application.EnableEvents = True
um die Ereignisabfrage wieder einzuschalten (wird auch beim Öffnen von Excel automatisch gemacht).
Gruß Matthias
Anzeige
AW: Zellensperrung
04.01.2005 16:46:42
Martin
Hallo Matthias, nochmals vielen Dank für Deine Hilfe.
Leider scheint es bei mir aber nicht zu funktionieren. Wenn ich es richtig verstehe, bedeutet "Application.EnableEvents = True" Blatt nicht schützen und "= False" Blatt schützen (kann aber gut sein, dass ich mich irre). Bei meinem Problem bezieht sich das Sperren nur auf die Zellen J18:J48 und nicht auf's ganze Blatt, denn das ist bereits geschützt. Die Zellen J18:J48 sind nicht gesperrt, sollen aber gesperrt werden, wenn in Zellen C18:C48 der Wert "6" ist.
Ich habe dieses Mal Deinen Code kopiert und genau gleich in eine Modul der Arbeitsmappe getan. Leider kann ich in Zelle J18 trotzdem noch was eingeben, wenn ich in Zelle C18 ne 6 reinschreibe..... Was mach ich falsch?
Ich würde mich über eine Antwort freuen.
Besten Dank im voraus.
Martin
Anzeige
AW: Zellensperrung
04.01.2005 20:16:27
Matthias
Hallo Martin,
Application.EnableEvents = False bedeutet nur, dass die Ereignisprozeduren abgeschaltet werden. Hat nichts mit Sperre zu tun, sondern nur damit, dass die Undo-Prozedur nicht erneut das Change-Ereignis auslöst.
Ich wusste nicht, dass du das Ändern der Werte in C18... verhindern willst.
Du willst also die Zellen in C18:C48 gesperrt haben und abhängig von deren Inhalt die Zellen J18:J48 sperren?
Naja, ich dachte, ich spar' mir das Protect und Unprotect, und mache eine unerwünschte Änderung einfach mit Undo rückgängig...
Wie sollen denn jemals die Werte in SPalte C geändert werden? Durch manuelles AUfheben des Blattschutzes? Oder stehen da Formeln in den Zellen?
Gruß Matthias
Anzeige
AW: Zellensperrung
05.01.2005 08:00:54
Martin
Guten Morgen Matthias
Danke für Deinen Effort!
Da ich am Morgen frischer bin, versuch ich noch einmal mein Problem verständlich darzulegen:
-Blatt ist geschützt
-Zellen C18:C48 sind NICHT gesperrt
-Zellen J18:J48 sind NICHT gesperrt
(es gibt auch noch andere nicht gesperrte Zellen, die sind aber hier nicht von Bedeutung)
-Jemand wird in Zelle C18 eine Zahl zwischen 1 und 26 eingeben
-Als nächstes soll die Person in der Zelle J18 einen Betrag eingeben, ausser wenn in Zelle C18 der Wert "6" steht, dann wird die Zelle J18 nämlich automatisch durch eine Formel ausgefüllt und sollte deshalb nicht angewählt werden können. (daher würde ich sie gerne sperren, wenn in C18 ne 6 steht).
-Das Gleiche gilt für Zellen C19 - C48 resp. J19 - J48 (die werden nach Bedarf ausgefüllt je nach Fall, müssen aber nicht)
in kurz, wenn in C18 ne 6 eingegeben wird und mit dem Tabulator weitergesprungen wird, soll J18 übersprungen werden und nicht angewählt werden können.
Besten Dank nochmals für die Hilfe
Martin
Anzeige
AW: Zellensperrung
05.01.2005 09:15:50
Matthias
Hallo Martin,
ok, du willst die Zellen also gesperrt haben...
ich habe jetzt mal einen Code geschrieben, der die Zelle J.. sperrt, wenn in C.. eine 6 geschrieben wird, der die Zelle aber nicht entperrt, wenn die 6 durch etwas anderes ersetzt wird.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, z As Range
Set r = Intersect(Target, Range("C18:C48"))
If Not r Is Nothing Then
For Each z In r
If z.Value = 6 Then
ActiveSheet.Unprotect
Range("J" & z.Row).Locked = True
ActiveSheet.Protect
End If
Next z
End If
End Sub
Ist das jetzt so ok?
Gruß Matthias
Anzeige
AW: Zellensperrung
05.01.2005 09:36:02
Martin
Danke Matthias! Der Code (soweit ich ihn verstehe) sieht perfekt aus. Leider scheine ich jedoch unter Idiotismus zu leiden, denn es läuft nicht, wahrscheinlich weil ich den Code am falschen Ort platziere oder sonst was vergesse.
Ich hoffe, Du hast die Geduld noch folgendes zu überprüfen:
Was ich gemacht habe:
- im Visual Basic beim betreffenden Arbeitsblatt ein Modul (Nr. 3) einfügt. Deinen Code mit copy und paste dort einfügt (es steht zuoberst links (Allgemein) rechts Worksheet_Change; darunter Option Explicit)
- Modul Nr. 1 ist Formular Drucken (mit Command Button)
- Modul Nr. 2 ist Formular Leeren (mit Command Button)
Die Module 1 und 2 funktionieren, wenn ich den Button anklicke. Das Module Worksheet_Change aber nicht. Ich habe heute morgen mal einen anderen Code eingegeben einfach zum Testen:

Private Sub Worksheet_Change(ByVal Target as Range)
Target.Font.ColorIndex = 5
End Sub

Es hat sich auch keine Farbe geändert nach der Eingabe auf einem Feld. Wie starte ich denn dieses Worksheet_Change? (Ich ging davon aus, dass es automatisch läuft und die Aktionen ausführen sobald auf dem Arbeitsblatt was eingegeben wird mit der Tastatur).
Besten Dank für eine kurze Erläuterung......und für Deine Geduld!
Martin
Anzeige
AW: Zellensperrung
05.01.2005 09:46:29
Matthias
Hallo Martin,
der Code muss woanders hin.
In VB-Editor links ins der Projektexplorer
(DiesArbeitsmappe, Tabelle1, Tabelle2, Userforms, Module)
Doppelklicke auf den Blattnamen, des betreffenden Blattes.
In dieses Modul muss der Code rein...
Und "Option Explicit" muss immer außerhalb einer Prozedur (am besten ganz oben im Modul) stehen.
Viel Erfolg,
Matthias
Danke für Deine Hilfe & Geduld, Matthias!!
05.01.2005 09:59:19
Martin
es funktioniert perfekt!
aller anfang ist schwer, auch wenn's noch so einfach ist!
naja, wieder etwas gelernt.....
besten dank
martin
Danke für die Rückmeldung - o.T.
05.01.2005 10:08:43
Matthias
-

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige