Supportnet / Forum / Tabellenkalkulation
VBA: Timer-Sperre
Frage
Guten Tag
Um was es geht:
Ich habe ein Arbeitszeit-Sheet, wo die User selbstständig Ihre arbeitszeit eintragen. Damit man aber nicht wochenlang zurück die Arbeitszeiten verändern kann möchte ich eine automatische sperre einrichten. Dazu habe ich hier aus dem Forum schon folgenden Code entnommen (siehe unten). soweit funktioniert das mit dem timer. nur wenn ich beispielsweise 24h als sperr-timer eingebe, dann sollte man 24h zeit haben die zelle zu bearbeiten. ABER wenn man das sheet schliesst und es gleich wieder öffnet sind wieder alle zellen gesperrt, auch diese wo man noch 23h zeit hätte zu korrigieren.
Da ich in VBA nicht gut bin, hoffe ich, dass mir da jemand helfen kann.
VBA Projekt "DieseArbeitsmappe":
-----------------------------------------------------
Option Explicit
Private Sub Workbook_Open()
Zellen_sperren
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Timer_stoppen
End Sub
StandardModul:
-----------------------------------------------------
Option Explicit
Public Zeitspanne As Variant
Sub Zellen_sperren()
Dim Bereich As Range
For Each Bereich In ActiveSheet.UsedRange.Cells
If WorksheetFunction.CountA(Bereich) <> 0 Then
ActiveSheet.Unprotect ""
Bereich.Locked = True
ActiveSheet.Protect ""
End If
Next
Zeitspanne = Now + TimeValue("00:05:00")
Application.OnTime Zeitspanne, "Zellen_sperren"
End Sub
Sub Timer_stoppen()
Application.OnTime EarliestTime:=Zeitspanne, Procedure:="Zellen_sperren", schedule:=False
End Sub
Antwort 1 von Pistenschreck
Hallo skillY
Wäre es nicht einfacher nach Datum sperren als nach Stunden. Du hast ja bestimmt irgendwo ein Tagesdatum. Hier währe das Datum z.B. in Spalte A
Sub Zellen_SPERREN()
x = Date
For i = 2 To [A65536].End(xlUp).Row
If Cells(i, 1) < x - 1 Then Range(Cells(i, 1), Cells(i, 10)).Locked = True
Next i
End Sub
Mit dem x-1 kannst Du den gestrigen Tag noch bearbeiten.
Gruss Werner
Wäre es nicht einfacher nach Datum sperren als nach Stunden. Du hast ja bestimmt irgendwo ein Tagesdatum. Hier währe das Datum z.B. in Spalte A
Sub Zellen_SPERREN()
x = Date
For i = 2 To [A65536].End(xlUp).Row
If Cells(i, 1) < x - 1 Then Range(Cells(i, 1), Cells(i, 10)).Locked = True
Next i
End Sub
Mit dem x-1 kannst Du den gestrigen Tag noch bearbeiten.
Gruss Werner
Antwort 2 von skillY
Ja, mit Datum wäre das auch nicht schlecht. nur habe ich 365tage in dieser excel-tabelle. wie müsste dann der code genau lauten? wäre sehr nett, wenn du mir das genau zeigen könntest, dass ich nur noch kopieren muss, da ich echt keine ahnung habe von VBA :(
Antwort 3 von Pistenschreck
Hallo skillY
Das geht mir auch so. Ich sehe ja Deine Tabelle auch nicht und weiss deshalb nicht wo Deine Datums stehen, und um welchen Bereich es gilt, die Zellen zu schützen.
Das war nur ein Tipp von mir. Kannst Du die Tabelle mal auf´s Netz legen?
www.uploadagent.de
Gruss Werner
Das geht mir auch so. Ich sehe ja Deine Tabelle auch nicht und weiss deshalb nicht wo Deine Datums stehen, und um welchen Bereich es gilt, die Zellen zu schützen.
Das war nur ein Tipp von mir. Kannst Du die Tabelle mal auf´s Netz legen?
www.uploadagent.de
Gruss Werner
Antwort 4 von skillY
Hallo Werner
Ich habe dir Die Datei hochgeladen. Es sind glaube ich noch keine Dateums irgendwo vorhanden. das müsst man dann irgendwie noch einbringen?
http://www.uploadagent.de/files/1167722313/Arbeitszeit.xls
Hoffe du kannst mir somit weiterhelfen
Besten Dank und ein schönes neues Jahr wünsche ich
Gruss SkillY
Ich habe dir Die Datei hochgeladen. Es sind glaube ich noch keine Dateums irgendwo vorhanden. das müsst man dann irgendwie noch einbringen?
http://www.uploadagent.de/files/1167722313/Arbeitszeit.xls
Hoffe du kannst mir somit weiterhelfen
Besten Dank und ein schönes neues Jahr wünsche ich
Gruss SkillY
Antwort 5 von skillY
hoffentlich hast du mich nicht vergessen :)

