Makro arbeitet nicht

Hallo zusammen,

ich hatte vor kurzer Zeit mal nach einer Lösung zur automatischen Zeiteintragung per Makro gefragt.
Reinhard hatte mir dann sehr schnell geholfen und es funktionierte auch. Ich wollte die Tabelle jetzt etwas abändern, und wieso auch immer, es funktioniert nicht mehr.
Eine wichtige Änderung ist wohl das Datumsformat, von TTT.TT.MM auf TTT.TT.MM.JJ
Leider kriege ich es nicht hin und vielleicht schaut mal jemand drüber und erklärt mir wo der Fehler ist.
Hier die Datei.

http://www.hostarea.de/server-12/Dezember-40c83e057a…

Ich möchte einfach, dass wenn man diese Datei öffnet, sich wenn noch keine Zeit in Spalte B eingetragen ist, dort die momentan aktuelle Zeit neben dem aktuellen Datum eingetragen wird, und in Spalte C die dann aktuelle Zeit, wenn die Datei geschlossen wird. Für den Fall das man den PC neu starten muss, soll dann natürlich die Anfangszeit in Spalte B erhalten bleiben, nur in Spalte C soll sich dann die Endzeit entsprechend ändern.

Bin wie immer für jede Hilfe dankbar.
Gruß
Jürgen

Grüezi Jürgen

ich hatte vor kurzer Zeit mal nach einer Lösung zur
automatischen Zeiteintragung per Makro gefragt.
Reinhard hatte mir dann sehr schnell geholfen und es
funktionierte auch. Ich wollte die Tabelle jetzt etwas
abändern, und wieso auch immer, es funktioniert nicht mehr.
Eine wichtige Änderung ist wohl das Datumsformat, von
TTT.TT.MM auf TTT.TT.MM.JJ

Vermutlich nicht.
So wie es aussieht ist das Startdatum nicht mehr dasselbe wie zu Beginn, daher findet der Code den Ausgangspunkt nicht mehr.

Ich möchte einfach, dass wenn man diese Datei öffnet, sich
wenn noch keine Zeit in Spalte B eingetragen ist, dort die
momentan aktuelle Zeit neben dem aktuellen Datum eingetragen
wird, und in Spalte C die dann aktuelle Zeit, wenn die Datei
geschlossen wird. Für den Fall das man den PC neu starten
muss, soll dann natürlich die Anfangszeit in Spalte B erhalten
bleiben, nur in Spalte C soll sich dann die Endzeit
entsprechend ändern.

Ersetze den enthaltendne Code mit den folgenden Zeilen - unabhängig von den Daten wird immer das aktuelle gesucht und dort die Zeiten eingetragen - an der Funktionalität ist nichts geändert, nur die Methode für das Suchen des Datums ist angepasst:

Sub Zeit()
Dim rngToday As Range

Set rngToday = Range(„A:A“).Find(What:=Date, _
LookIn:=xlFormulas)

With rngToday
If .Offset(0, 1) = „“ Then
.Offset(0, 1) = Format(Time, „hh:mm“)
Else
.Offset(0, 2) = Format(Time, „hh:mm“)
End If
End With
End Sub


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Vielen Dank
Grüezi Thomas,

vielen Dank für Deine schnelle Hilfe.

Guß
Jürgen

Dateibenutzungszeit erfassen

abändern, und wieso auch immer, es funktioniert nicht mehr.
Eine wichtige Änderung ist wohl das Datumsformat, von
TTT.TT.MM auf TTT.TT.MM.JJ
http://www.hostarea.de/server-12/Dezember-40c83e057a…

Ich möchte einfach, dass wenn man diese Datei öffnet, sich
wenn noch keine Zeit in Spalte B eingetragen ist, dort die
momentan aktuelle Zeit neben dem aktuellen Datum eingetragen
wird, und in Spalte C die dann aktuelle Zeit, wenn die Datei
geschlossen wird. Für den Fall das man den PC neu starten
muss, soll dann natürlich die Anfangszeit in Spalte B erhalten
bleiben, nur in Spalte C soll sich dann die Endzeit
entsprechend ändern.

Hallo Jürgen,
deine Datei ist sehr Arbeitnehmerfreundlich. Wenn ich die Datei morgens aufmache und wieder zumache , desgleichen Abends, habe ich 10 Stunden an der Datei gearbeitet :smile:

Kann ja sein daß es mal wer braucht, die genauen Dateiöffnungszeiten mitzuschreiben.
Nachfolgend der Code.
Die Datumsliste wird in Spalte A im Format TTT.TT.MM.JJ erwartet.
Die Zellfarben werden jetzt zur Laufzeit angepasst, ich dachte dadurch speichert die Datei schneller, dem ist aber nicht so.(bei XL97)

Hier die Beispielsdatei:

http://www.hostarea.de/server-12/Dezember-41ce7e5325…

Gruß
Reinhard

Im Modul „DieseArbeitsmappe“:

Option Explicit
'
Private Sub Workbook\_Open()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
 ws.Visible = xlSheetVisible
Next ws
Worksheets("Hinweis").Visible = xlSheetVeryHidden
Call Zeit
Call Start
Call Farben
End Sub
'
Private Sub Workbook\_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet
Worksheets("Hinweis").Visible = xlSheetVisible
For Each ws In ThisWorkbook.Worksheets
 If ws.Name "Hinweis" Then ws.Visible = xlSheetVeryHidden
Next ws
Call Zeit
Call Ende
Worksheets("Zeiterfassung").UsedRange.Interior.ColorIndex = -4142
End Sub



Option Explicit
Public Merker As Date
'
Sub Zeit()
Dim Zelle As Range
With Worksheets("Zeiterfassung")
 Set Zelle = .UsedRange.Find(DateValue(Now))
 If Not Zelle Is Nothing Then
 If Zelle.Offset(0, 1) = "" Then
 Zelle.Offset(0, 1) = Format(Time, "hh:mm")
 Else
 Zelle.Offset(0, 2) = Format(Time, "hh:mm")
 Zelle.Offset(0, 3) = Zelle.Offset(0, 2) - Zelle.Offset(0, 1)
 End If
 Else
 MsgBox "Datum nicht gefunden"
 End If
End With
End Sub
'
Sub Start()
Dim Zelle As Range
With Worksheets("Zeiterfassung")
 Set Zelle = .UsedRange.Find(DateValue(Now))
 If Not Zelle Is Nothing Then
 If Zelle.Offset(0, 1) = "" Then
 Merker = 0
 Zelle.Offset(0, 1) = Format(Time, "hh:mm")
 Else
 Merker = Time
 End If
 Else
 MsgBox "Datum nicht gefunden"
 End If
End With
End Sub
'
Sub Ende()
Dim Zelle As Range
With Worksheets("Zeiterfassung")
 Set Zelle = .UsedRange.Find(DateValue(Now))
 If Not Zelle Is Nothing Then
 Zelle.Offset(0, 4) = Format(Zelle.Offset(0, 4) - Merker + Time, "hh:mm:ss")
 Else
 MsgBox "Datum nicht gefunden"
 End If
End With
End Sub
'
Sub Farben()
Dim Zei As Long, Letzte As Long
With Worksheets("Zeiterfassung")
 Letzte = .Range("A" & .Rows.Count).End(xlUp).Row
 .UsedRange.Interior.ColorIndex = -4142
 .Range("A2:E" & Letzte).Interior.ColorIndex = 40
 For Zei = 2 To Letzte
 If WeekDay(.Cells(Zei, 1), 2) \> 5 Then
 .Range(.Cells(Zei, 1), .Cells(Zei, 5)).Interior.ColorIndex = 34
 End If
 Next Zei
End With
End Sub

Hallo Reinhard,

es geht nur um die Zeiten, die man tatsächlich am Arbeitsplatz verbringt.
Bisher ist dies immer manuell sowohl morgens wie abends eingetragen worden. Dies sollte nun mit einer automatischen Funktion erleichtert werden. Abrechnungstechnisch hat diese Datei keinerlei Wert, nur um festzuhalten an welchen Tagen überhaupt „Anwesenheit“ erfolgte, und wie lange. Diese Datei hat dann in der fertigen Version noch mehr Spalten, so dass automatisch festgelegte Pausenzeiten z.B. abgezogen werden.
Vielen Dank für die erneute Hilfe.

Gruß
Jürgen