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

Forumthread: Beschriebene Zellen automatisch sperren

Beschriebene Zellen automatisch sperren
13.06.2018 12:23:20
Sven
Schönen Guten Tag :-)
Excel Version: Excel 2016
ich habe folgendes Problem, ich möchte das jedes mal wenn ich meine Excel Datei speichere alle Zellen die beschrieben sind, also nicht leer sind, geschützt werden.
Sodass sie nicht mehr verändert werden können. Das Problem ist das einige Zellen auch verbunden sind, da ich eine Firmenvorlage benutzen muss.
Des Weiteren soll wenn ich eine geschützte Zelle doppelt anklicke eine Box mit Passwort Eingabe kommen. Wenn ich das Passwort eingebe soll die Zelle bearbeitet werden. Das Passwort soll ein anderes sein, als das für das Blatt.
Aber dieses Problem habe ich mit folgendem Code gelöst.
Zur Info oder falls wer eine bessere Idee hat.
Den Code habe ich aus dem Internet.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Locked Then
If InputBox("Bitte Passwort eingeben") = "b" Then
ActiveSheet.Unprotect ("a")
Target.Locked = False
ActiveSheet.Protect ("a")
End If
End If
End Sub

Gibt es hier vielleicht die Möglichkeit das ich den Code nicht in jedes Arbeitsblatt schreiben muss? (15 Arbeitsblätter)
Für die Sache mit dem automatischen Sperren habe ich 2 Sachen im Internet gefunden die jeweils ein Teil der Lösung beinhalten.
Einmal dieser hier:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Merker As Boolean
dim SH as Worksheet
Merker = Me.Saved
for each SH in Thisworkbook.Worksheets
SH.Unprotect "a"
SH.Usedrange.Locked = True
On Error Resume Next
SH.UsedRange.SpecialCells(xlCellTypeBlanks).Locked = False
On Error Goto 0
SH.Protect "a"
Next
If Merker Then Me.Save
End Sub

Dieser funktioniert soweit und ja sogar für die ganze Arbeitsmappe, ich habe 15 Arbeitsblätter. Das Problem bei diesem Code ist leider das er verbundene Zellen nicht sperrt.
und einmal diesen hier:

Private Sub Worksheet_Change(ByVal Target As Range)
'Code sperrt die Zelle, in die eine Eingabe gemacht wurde
Dim rngCell As Range
Set Target = Intersect(Target, Range("E16:BS46"))
If Target Is Nothing Then Exit Sub
Me.Unprotect ("a")
For Each rngCell In Target
rngCell.Select
Selection.Locked = rngCell  ""
Next
Me.Protect ("a")
End Sub

Diesen muss ich dann ja in jedes Arbeitsblatt einfügen, und er sperrt direkt nach dem herausgehen aus der Zelle. Dafür funktioniert er auch bei Verbundenen Zellen.
Kann man diesen Code so hinbekommen das er das nur beim Speichern macht?
Vielen Dank schonmal für eventuelle Hilfe und Mühen.
Gruß Sven
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Beschriebene Zellen automatisch sperren
13.06.2018 12:40:33
Daniel
Hi
machs anderes rum:
entsperre erst alle Zellen und setze dann die Sperre für die Zellen mit Formeln und mit konstantem Inhalt.
das Problem ist, dass die Rest-Verbundzellen leer sind und über die Specialcells(xlcelltypeblanks) angezogen werden, aber Excel automatisch die Aktion auf den ganzen Zellverbund bezieht.
 sh.UsedRange.Locked = False
sh.UsedRange.SpecialCells(xlCellTypeConstants).Locked = True
sh.UsedRange.SpecialCells(xlCellTypeFormulas).Locked = True
Gruß Daniel
Anzeige
AW: Beschriebene Zellen automatisch sperren
13.06.2018 13:40:51
Sven
Hallo Daniel,
danke das ist genau das was ich gebraucht habe.
Hast du eventuell auch noch eine Lösung dafür das ich den Code mit der Box nicht in jedes Blatt schreiben muss?
Gruß Sven
AW: Beschriebene Zellen automatisch sperren
13.06.2018 13:47:34
Daniel
Hi
wenn du ein Change-Event hast, das für alle Blätter gelten soll, dann verwende das Sheet_Change-Event im Modul "DieseArbeitsmappe".
das gilt dann für alle Blätter der Mappe.
Wenn der Code nicht für alle Blätter gelten soll, kannst du mit sh.Name abfragen, welches Blatt gerade aktiv ist und ensprechende Ausnahmen programmieren.
Gruß Daniel
Anzeige
AW: Beschriebene Zellen automatisch sperren
13.06.2018 14:43:50
Sven
Hi,
auch das hat sehr gut funktioniert. Vielen Dank nochmal.
Jetzt habe ich noch eins was halt nur einige Blätter betrifft, habe jedoch die Sache mit der Abfrage nicht verstanden. Kannst du mir das vielleicht an einem Bsp. erläutern?
Ich habe die Arbeitsblätter Januar - Dezember und dann noch Intro und Einstellungen.
Jetzt soll sich ein Code nur auf die Arbeitsblätter Januar bis Dezember auswirken.
Wie müsste ich das dann abfragen?
Gruß Sven
Anzeige
AW: Beschriebene Zellen automatisch sperren
13.06.2018 14:59:54
Daniel
Hi
Select Case sh.Name
Case "Intro", "Einstellungen"
Case Else
hier der Code, der bei den Blättern laufen soll, die nicht "Intro" oder "Einstellung"  _
heißen
end Select
oder so, je nach dem was für dich günstiger ist
Select Case sh.Name
Case "Januar", "Februar", "März", ... usw hier die Blattnamen hinschreiben
hier der Code, der bei diesen Blättern laufen soll
Case else
End Select
Gruß Daniel
Anzeige
AW: Beschriebene Zellen automatisch sperren
13.06.2018 16:09:28
Sven
Super Daniel vielen Dank :-)
das hat mir schon wieder bei einem weiter Code so geholfen wie ich es beabsichtigt habe.
Nun habe ich noch etwas, ich hoffe ich nerve noch nicht.
Und zwar möchte ich erreichen das wenn im Arbeitsblatt "Einstellungen" die Zellen A3-A5 verändert werden ein Code ausgelöst welcher in den Arbeitsblättern Januar-Dezember gewisse Spalten ausblendet.
Über Aufruf Sub und auf jedem Arbeitsblatt einfügen habe ich das schon hinbekommen. Aber ich denke das müsste mit der Select Methode einfacher und übersichtlicher gehen falls es möglich ist.
Jedoch weiß ich nicht genau wie ich das Ereignisbeschreibe das der Code ausgelöst wird.
Habe zwar ne ganze Zeit Sachen ausprobiert aber will nicht wie ich will.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Spalte As Integer
Select Case Sh.Name
Case "Intro", "Einstellungen"
Case Else
For Spalte = 46 To 61
If Range("AU8") = "NA" Then
Columns(Spalte).Hidden = True
Else
Columns(Spalte).Hidden = Cells(13, Spalte) = ""
End If
Next
End Select
End Sub

Des Weiteren weiß ich nicht genau an welche stellen ich das unprotect und Protect setzen muss. Da das Arbeitsblatt durch den andern Code ja geschützt ist.
Gruß Sven
Anzeige
AW: Beschriebene Zellen automatisch sperren
13.06.2018 16:15:37
Sven
Nur damit die Frage wieder als nicht beantwortet steht.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zellen in Excel automatisch sperren


Schritt-für-Schritt-Anleitung

Um Zellen in Excel automatisch zu sperren, wenn Du die Datei speicherst, kannst Du den folgenden VBA-Code verwenden. Dieser Code sollte im Modul „DieseArbeitsmappe“ eingetragen werden. Achte darauf, dass Du Excel 2016 oder eine neuere Version verwendest.

  1. Öffne Deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Doppelklicke im Projekt-Explorer auf „DieseArbeitsmappe“.
  3. Füge den folgenden Code ein:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim Merker As Boolean
    Dim SH As Worksheet
    Merker = Me.Saved
    For Each SH In ThisWorkbook.Worksheets
        SH.Unprotect "a"
        SH.UsedRange.Locked = True
        On Error Resume Next
        SH.UsedRange.SpecialCells(xlCellTypeBlanks).Locked = False
        On Error GoTo 0
        SH.Protect "a"
    Next
    If Merker Then Me.Save
End Sub
  1. Schließe den VBA-Editor und speichere Deine Excel-Datei als Makro-aktivierte Arbeitsmappe (*.xlsm).

Häufige Fehler und Lösungen

  • Fehler: Verbundene Zellen werden nicht gesperrt.
    • Lösung: Verwende den folgenden Code, um zuerst alle Zellen zu entsperren und dann nur die Zellen mit Inhalten zu sperren:
SH.UsedRange.Locked = False
SH.UsedRange.SpecialCells(xlCellTypeConstants).Locked = True
SH.UsedRange.SpecialCells(xlCellTypeFormulas).Locked = True
  • Fehler: Der Code funktioniert nicht in allen Arbeitsblättern.
    • Lösung: Stelle sicher, dass Du den Code im Modul „DieseArbeitsmappe“ eingefügt hast, damit er für alle Blätter gilt.

Alternative Methoden

Eine alternative Methode, um Zellen automatisch zu sperren, besteht darin, den Worksheet_Change-Ereignis-Handler zu verwenden. Dieser Code sperrt die Zelle, wenn eine Eingabe gemacht wird. Du musst diesen Code jedoch in jedes Arbeitsblatt einfügen. Hier ein Beispiel:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rngCell As Range
    Set Target = Intersect(Target, Range("E16:BS46"))
    If Target Is Nothing Then Exit Sub
    Me.Unprotect ("a")
    For Each rngCell In Target
        rngCell.Locked = rngCell <> ""
    Next
    Me.Protect ("a")
End Sub

Praktische Beispiele

  1. Sperren von bestimmten Zellen: Wenn Du nur bestimmte Zellen sperren möchtest, kannst Du den folgenden Code anpassen:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim SH As Worksheet
    For Each SH In ThisWorkbook.Worksheets
        If SH.Name <> "Intro" And SH.Name <> "Einstellungen" Then
            SH.Unprotect "a"
            SH.Range("A1:B10").Locked = True
            SH.Protect "a"
        End If
    Next
End Sub
  1. Code für andere Blätter: Verwende Select Case, um den Code nur für bestimmte Arbeitsblätter auszuführen:
Select Case SH.Name
    Case "Januar", "Februar", "März"
        ' Hier den Code einfügen
    Case Else
        ' Nichts tun
End Select

Tipps für Profis

  • Verwende Passwörter: Stelle sicher, dass Du ein sicheres Passwort verwendest, um die Blätter zu schützen. Du kannst das Passwort im Code anpassen.
  • Debugging: Verwende Debug.Print, um herauszufinden, welche Zellen gesperrt werden, falls der Code nicht wie gewünscht funktioniert.
  • Testen: Teste den Code in einer Kopie Deiner Datei, um sicherzustellen, dass alles wie gewünscht funktioniert.

FAQ: Häufige Fragen

1. Wie kann ich den Code für alle Blätter gleichzeitig anwenden?
Du musst den Code im Modul „DieseArbeitsmappe“ einfügen, damit er für alle Blätter gilt.

2. Was ist, wenn ich das Passwort vergessen habe?
Es gibt keine einfache Möglichkeit, ein vergessenes Passwort zurückzusetzen. Du solltest regelmäßig Backups Deiner Excel-Dateien erstellen.

3. Kann ich die Sperre auf bestimmte Zellen beschränken?
Ja, Du kannst den Code anpassen, um nur bestimmte Zellen zu sperren, indem Du die Range-Eigenschaft veränderst.

4. Funktioniert das auch in Excel Online?
Die beschriebenen VBA-Codes funktionieren nur in Desktop-Versionen von Excel, nicht in Excel Online.

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