VBA - 获取Window登录事件和注销(Or Lock)事件并写入Spreadsheet

时间:2014-01-28 02:19:53

标签: vba windows-7 excel-2007 event-viewer

我正在构建一个模板来管理我的工作时间。

目前我一直在寻找一些例子,但没有发现许多对我来说很有意义的事情:(。

我是否正在查看带有宏的excel模板,以记录早上的第一次登录事件和当天结束时的最终注销(或锁定)事件。

这需要一次一个星期,但只需要一些例子让我开始。

有点长的......:

如果事件日志日期在单元格中指定日期,则返回第一个登录时间,然后返回同一日期的上次注销或锁定事件。

这只是基础知识,然后我将其余部分填入休息时间等等......

谢谢。

1 个答案:

答案 0 :(得分:2)

我继续并对某些功能做了一些假设,因为您希望能够根据自己的需要进行调整。

我认为最有可能出现以下情况:

  1. 工作簿早上打开(在启动文件夹中放置工作簿的快捷方式),然后手动保存&关闭(我让你有机会搞清楚如何自动化这个)。
  2. 工作簿在注销之前重新打开(可以使用Windows自动任务,我认为),然后再次手动保存&封闭即可。
  3. 您正在使用的工作表称为“模板
  4. 建议栏目:Date | Log-On Time | Log-Out Time | Total Time
  5. 如果您在真正注销之前无意中打开了工作簿,只需擦除错误信息,保存关闭重新打开

    最后,这是代码:

    Private Sub Workbook_Open()
        Dim currentTime As Date, currentDay As Date
        currentTime = Format(Now(), "hh:mm")
        currentDay = Format(Now(), "mm/dd/yyyy")
    
        Dim template As Worksheet
        Set template = Worksheets("Template")
    
        With template
            'find the last log-out to use the next line
            last = .Cells(Rows.Count, 3).End(xlUp).Row + 1
    
            If .Cells(last, 2) = "" Then
            'log-on event
                .Cells(last, 1) = currentDay
                .Cells(last, 2) = currentTime
    
            Else
            'log-out event
                .Cells(last, 3) = currentTime
                .Cells(last, 4) = Format(currentTime - CDate(.Cells(last, 2)), "hh:mm")
            End If
        End With
    End Sub
    

    编辑:我想您也可以弄清楚如何轻松计算休息时间。