Supportnet / Forum / Tabellenkalkulation
Zellschutz
Frage
Hallo Liebe SN´ler,
Ich möchte auf einem Tabellenblatt Zellen mit einem Zellschutz versehen. aber erst nachdem in die Zelle auch ein Wert(Text,Datum,o ä ) eigetragen wurde. Alle anderen (leeren) Zellen sollen natürlich zu bearbeiten sein. Das Tabellenblatt ist mit Blattschutz versehen. Excel 98/2000! nicht XP!
Hoffe mir kann jemand helfen
Danke
Druido
Antwort 1 von StilleQuelle
Ich kann mir da nur ne VB-Lösung vorstellen.
Diese prüft z. B. vor dem Schließen der Datei, ob gewisse Zellen leer sind, wenn nicht, wird der Zellschutz aktiviert. (aber es dauert doch ewig alle Zellen eines Tabellenblattes zu prüfen! Es wäre eine Überlegung wert, ob nur Zellen einer bestimmte Spalte geprüft werden sollen und dann z. B. die Zeile schützen)
Was aber auch bedeutet: Es müsste das Password, welches das Tabellenblatt schützt, in VB eingegeben werden.
Um ein Auslesen des Passwortes in VB zu verhindern müsste auch dieses Modul mit einem Passwort geschützt werden.
Das ist nur ein Denkansatz.
Eine Komplettlösung in VB findet vielleicht ein VB-Spezialist.
Gruß
SQ
Diese prüft z. B. vor dem Schließen der Datei, ob gewisse Zellen leer sind, wenn nicht, wird der Zellschutz aktiviert. (aber es dauert doch ewig alle Zellen eines Tabellenblattes zu prüfen! Es wäre eine Überlegung wert, ob nur Zellen einer bestimmte Spalte geprüft werden sollen und dann z. B. die Zeile schützen)
Was aber auch bedeutet: Es müsste das Password, welches das Tabellenblatt schützt, in VB eingegeben werden.
Um ein Auslesen des Passwortes in VB zu verhindern müsste auch dieses Modul mit einem Passwort geschützt werden.
Das ist nur ein Denkansatz.
Eine Komplettlösung in VB findet vielleicht ein VB-Spezialist.
Gruß
SQ
Antwort 2 von nighty
hi alle :)
endlich mal wieder ein nettes problem :)
ich werds probieren :)
gruss nighty
endlich mal wieder ein nettes problem :)
ich werds probieren :)
gruss nighty
Antwort 3 von nighty
hi druido :)
faellt mir so attock gerade ein,es waere sehr von vorteil bzw. enorme zeitersparniss wenn die zellen leicht begrenzt waeren wie z.b.,einen globalen bereich mit maximum der spalten und zeilen den du vielleicht benennen koenntest,es waere auch schoen wenn man die zellen des begrentzten bereiches nacheinander befuellt ohne leere zu ueberspringen :).es geht natuerlich auch ohne diese bedingungen,aber,es waere recht langsam.
gruss nighty
faellt mir so attock gerade ein,es waere sehr von vorteil bzw. enorme zeitersparniss wenn die zellen leicht begrenzt waeren wie z.b.,einen globalen bereich mit maximum der spalten und zeilen den du vielleicht benennen koenntest,es waere auch schoen wenn man die zellen des begrentzten bereiches nacheinander befuellt ohne leere zu ueberspringen :).es geht natuerlich auch ohne diese bedingungen,aber,es waere recht langsam.
gruss nighty
Antwort 4 von coros
Hi @Druido,
ich hätte da eine VBA-Lösung für Dich. Füge nachfolgende Anweisung in das VBA-Projekt Deiner Tabelle ein:
In dem kompletten Arbeitsblatt, oder dem Bereich, in dem der Code wirken soll, muss der Haken bei Gesperrt in der Zellenformatierung entfernt werden. Danach sperrt der Code nach Eingabe in einer Zelle diese Zelle.
Du musst in den Zeilen
Me.Unprotect "Hier Dein Blattschutzpasswort"
und
Me.Protect "Hier Dein Blattschutzpasswort"
den Text in den Anführungsstrichen ("Hier Dein Blattschutzpasswort") gegen Dein Blattschutzkennwort austauschen.
Da ich nich weiß, ob Du Dich mit VBA (Visual Basic) auskennst, kommt hier eine kurze Anweisung, wie Du den Code in Deine Tabelle bekommst.
1. Markiere und Kopiere (Strg c) die Anweisung aus diesem Beitrag
2. Klicke in Deiner Exceldatei in der Menüleiste nacheinander auf Extras => Makro => Visual Basic Editor
3. In dem neu geöffneten Fenster suche auf der linken Seite nach dem Eintrag VBA Projekt(Hier der Name Deiner Tabelle)
4. Klicke danach in dem linken Fenster auf den Eintrag Tabelle1(Dein Tabellenname) oder Tabelle2(Dein Tabellenname),bzw die Tabelle, in dem der Code wirken soll.
5. Füge nun die vorher kopierte Anweisung in das rechte leere Fenster ein.
Du solltest zum Abschluß noch die Sicherheitseinstellungen, die beim Öffnen der Datei abgefragt wird, kontrollieren. Klicke dazu nacheinander in der Menüleiste wieder auf Extras => Makro und dann auf Sicherheit.... Gehe, falls nicht schon angezeigt, auf die Registerkarte Sicherheitsstufe und schaue dort nach, ob die Einstellung Mittel aktiviert ist. Wenn nicht, aktiviere diese Einstellung, da sonst der Code nicht ausgeführt werden kann. Beim nächsten Öffnen Deiner Datei kommt eine Abfrage, ob Makros aktiviert oder deaktiviert werden sollen. Klicke auf aktivieren und der Code wird ausgeführt.
Ich hoffe, Du hast verstanden was ich hier geschrieben habe. Wenn nicht oder bei Problemen melde Dich hier noch mal.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
ich hätte da eine VBA-Lösung für Dich. Füge nachfolgende Anweisung in das VBA-Projekt Deiner Tabelle ein:
Sub Worksheet_Change(ByVal Target As Range)
With Target
Me.Unprotect "Hier Dein Blattschutzpasswort"
Application.EnableEvents = False
.Locked = True
Application.EnableEvents = True
Me.Protect "Hier Dein Blattschutzpasswort"
End With
End Sub
In dem kompletten Arbeitsblatt, oder dem Bereich, in dem der Code wirken soll, muss der Haken bei Gesperrt in der Zellenformatierung entfernt werden. Danach sperrt der Code nach Eingabe in einer Zelle diese Zelle.
Du musst in den Zeilen
Me.Unprotect "Hier Dein Blattschutzpasswort"
und
Me.Protect "Hier Dein Blattschutzpasswort"
den Text in den Anführungsstrichen ("Hier Dein Blattschutzpasswort") gegen Dein Blattschutzkennwort austauschen.
Da ich nich weiß, ob Du Dich mit VBA (Visual Basic) auskennst, kommt hier eine kurze Anweisung, wie Du den Code in Deine Tabelle bekommst.
1. Markiere und Kopiere (Strg c) die Anweisung aus diesem Beitrag
2. Klicke in Deiner Exceldatei in der Menüleiste nacheinander auf Extras => Makro => Visual Basic Editor
3. In dem neu geöffneten Fenster suche auf der linken Seite nach dem Eintrag VBA Projekt(Hier der Name Deiner Tabelle)
4. Klicke danach in dem linken Fenster auf den Eintrag Tabelle1(Dein Tabellenname) oder Tabelle2(Dein Tabellenname),bzw die Tabelle, in dem der Code wirken soll.
5. Füge nun die vorher kopierte Anweisung in das rechte leere Fenster ein.
Du solltest zum Abschluß noch die Sicherheitseinstellungen, die beim Öffnen der Datei abgefragt wird, kontrollieren. Klicke dazu nacheinander in der Menüleiste wieder auf Extras => Makro und dann auf Sicherheit.... Gehe, falls nicht schon angezeigt, auf die Registerkarte Sicherheitsstufe und schaue dort nach, ob die Einstellung Mittel aktiviert ist. Wenn nicht, aktiviere diese Einstellung, da sonst der Code nicht ausgeführt werden kann. Beim nächsten Öffnen Deiner Datei kommt eine Abfrage, ob Makros aktiviert oder deaktiviert werden sollen. Klicke auf aktivieren und der Code wird ausgeführt.
Ich hoffe, Du hast verstanden was ich hier geschrieben habe. Wenn nicht oder bei Problemen melde Dich hier noch mal.
MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 5 von StilleQuelle
Hallo coros,
spitze, funktioniert. habe es ausprobiert und mir abgeschrieben. Sowas kann ich irgendwann bestimmt auch gebrauchen.
Meine Lösung wäre sehr viel umständlicher gewesen, da ich zwar etwas firm bin mit VB aber längst nicht so.
Gruß
SQ
spitze, funktioniert. habe es ausprobiert und mir abgeschrieben. Sowas kann ich irgendwann bestimmt auch gebrauchen.
Meine Lösung wäre sehr viel umständlicher gewesen, da ich zwar etwas firm bin mit VB aber längst nicht so.
Gruß
SQ
Antwort 6 von Druido
Hi Leute,
erst mal vielen Dank für eure promte und schnelle Hilfe. Habe nach einigen Überlegungen und Anregungen inzwischen folgende AnfangsLösung für mein Problem gefunden.
Mir geht es darum, das nicht ein Nutzer mir aus Versehen alle Markierten Daten(die er vorher über "Markierung ausdrucken"gedruckt hat) mit der >Del<-Taste löscht.
Sub Zellschutz()
ActiveSheet.Unprotect
For Each Zelle In Range("B2:AI1500")
If Zelle.Value <> "" Then
Zelle.Locked = True
End If
Next
ActiveSheet.Protect DrawingObjects:=True, _
Contents:=True, Scenarios:=True
End Sub
Druido
erst mal vielen Dank für eure promte und schnelle Hilfe. Habe nach einigen Überlegungen und Anregungen inzwischen folgende AnfangsLösung für mein Problem gefunden.
Mir geht es darum, das nicht ein Nutzer mir aus Versehen alle Markierten Daten(die er vorher über "Markierung ausdrucken"gedruckt hat) mit der >Del<-Taste löscht.
Sub Zellschutz()
ActiveSheet.Unprotect
For Each Zelle In Range("B2:AI1500")
If Zelle.Value <> "" Then
Zelle.Locked = True
End If
Next
ActiveSheet.Protect DrawingObjects:=True, _
Contents:=True, Scenarios:=True
End Sub
Druido
Antwort 7 von coros
Moin @Druido,
freut mich, das die Antworten Dir zu einem Lösungsansatz verholfen haben. Danke auch für die Rückmeldung.
MfG,
coros
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.
freut mich, das die Antworten Dir zu einem Lösungsansatz verholfen haben. Danke auch für die Rückmeldung.
MfG,
coros
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

