Wie würdet Ihr einen Blattschutz ab Verfallsdatum einrichten? Gibt es da Standardfunktionen oder geht das nur mit VBA?
Hallo Peter,
das geht wohl nur mit VBA.
Wo sollte denn das Verfallsdatum stehen? Wenn man das weiss, kann man eine Eregnisprozedur schreiben, die z. B. bei Blattaktivierung das Datum prüft und dann nach Verfall das Blatt schützt. Man könnte das ganze auch beim Open-Ereignis der Mappe (evtl. für mehrere Blätter) machen.
Grüße (kann nicht schaden)
Erich
Wie würdet Ihr einen Blattschutz ab Verfallsdatum einrichten?
Gibt es da Standardfunktionen oder geht das nur mit VBA?
in diese Arbeitsmappe
Private Sub Workbook_Open()
Dim wks As Worksheet
Dim verfall As Date
verfall = „dein Datum einsetzen“
For Each wks In Worksheets
If Date
Spitzenmäßig - so eine ausführliche Antwort. Da ich leider VBA-neuling bin, brauche ich offensichtlich noch eine Info:
Ich habe Deinen Code in EIN Modul kopiert, ein Datum eingesetzt und ausgeführt => KEINE Fehlermeldung. Aber leider auch KEIN ERfolg. Ich kann in alle Tabellenblätter schreiben. Nachstehend mein adaptierter Code zur Prüfung:
Private Sub Workbook_Open()
Dim wks As Worksheet
Dim verfall As Date
verfall = „12.05.2005“
For Each wks In Worksheets
If Date [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Peter,
den Code von Spaguzzi muß du im VBA-Editor nach Doppelklick auf „Diese Arbeitsmappe“ einfügen.
Folgende Zeile kann danach noch Ärger bereiten, da EXCEL bei Verarbeitung von Datumsangaben in VBA etwas eigen ist:
verfall = „12.05.2005“
Fall es Probleme gibt, dann ändern in
verfall = cdate(„12.05.2005“)
Fall du nur einzelne Tabelle schützen möchtest, dann mein Vorschlag. Das Verfalldatum wird dann in Zelle „B1“ (kannst du natürlich anpassen) eingetragen. Den Code kopierst du im VBA-Editor dann in den Abschnitt der entsprechenden Tabelle.
Private Sub Worksheet\_Activate()
Dim Verfalldatum As Date
Verfalldatum = Application.Range("B1").Value
If Date \>= Verfalldatum Then
ActiveSheet.Protect Password:="Passwort", DrawingObjects:=True, Contents:=True, Scenarios:=True
MsgBox ("Tabelle ist geschützt")
End If
End Sub
Private Sub Worksheet\_SelectionChange(ByVal Target As Excel.Range)
If Target.Address = "$B$1" Then
If InputBox("Kennwort?", "Zellwert ändern", "\*\*\*") "Passwort" Then GoTo NaechsteZelle
ActiveSheet.Unprotect Password:="Passwort"
Target.Value = CDate(InputBox("Verfalldatum?", "Zellwert ändern", Format(Target.Value, "DD.MM.YYYY")))
NaechsteZelle:
ActiveCell.Offset(1, 0).Select
End If
End Sub
Gruß
Franz
Spitzenmäßig - so eine ausführliche Antwort. Da ich leider
VBA-neuling bin, brauche ich offensichtlich noch eine Info:Ich habe Deinen Code in EIN Modul kopiert, ein Datum
eingesetzt und ausgeführt => KEINE Fehlermeldung. Aber
leider auch KEIN ERfolg. Ich kann in alle Tabellenblätter
schreiben. Nachstehend mein adaptierter Code zur Prüfung:Private Sub Workbook_Open()
Dim wks As Worksheet
Dim verfall As Date
verfall = „12.05.2005“
For Each wks In Worksheets
If Date
wie schon Franz anklingen lies:
der Code gehört in:
Diese Arbeitsmappe
mfg
Spaguzzi
Irgendwie klappt mein Posten nicht. Ich schreibe jetzt zum DRITTEN MAL. Hoffe, dass es nun ankommt:
Kurz geschrieben: Code muss bei Datumsprüfung Problem haben - es wird das Blatt IMMER geschützt - egal welches Datuim in B2 steht.
Siehe: http://www.edvpeter.at/blattschutz.xls
Danke - Peter
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Irgendwie klappt mein Posten nicht. Ich schreibe jetzt zum
DRITTEN MAL. Hoffe, dass es nun ankommt:Kurz geschrieben: Code muss bei Datumsprüfung Problem haben -
es wird das Blatt IMMER geschützt - egal welches Datuim in B2
steht.Siehe: http://www.edvpeter.at/blattschutz.xls
Danke - Peter
Hallo Peter,
ich sehe du wendest jetzt meinen Vorschlag an. Freut mich.
Bei meinem Vorschlag muß du das Verfalldatum in Zelle B1 eintragen!!! Falls du gerne Zelle B2 verwenden möchtest, dann muß du in den Makros jeweils B1 durch B2 bzw. $B$1 durch $B$2 ersetzen.
Die Makros sehen dann so aus:
Private Sub Worksheet\_Activate()
Dim Verfalldatum As Date
Verfalldatum = Application.Range(" **B2**").Value
If Date \>= Verfalldatum Then
ActiveSheet.Protect Password:="Passwort", DrawingObjects:=True, Contents:=True, Scenarios:=True
MsgBox ("Tabelle ist geschützt")
End If
End Sub
Private Sub Worksheet\_SelectionChange(ByVal Target As Excel.Range)
If Target.Address = " **$B$2**" Then
If InputBox("Kennwort?", "Zellwert ändern", "\*\*\*") "Passwort" Then GoTo NaechsteZelle
ActiveSheet.Unprotect Password:="Passwort"
Target.Value = CDate(InputBox("Verfalldatum?", "Zellwert ändern", Format(Target.Value, "DD.MM.YYYY")))
NaechsteZelle:
ActiveCell.Offset(1, 0).Select
End If
End Sub
„Passwort“ solltes du natürlich durch eine eigene Kreation ersetzen. Falls du ganz auf Nummer sicher gehen willst, dann muß du auch das VBA-Project schützen (im VBA-Editor VBA-Project anklicken, rechte Maustaste–> VBA-Projetc-Eigenschaften --> Schutz --> Projekt für Anzeige sperren aktivieren und Passwort eingeben).
Gruß
Franz
DANKE - KLAPPT!
Die Sache klappt! - Danke!