【问题标题】:Run macro when user "locks" windows当用户“锁定”窗口时运行宏
【发布时间】:2015-03-06 20:38:52
【问题描述】:

我想在每次锁定我的 Windows 电脑时保存我的电子表格。 excel中是否有内置触发器(类似于关闭时)?或者我是否可以让宏每分钟运行一次并检查我的机器是否正在使用或锁定?

【问题讨论】:

    标签: excel windows-7 windows-runtime vba


    【解决方案1】:

    如果你真的需要这个,你可以尝试以下解决方法:

    在事件查看器中启用对锁定事件的审核,以便记录用于锁定的事件 4800,as described here

    创建锁定事件触发的计划任务。选择使用协议触发事件:“安全”,来源:“Microsoft-Windows-Security-Auditing”和事件 ID:“4800”

    运行一个使用 GetObject(, "Excel.Application") 的 vbscript 来检索当前活动的 excel 会话并运行一个为您保存 Application.Run 的宏(就像在 this example 中一样)

    不是很直接,但另一方面,最简单的方法是在每次锁定计算机之前按 ctrl+s

    【讨论】:

    • 感谢您的回答,并链接到所有指南,我很高兴您这样做了,因为我即将证明没有链接我是多么迷失!您提到“创建计划任务”,但不幸的是,我对使用哪个任务来触发我的事件有点迷茫。 There's a lot to pick from, and none are particularly well labelled!
    • 协议将是“安全”源将是“Microsoft-Windows-Security-Auditing”(我希望我翻译正确),事件 ID 将是 4800
    【解决方案2】:

    你可以试试这个,看看它是否有效,而不是使用宏:

    • 单击 Microsoft Office 按钮 ,然后单击 Excel 选项。
    • 点击保存。
    • 选中每隔 x 分钟保存一次自动恢复信息复选框。
    • 在分钟列表中,指定您希望程序保存数据的频率和程序状态。

    但如果您特别想要一个宏,我可以尝试为您构建一个。

    【讨论】:

    • 可悲的是,自动恢复保存仍然让我丢失数据,这已经启用。
    【解决方案3】:

    好的,将它添加到标准模块中:

    Option Explicit
    Public RunTime
    
    Sub StartTimer()
        RunTime = Now + #12:10:00 AM#
        Application.OnTime RunTime, "SaveBook", schedule:=True
    End Sub
    
    Sub SaveBook()
        ActiveWorkbook.Save
        StartTimer
    End Sub
    
    Sub StopTimer()
       On Error Resume Next
       Application.OnTime RunTime, "SaveBook", schedule:=False
    End Sub
    

    把它放在你的工作簿类模块中:

    Private Sub Workbook_Open()
        StartTimer
    End Sub
    
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    

    然后将其添加到您的工作簿类模块中:

    Private Sub Workbook_Open()
        StartTimer
    End Sub
    
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        StopTimer
    End Sub
    

    玩得开心,玩弄它

    【讨论】:

    • 这不会在用户锁定计算机时自动保存,它只会添加另一个自动保存功能。
    • 虽然这将是解决自动恢复问题的好方法,但它并没有真正考虑到我是否正在使用工作簿,而且你没有特别清楚之间的间隔保存? #12:10:00 AM# 是每 10 分钟一次吗?还是每 12 小时 10 分钟?无论如何,它作为一个后备是很好的 - 有没有我可以添加到sub SaveBook() 的函数“此工作簿是否处于活动状态”“屏幕保护程序是否正在运行”?跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多