Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
772to776
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
772to776
772to776
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zellen nach Zahleneingabe schützen

Zellen nach Zahleneingabe schützen
12.06.2006 18:56:31
Fritz
Hallo Excelfreunde,
wer kann mir helfen?
In einer geschützten Tabelle, habe ich diverse Zellen (in einem nicht zusammenhängenden Bereich) vom Zellschutz ausgenommen.
In den meisten der vom Zellschutz áusgenommenen Zellen habe ich per Gültigkeitsprüfung sichergestellt, dass nur ganze Zahlen eingegeben werden können.
Ich würde nun per VBA gerne folgendes erreichen. Immer wenn ich die Tabelle (nicht die Datei) schließe, soll zunächst der Zellschutz aufgehoben (Passwort: "Test") werden. Danach sollte geprüft werden, welche Zellen (inzwischen) Zahlen enthalten und vom Zellschutz ausgenommen sind. Für diese Zellen sollte nun auch der Zellschutz aktiviert werden. Danach sollte der Passwortschutz mit dem genannten Passwort wieder aktiviert werden.
Für eure Hilfe bei der Umsetzung meines Vorhabens bereits an dieser Stelle vielen Dank.
Gruß
Fritz

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen nach Zahleneingabe schützen
12.06.2006 19:12:54
ChrisL
Hallo Fritz
Bei einem Close-Ereignis müsstest du die Speicherung "erzwingen", was nicht unbedingt erwünscht ist. Ich würde daher ein Save-Ereignis wählen, der Code bleibt aber der selbe.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim WS As Worksheet
Dim Zelle As Range
For Each WS In ThisWorkbook.Worksheets
WS.Unprotect Password:="test"
For Each Zelle In WS.UsedRange
If Zelle.Text <> "" Then Zelle.Locked = True
Next Zelle
WS.Protect Password:="test"
Next WS
End Sub

Da jedesmal jede einzelne Zelle frisch überprüft werden muss, wäre es günstig, wenn du nur den relevanten Bereich ansprechen würdest.
Gruss
Chris
Anzeige
AW: Zellen nach Zahleneingabe schützen
12.06.2006 19:26:26
Fritz
Hallo Chris,
ich möchte die zusätzliche Sicherung immer dann erreichen, wenn ich in einer bestimmten Tabelle der Datei (also nicht für alle Tabellenblätter)neue Zahlen eingegeben habe.
Wenn ich dann dieses Tabellenblatt schließe, also in ein anderes Tabellenblatt wechsle, sollen diese - bislang nicht geschützten Zellen - (zusätzlich) in den Schutz einbezogen werden.
Vielen Dank für Deine Unterstützung.
Gruß
Fritz
AW: Zellen nach Zahleneingabe schützen
13.06.2006 13:31:36
Astrid
Hallo Fritz,
du kannst das Makro in die 'Worksheet_Deactivate' Methode einbauen:
In den Code des Worksheets (auf die Blattregisterkarte des Blattes mit Rechtsklick und 'Code anzeigen' wählen) schreibst du den Code von Chris, nur ohne den Arbeitsmappen Schutz, etwa so:

Sub Worksheet_Deactivate()
Dim Zelle As Range
ActiveSheet.Unprotect Password:="test"
For Each Zelle In ActiveSheet.UsedRange
If Zelle.Text <> "" Then Zelle.Locked = True
Next Zelle
ActiveSheet.Protect Password:="test"
End Sub

So müsste es klappen.
Viele Grüße,
Astrid
Anzeige
Laufzeitfehler 1004
13.06.2006 14:55:52
Fritz
Hallo Astrid,
vielen Dank für die Unterstützung.
Beim Wechsel der Tabelle erfolgt die folgende (Fehler-)Meldung:
Laufzeitfehler 1004:
Die Locked-Eigenschaft des Range-Objektes kann nicht festgelegt werden.
Woran liegt das?
Gruß
Fritz
AW: Laufzeitfehler 1004
13.06.2006 15:56:58
Astrid
Hallo nochmal,
versuch's mal so (bei Tabelle1 den Namen deiner Tabelle einsetzen)

Sub Worksheet_Deactivate()
Dim Zelle As Range
ActiveSheet.Unprotect Password:="test"
For Each Zelle In Worksheets("Tabelle1").UsedRange
If Zelle.Value <> "" Then Zelle.Locked = True
Next Zelle
ActiveSheet.Protect Password:="test"
End Sub

Bei mir kommt keine Fehlermeldung, vielleicht liegt es sonst an meiner excel version (2000).
Viele Grüße,
Astrid
Anzeige
AW: Laufzeitfehler 1004
13.06.2006 17:00:17
Fritz
Hallo Astrid,
der neue Code liefert exakt die gleiche Fehlermeldung des vorherigen Codes.
Viele Grüße
Fritz
AW: Laufzeitfehler 1004
13.06.2006 17:28:11
ChrisL
Hallo Fritz
Sorry war grad länger nicht online, darum erst jetzt eine Antwort.
Der Fehler lässt sich nicht rekonstruieren. Wo hast du den Code eingebunden? Wie lautet die exakte Fehlermeldung? Auf welcher Zeile bleibt der Debugger hängen?
Du könntest es noch wie folgt probieren:

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Dim Zelle As Range
If Sh.Type = -4167 Then
Sh.Unprotect Password:="test"
For Each Zelle In Sh.UsedRange
If Zelle.Value <> "" Then Zelle.Locked = True
Next Zelle
Sh.Protect Password:="test"
End If
End Sub

Unter "DieseArbeitsmappe" einbinden!
Ggf. bitte Beispieldatei laden.
Gruss
Chris
Anzeige
AW: Laufzeitfehler 1004
13.06.2006 19:04:06
Fritz
Hallo Chris,
ganz lieben Dank für die Hilfe.
zu Deinen Fragen:
1. Ich habe den Code (von Astrid) in dem entsprechenden Tabellenblatt eingebunden.
2. Die exakte Fehlermeldung lautet: Laufzeitfehler 1004: "Die Locked-Eigenschaft des
Range-Objektes kann nicht festgelegt werden.
3. Der Debugger bleibt in folgender Zeile hängen:
If Zelle.Value "" Then Zelle.Locked = True
gelb markiert wird dabei: Then Zelle.Locked = True
Auch bei Deinem Ansatz die gleiche Fehlermeldung.
Viele Grüße
Fritz
AW: Laufzeitfehler 1004
13.06.2006 19:14:45
Fritz
Hallo liebe Helfer,
das betreffende Tabellenblatt weist "Eigenschaften" auf, die möglicherweise für die Probleme verantwortlich sind:
1. in der Tabelle befinden sich verbundene Zellen.
2. mehrere Zellen (auch leere Zellen) sind mit einer "bedingten Formatierung" versehen.
Vielleicht helfen diese Informationen!
Nochmals vielen Dank für Euren Einsatz!
Gruß
Fritz
Anzeige
AW: Laufzeitfehler 1004
14.06.2006 08:25:50
ChrisL
Hallo Fritz
Verbundene Zellen sind Gift, darum eine Krückenlösung mit Select:

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Dim Zelle As Range
On Error Resume Next
If Sh.Type = -4167 Then
Sh.Unprotect Password:="test"
For Each Zelle In Sh.UsedRange
If Zelle.Value <> "" Then
Zelle.Select
Selection.Locked = True
'Zelle.Locked = True
End If
Next Zelle
Sh.Protect Password:="test"
End If
End Sub

Gruss
Chris
AW: Laufzeitfehler 1004
14.06.2006 15:31:27
Fritz
Hallo Chris,
ich weiss, verbundene Zellen ...
Dennoch vielen Dank für Deine Arbeit, ich komm jetzt soweit klar.
Schönen (Fußball-)Abend
Gruß
Fritz
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige