Microsoft Excel

Herbers Excel/VBA-Archiv

Zeiteintrag in Tabelle wenn PC in Sleeptime geht?


Betrifft: Zeiteintrag in Tabelle wenn PC in Sleeptime geht?
von: Jay
Geschrieben am: 10.12.2018 21:50:25

Hallo Zusammen.

Ich hab mal wieder eine Frage für Euch Profis.
- Ist es möglich, wenn der PC in den Ruhemodus (oder Powersavemodi)
einen Eintrag in eine Tabelle machen zu lassen?


Hintergrund:

Da ich seit neuem immer öfter HomeOffice tätige, und immer wieder gestört werde (☺ Kids), passiert es mir häufig, dass ich vergessen habe wenn ich aufgehört habe zu arbeiten (kennt der Eine oder Andere sicherlich).
Ich habe mir eine kleine Datei geschrieben (nix tolles, aber reicht) in der ich manuell die Zeit Ein.- bzw. Austrage. Aber es wäre einfacher, wenn es eine Möglichkeit gäbe, eine kleine Automation mit einzubauen.

Ich hoffe ihr habt mal wieder geniale Ideen.

Im Voraus vielen lieben Dank.

Gruß Jay

Der Code:

  • Sub ZeitEintragen()
    '
    '   Zeile nach unten verschieben und Format übertragen
    '
    If Cells(4, 3) = "" Then Exit Sub
    '
    '
    '
        Range(Cells(4, 1), Cells(4, 6)).Select
        Selection.Copy
        Selection.Insert Shift:=xlDown
        Application.CutCopyMode = False
        Range(Cells(4, 1), Cells(4, 6)).ClearContents
        Cells(4, 1) = Format(Date, "dd.mm.yyyy")
        Cells(4, 2) = Format(Time, "hh:mm:ss")
        
        Range("B4").Select
    '
    ActiveWorkbook.Save
    '
    End Sub
    Sub ZeitAustragen()
    '
    '   Endzeit in Spalte C eintragen
    '
    Dim LZL As Long
    Dim i As Long
    '
        Sheets("Zeiterfassung").Activate
    '
    '    LZL = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
    '
        Cells(4, 3) = Format(Time, "hh:mm:ss")
    '
    '   Dauer berechnen und in Spalte D eintragen
    '
        Cells(4, 4).Select
         Selection.NumberFormat = "hh:mm:ss;@"
        Cells(4, 4) = Cells(4, 3) - Cells(4, 2)
    
        Cells(4, 1).Select
    '
    ZeitGesamt
    '
    ActiveWorkbook.Save
    '
    End Sub

  •   

    Betrifft: AW: Zeiteintrag in Tabelle wenn PC in Sleeptime geht?
    von: Torsten
    Geschrieben am: 11.12.2018 09:19:46

    Hallo Jay,

    was ich dir anbieten kann (wir benutzen dass in der Firma, um eventuelle zusaetzliche Pausen zu checken ;-)) ist, die Idle Time des PC zu checken und dann nach bestimmter Idle Time einen Eintrag zu machen. Wenn das deinen Anspruechen dient, sag bescheid.
    Muss halt nach deinen Beduerfnissen und deinem Sheet etwas umgebaut werden, aber das wird schon.

    Gruss Torsten


      

    Betrifft: AW: Zeiteintrag in Tabelle wenn PC in Sleeptime geht?
    von: Torsten
    Geschrieben am: 11.12.2018 11:41:56

    Da du noch nicht geantwortet hast, hab ich schon mal was vorbereitet.
    Ich weiss leider nicht, wie du die beiden Subs aufrufst, die du gepostet hast.
    Versuch mal folgendes:

    Kopiere diesen Code in ein leeres Modul:

    Public dTime As Date
    
    Type LASTINPUTINFO
        cbSize As Long
        dwTime As Long
    End Type
    
    Declare Sub GetLastInputInfo Lib "user32" (ByRef plii As LASTINPUTINFO)
    Declare Function GetTickCount Lib "kernel32" () As Long
     
    Function IdleTime() As Single
        Dim a As LASTINPUTINFO
        a.cbSize = LenB(a)
        GetLastInputInfo a
        IdleTime = (GetTickCount - a.dwTime) / 1000
    End Function
    
    Sub TestIdleTime()
        If IdleTime >= 10 * 60 Then
          Call ZeitAustragen
        Else
          StartTimer
        End If
      
    End Sub
    
    Sub StartTimer()
      dTime = Now + TimeValue("00:00:03")
      Application.OnTime dTime, "TestIdleTime", , True
    End Sub
    
    Sub StopTimer()
        On Error Resume Next
        dTime = Now + TimeValue("00:00:03")
        Application.OnTime dTime, "TestIdleTime", , False
    End Sub
    Die Zeit, in der keine Tastatur oder Maus benutzt wird (idle Time), hab ich mal auf 10 min gesetzt.
    Nach dieser "untaetigen" Zeit wird deine Sub ZeitAustragen aufgerufen, also wird die Endzeit eingetragen in deinem Sheet "Zeiterfassung".
    Um den Timer zu starten, ist es wohl am besten, das im Workbook_Open event zu machen. Also so:
    Private Sub Workbook_Open()
    
    StartTimer
    
    End Sub
    Aber der Timer sollte auch gestoppt werden, wenn das Workbook geschlossen wird, also:
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
    StopTimer
    
    End Sub
    Probiers mal aus und sag bescheid, wenn du noch Hilfe brauchst.

    Gruss Torsten


      

    Betrifft: AW: Zeiteintrag in Tabelle wenn PC in Sleeptime geht?
    von: Jay
    Geschrieben am: 12.12.2018 20:47:37

    Hallo Torsten.

    Als erstes vielen lieben Dank für deinen Code.

    Ich bin dabei ihn zu testen.

    Zum zweiten bitte ich um Verzeihung, dass ich mich nicht gleich gemeldet habe.
    Ich war leider privat Verhindert.

    Wenn ich Ergebnisse habe (ca. morgen), werde ich dies umgehend dir mitteilen.

    Nochmals vielen Dank
    Gruss Jay


      

    Betrifft: AW: Zeiteintrag in Tabelle wenn PC in Sleeptime geht?
    von: Jay
    Geschrieben am: 12.12.2018 21:09:49

    Hallo Torsten.

    Ich konnte es mir nicht verkneifen, Dein Makro aus zu probieren.

    HAMMER. Das klappt wirklich super ☺

    Vielen Dank

    LG Jay



      

    Betrifft: Gern geschehen
    von: Torsten
    Geschrieben am: 13.12.2018 07:45:07

    Hi Jay,

    freut mich. Vielen Dank fuer die Rueckmeldung.