Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1056to1060
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

Schutz auf ausgefüllte Zellen

Schutz auf ausgefüllte Zellen
08.03.2009 15:17:30
monistaudt
Hallo und guten Tag!
Ich arbeite in einer UserForm mit cmd-Buttons und einem DTPicker um Arbeitszeiten sowie Urlaubs- bzw Krankheitstage möglichst anwendersicher einzugeben.
Nun versuche ich schon seit Stunden einen Schutz auf bereits ausgefüllte Zellen zu legen.
Das klappt aber nicht wirklich gut, obwohl ich bereits viele hier in den Foren vorgeschlagene Codes ausprobiert habe.
Der unten aufgeführte Code funktioniert, aber nur für Spalte H. Ich brauche aber etwas, das gleichzeitig bei mehreren Spalten funktioniert also außer bei H auch bei Spalte I, J, K und AG.
Option Explicit

Private Sub ActiveSheets_Change(ByVal Target As Range)
Dim zelle As Range
Dim rngBereich As Range
Set rngBereich = Intersect(Target, Range("H:H,I:I"))
If Not rngBereich Is Nothing Then
ActiveSheet.Protect "Passwort", UserInterFaceOnly:=True
For Each zelle In ActiveSheets.UsedRange
If zelle.Value  "" Then
zelle.Locked = True
Else
zelle.Locked = False
End If
End Sub


Kann mir vielleicht jemand helfen? Danke.
mfg moni

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schutz auf ausgefüllte Zellen
08.03.2009 15:36:26
Uwe
Hi,
eigentlich müsste Dein Code auch für Spalte I klappen, und dann dementsprechend mit:

Set rngBereich = Intersect(Target, Range("H:K,AG:AG"))


für H bis K und AG. (Warum das nicht direkt sondern über eine Variable gemacht wird sehe ich allerdings nicht ein, stört aber wohl auch kaum)
Falls nicht lade mal ein Beispiel 'rauf, da müsste vielleicht woanders ein Fehler sein.
Gruß
Uwe
(:o)

AW: Schutz auf ausgefüllte Zellen
08.03.2009 16:36:43
monistaudt
Hallo Uwe,
danke für Deine schnelle Antwort.
Es hat etwas gedauert bis ich meine Datei upload-fähig hatte, sie war viel zu groß.
https://www.herber.de/bbs/user/60104.xls
Ich möchte erreichen, daß die Zellinhalte nach einer über das Userformuar erfolgten Eingabe keiner Änderung mehr zuänglich sind es sei den man gibt ein Passwort ein.
Es wäre es auch nicht schlecht wenn ein Code für alle oder mehrere Blätter gelten würde . Aber das ist nicht so wichtig, es würde nur helfen die Übersicht nicht zu verlieren.
Warum ich das mit Variablen gemacht habe ? .... weil ich noch nicht so weit bin, Codes selbst zu schreiben, ich probiere das was ich finde aus und freue mich wenn es klappt. Oft klappt es auch, aber eben nicht immer.
mfg moni
Anzeige
AW: Schutz auf ausgefüllte Zellen
13.03.2009 14:12:37
schauan
Hallo,
sorry, aber die Datei schaue ich mir noch nicht an. Aus dem Posting ergeben sich schon Schwachstellen.
Was ist mit Uwe's Lösung - geht die nicht?
Warum steht ActiveSheets_Change drüber? Wo hast Du denn den code reingestellt?
Wenn er nur in einem Blatt wirken soll, gehört da sdrüber:
Private Sub Worksheet_Change(ByVal Target As Range)
Für die ganze MAppe gehört der nach DieseArbeitsmappe und sollte so beginnen:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Gruß, Andre
AW: Schutz auf ausgefüllte Zellen
13.03.2009 16:08:45
monistaudt
Hallo Andre,
nein, leider hat Uwe's Lösung nicht funktioniert;
ich habe jetzt Deine Vorschläge ausprobiert und den Code mal hier mal dorthin verschoben aber auch das war nicht sonderlich erfolgreich;
Folgendes ist dabei rausgekommen
(1) Code in DieseArbeitsmappe

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim zelle As Range
Dim rngBereich As Range
Set rngBereich = Intersect(Target, Range("H:K,AG:AG"))
If Not rngBereich Is Nothing Then
ActiveSheet.Protect "dp09", UserInterFaceOnly:=True
For Each zelle In ActiveSheet.UsedRange
If zelle.Value  "" Then
zelle.Locked = True
Else
zelle.Locked = False
End If
Next
End If
-> Fehlermeldung die locked-eigenschaft des range-objektes kann nicht festgelegt werden
(2) Code im Arbeitsblatt Mitarbeiterin


Private Sub Worksheet_Change(ByVal Target As Range)
Dim zelle As Range
Dim rngBereich As Range
Set rngBereich = Intersect(Target, Range("H:K,AG:AG"))
If Not rngBereich Is Nothing Then
ActiveSheet.Protect "dp09", UserInterFaceOnly:=True
For Each zelle In ActiveSheet.UsedRange
If zelle.Value  "" Then
zelle.Locked = True
Else
zelle.Locked = False
End If
Next
End If
End Sub


-> Fehlermeldung die locked-eigenschaft des range-objektes kann nicht festgelegt werden
(3) Code im Formular Zeiterfassung


Private Sub Worksheet_Change(ByVal Target As Range)
Dim zelle As Range
Dim rngBereich As Range
Set rngBereich = Intersect(Target, Range("H:K,AG:AG"))
If Not rngBereich Is Nothing Then
ActiveSheet.Protect "dp09", UserInterFaceOnly:=True
For Each zelle In ActiveSheet.UsedRange
If zelle.Value  "" Then
zelle.Locked = True
Else
zelle.Locked = False
End If
Next
End If
End Sub


-> kein Gemecker und Herumzicken aber auch keinerlei Eingabeschutz, alle beschriebenen Zellen wurden kommentarlos mit neuen Werten überschrieben;
(4) Code (verändert) im Formular Zeiterfassung


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim zelle As Range
Dim rngBereich As Range
Set rngBereich = Intersect(Target, Range("H:K,AG:AG"))
If Not rngBereich Is Nothing Then
ActiveSheet.Protect "dp09", UserInterFaceOnly:=True
For Each zelle In ActiveSheet.UsedRange
If zelle.Value  "" Then
zelle.Locked = True
Else
zelle.Locked = False
End If
Next
End If
End Sub


-> wie bei (3) keinerlei Eingabeschutz, alle beschriebenen Zellen wurden kommentarlos mit neuen Werten überschrieben;
... hast Du vielleicht sonst noch eine Idee?
mfg monistaudt

Anzeige
AW: Schutz auf ausgefüllte Zellen
13.03.2009 17:02:15
Uwe
Hi,
versuch's mal so:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
Dim rngBereich As Range
Set rngBereich = Range("H:K,AG:AG")
If Not Intersect(Target, rngBereich) Is Nothing Then
ActiveSheet.Protect "dp09", UserInterFaceOnly:=True
For Each Zelle In Target
If Zelle.Value  "" Then
Zelle.Locked = True
Else
Zelle.Locked = False
End If
Next
End If
End Sub


Bei mir klappt es.
Gruß
Uwe
(:o)

AW: Schutz auf ausgefüllte Zellen
13.03.2009 19:41:11
monistaudt
Hallo Uwe,
bei mir geht's leider nicht; auch nicht wenn ich mir meine eigene Datei aus dem Forum herunterlade und Deinen Code dort einfüge;
wenn ich z.B. den CmdButtons morgens im Abstand von ~1 Minute 2x anklicke wird die entsprechende Zelle einfach mit der 2ten Uhrzeit überschrieben;
mfg moni
Anzeige
AW: Schutz auf ausgefüllte Zellen
14.03.2009 11:42:57
Uwe
Hi moni,
das liegt daran, dass Du mit:
.....

UserInterFaceOnly:=True


ausdrücklich zugelassen hast, dass das Blatt von Makros geändert werden kann.
Ich würde vorschlagen, das ändern der Zelle direkt im Commandbutton Code zu verhindern. Ich habe mal den Code für den Morgens-Button so umgeschrieben und dabei auch gleich das .Select 'rausgenommen, das nur stört.
(Außerdem habe ich Deine verbundenen Zellen mit A1 links oben wieder aufgelöst, da das eine Fehlerquelle ist und ich auch keinen Sinn darin sehe.)
Hier der Code, schau mal ob Dir das so gefällt:


Private Sub cmdMorgens_Click()
Dim Zelle As Range
For Each Zelle In _
ThisWorkbook.ActiveSheet.Range("c:c").Cells
If Zelle.Value = Date _
And Zelle.Offset(0, 5).Value = "" Then
Zelle.Offset(0, 5).Value = Format(Now, "hh:mm")
Exit For
ElseIf Zelle.Value = Date _
And Zelle.Offset(0, 5).Value  "" Then
MsgBox "Zeiteintrag ist schon vorhanden!!!!"
Exit For
End If
Next Zelle
End Sub


Gruß
Uwe
(:o)

Anzeige
AW: Schutz auf ausgefüllte Zellen
15.03.2009 03:55:22
monistaudt
Hallo Uwe,
so gefällt mir das sogar sehr gut;
jetzt funktioniert alles perfekt und es ist auch viel übersichtlicher;
ich hatte es schon ein bißchen vermutet, das es mit dem "UserInterFaceOnly:=True" zu tun hatte; aber einfach weglassen hat nicht geholfen ....
.. wer sich nicht auskennt, macht viele Umwege ....
Danke für Deine Hilfe und einen schönen Sonntag noch
monistaudt

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige