Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1628to1632
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
Inhaltsverzeichnis

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

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
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
Anzeige
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
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
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.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige