Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zellen sperren und entsperren

Zellen sperren und entsperren
09.10.2013 23:37:07
Justi
Hallo zusammen,
dank dieses genialen Forums habe ich ein Makro von Basti zu folgendem Problem erhalten:
ich habe eine Excel-Tabelle (Blattschutz aktiv) in der von verschiedenen Bearbeitern Daten eingetragen werden. Die eingetragenen Daten werden durch einen zweiten Bearbeiter geprüft. Ist der Eintrag OK, wird in einer Zelle nach den Einträgen ein "c" eingetragen. Die Zellen (n-3) und (n-4),in Relation zur Zelle in der "c" eigetragen wurde, werden automatisch gesperrt.
Wird das „c“ gelöscht werden die Zellen durch Passwortabfrage wieder entsperrt.
Das Makro funktioniert super. Nur kann ich den Autofilter nicht anwenden (das habe ich in etwa hinbekommen indem ich „AllowFiltering:=True“ ergänzt habe; funktioniert allerdings nur wenn ich eine Zelle mit „c“ eingetragen habe; ansonsten nicht). Auch ein/ausblenden der Gliederung funktioniert bei eingeschaltetem Blattschutz nicht. Die beiden Funktionen müssen aber in jedem Fall verwendet werden können.
Kann mir da nochmal jemand helfen?
Option Explicit
Dim strAlterWert As String
Dim strPasswort As String
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("A:P"), Target) Is Nothing Then Exit Sub
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "C" Or Target.Value = "c" Then
ActiveSheet.Unprotect
Target.Offset(0, -3).Locked = True
Target.Offset(0, -4).Locked = True
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End If
If strAlterWert = "C" Or strAlterWert = "c" Then
strPasswort = InputBox("Bitte Passwort eingeben")
Select Case strPasswort
Case "1234"
ActiveSheet.Unprotect
Target.Offset(0, -3).Locked = False
Target.Offset(0, -4).Locked = False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Case Else
Application.EnableEvents = False
Target.Value = strAlterWert
Application.EnableEvents = True
Exit Sub
End Select
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Intersect(Range("A:P"), Target) Is Nothing Then Exit Sub
strAlterWert = Target.Value
End Sub

Viele Grüße
Justi

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Zellen sperren und entsperren
10.10.2013 08:42:08
Bastian
Hallo Justi,
kopier zusätzlich den folgenden Code in das Codefenster der Arbeitsmappe:
Option Explicit
Sub Workbook_Open()
'für alle Blätter mit Passwortschutz
Dim ws As Worksheet
For Each ws In Worksheets
ws.Protect userinterfaceonly:=True, Password:="1234" 'Passwort anpassen
ws.EnableAutoFilter = True 'ermöglicht Autofilter
ws.EnableOutlining = True 'ermöglicht Gruppierung/Gliederung
Next ws
End Sub

Den Autofilter und die Gliederung musst Du dann bei ausgeschaltetem Blattschutz einrichten.
Nach dem erneuten Schützen des Blattes ist dann der Autofilter und die Gliederung noch aktiv.
Gruß, Bastian

Anzeige
AW: Zellen sperren und entsperren
10.10.2013 23:41:18
Justi
Hallo Bastian,
vielen Dank für Deine Hilfe. Der Autofilter funktioniert einwandfrei.Die Gliederung kann ich auch öffnen.Wenn ich danach allerdings ein Feld in der geöffneten Gliederung anklicke (in dem Fall stand dort die Fehlermeldung #Wert und ich wollte die Zelle bearbeiten)erscheint die Fehlermeldung "Typen unverträglich". Beim Debuggen wird der fett makierte Teil in dem Code zum sperren/ entsperren makiert.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Intersect(Range("A:P"), Target) Is Nothing Then Exit Sub
strAlterWert = Target.Value

End Sub
Kann das irgendwie vermieden werden?
Viele Grüße
Justi

Anzeige
AW: Zellen sperren und entsperren
11.10.2013 09:13:07
Bastian
Hallo Justi,
dann müssen wir noch eventuelle Fehlerwerte in den Zellen abfangen:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Intersect(Range("A:P"), Target) Is Nothing Then Exit Sub
If IsError(Target.Value) Then Exit Sub
strAlterWert = Target.Value
End Sub
Gruß, Bastian

Anzeige
AW: Zellen sperren und entsperren
14.10.2013 20:52:52
Justi
Hallo Bastian,
das hat prima funktioniert. Danke!
Ist es einfach möglich, das Passwort bei der Abfrage über die Messagebox mit **** darzustellen und nicht im Klartext? Ich habe Google bemüht und die Lösungen, die ich erhalten habe, schienen mir nicht so einfach zu sein... ich kann auch damit leben, wenn das Passwort zu lesen ist. Eine Verschlüsselung wäre nur das letzte i-Tüpfelchen.
Viele Grüße
Justi

Anzeige
AW: Zellen sperren und entsperren
14.10.2013 22:13:20
Bastian
Hallo Justi,
mit der einfachen Inputbox, mit der momemtan die Passwortabfrage erfolgt, ist dies leider nicht möglich. Du kannst Dir aber zur Passwortabfrage eine kleine UserForm basteln, die Du mit einer Textbox versiehst. In den Eigenschaften der Textbox gibt es den Parameter "PasswordChar". Hier kannst Du ein Zeichen wählen, welches bei der Passworteingabe in der Textbox erscheinen soll (z.B. "*").
Die Variable "strPasswort" musst Du dann in einem Modul als "Global" deklarieren, da sie sowohl im Klassenmodul der Tabelle als auch im Klassenmodul der UserForm verwendet wird.
Gruß, Bastian

Anzeige
AW: Zellen sperren und entsperren
14.10.2013 22:55:26
Justi
Hallo Bastian,
vielen Dank für Deine Mühe. Ich werde es erst einmal so lassen wie es ist.
Viele Grüße
Justi
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zellen sperren und entsperren in Excel


Schritt-für-Schritt-Anleitung

Um in Excel Zellen zu sperren oder zu entsperren, kannst Du VBA (Visual Basic for Applications) verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne den Visual Basic Editor:

    • Drücke ALT + F11 in Excel, um den Visual Basic Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.
  3. Füge den folgenden Code ein:

    Option Explicit
    
    Dim strAlterWert As String
    Dim strPasswort As String
    
    Private Sub Worksheet_Change(ByVal Target As Range)
       If Intersect(Range("A:P"), Target) Is Nothing Then Exit Sub
       If Target.Cells.Count > 1 Then Exit Sub
    
       If Target.Value = "C" Or Target.Value = "c" Then
           ActiveSheet.Unprotect
           Target.Offset(0, -3).Locked = True
           Target.Offset(0, -4).Locked = True
           ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
       End If
    
       If strAlterWert = "C" Or strAlterWert = "c" Then
           strPasswort = InputBox("Bitte Passwort eingeben")
           Select Case strPasswort
               Case "1234"
                   ActiveSheet.Unprotect
                   Target.Offset(0, -3).Locked = False
                   Target.Offset(0, -4).Locked = False
                   ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
               Case Else
                   Application.EnableEvents = False
                   Target.Value = strAlterWert
                   Application.EnableEvents = True
                   Exit Sub
           End Select
       End If
    End Sub
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       If Target.Cells.Count > 1 Then Exit Sub
       If Intersect(Range("A:P"), Target) Is Nothing Then Exit Sub
       strAlterWert = Target.Value
    End Sub
  4. Stelle sicher, dass die Blätter geschützt sind:

    • Füge den folgenden Code hinzu, um den Blattschutz zu aktivieren:
    Sub Workbook_Open()
       Dim ws As Worksheet
       For Each ws In Worksheets
           ws.Protect userinterfaceonly:=True, Password:="1234" 'Passwort anpassen
           ws.EnableAutoFilter = True 'ermöglicht Autofilter
           ws.EnableOutlining = True 'ermöglicht Gruppierung/Gliederung
       Next ws
    End Sub
  5. Schließe den VBA-Editor und teste das Makro.


Häufige Fehler und Lösungen

  • Fehler: "Typen unverträglich"
    Lösung: Stelle sicher, dass Du keine Zellen mit Fehlerwerten (z.B. #WERT) bearbeitest. Füge die Zeile If IsError(Target.Value) Then Exit Sub in das Worksheet_SelectionChange-Event ein.

  • Fehler: Autofilter funktioniert nicht
    Lösung: Stelle sicher, dass der Blattschutz den Autofilter nicht blockiert. Der Autofilter muss bei ausgeschaltetem Blattschutz eingerichtet werden. Verwende ws.EnableAutoFilter = True im Workbook_Open-Code.


Alternative Methoden

Eine alternative Methode zum Sperren und Entsperren von Zellen ist die Verwendung von Excel-Funktionen. Du kannst Zellen auch manuell über die Registerkarte "Überprüfen" schützen:

  1. Wähle die Zellen aus, die Du schützen möchtest.
  2. Rechtsklick und wähle "Zellen formatieren".
  3. Wechsle zur Registerkarte "Schutz" und aktiviere "Gesperrt".
  4. Aktiviere den Blattschutz aus der Registerkarte "Überprüfen".

Praktische Beispiele

  1. Zellen sperren mit Passwort:
    Verwende das oben angegebene Makro, um Zellen zu sperren, wenn in einer bestimmten Zelle ein "c" eingegeben wird. Dies kann nützlich sein, wenn Du die Bearbeitung von Zellen durch andere Benutzer kontrollieren möchtest.

  2. Gesperrte Zellen entsperren:
    Verwende die Passwortabfrage, um gesperrte Zellen wieder zu entsperren. Stelle sicher, dass Du das Passwort korrekt eingibst.


Tipps für Profis

  • Passwortschutz verbessern: Erstelle eine UserForm für die Passwortabfrage, um die Eingabe sicherer zu gestalten. Setze den PasswordChar-Parameter in der Textbox auf "*", um das Passwort zu verbergen.

  • Zellen schützen: Wenn Du viele Zellen schützen möchtest, nutze das vba zellen sperren-Makro, um die Effizienz zu steigern.

  • Verwende userinterfaceonly: Dies ermöglicht es, den Blattschutz aufzuheben, während das Arbeitsblatt weiterhin gesperrt bleibt, was die Verwendung von VBA erleichtert.


FAQ: Häufige Fragen

1. Wie kann ich einzelne Zellen mit einem Passwort sperren?
Du kannst den Code anpassen, um spezifische Zellen zu sperren, indem Du deren Adresse in den Target.Offset-Befehlen änderst.

2. Was mache ich, wenn ich das Passwort für geschützte Zellen vergessen habe?
Es gibt keine einfache Möglichkeit, geschützte Zellen ohne das Passwort zu entsperren, außer durch VBA-Codes, die möglicherweise nicht immer funktionieren. Es ist ratsam, das Passwort sicher zu speichern.

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