营业时间以外停用Excel加载项

时间:2018-03-21 21:42:14

标签: excel vba add-in

每当打开工作簿时,我都使用外接程序将所有vba代码导出到存储库。它适用于版本控制,但我必须记得在我每天晚上离开办公室之前停用它。如果不这样,过夜运行的自动Excel进程会生成提示,并且在清除对话框之前无法继续(即导出代码...是/否?)。当我登录时,我正在盯着几个等待响应的Excel对话框。

请注意,我并不总是想要导出代码...有时我只是想打开文件并检查一下,所以需要是/否对话框。

如何在自动流程开始运行之前的某个时间每晚自动停用加载项?请注意,在早上手动重新激活它不是问题。

如果无法自动加载项停用,则可以选择在夜间自动应答“否”的对话框。有没有办法自动点击MsgBox的No按钮?

提前致谢!

2 个答案:

答案 0 :(得分:1)

尝试在所有代码周围放置两个IF语句,如下所示:

Sub test()


If TimeValue(Now) < TimeValue("06:00 PM") Then
    If TimeValue(Now) < TimeValue("08:00 AM") Then
    'Original Code Here
    Else: Exit Sub
    End If
Else: Exit Sub

End If

End Sub

如果晚于下午6:00或早于上午8:00,这将自动退出。

如果您希望能够灵活地选择在下班后执行代码,则可以执行此操作:

Sub test()

ShowDurationSecs = 5

Dim Rslt As Integer

If TimeValue(Now) < TimeValue("06:00 PM") Then
    If TimeValue(Now) < TimeValue("08:00 AM") Then
        Rslt = CreateObject("WScript.Shell").PopUp("Move Code to Repository?", ShowDurationSecs, "Message Title", 4 + 32)
        If Rslt = 6 Then
        'Original Code Here
        Else: Exit Sub
        End If
    Else: Exit Sub
    End If
Else: Exit Sub

End If

End Sub

此代码创建一个计时器上的对话框。如果框超时或用户单击“否”,则Rslt将不等于6,代码将不会执行。如果用户单击“是”,则Rslt将等于6,代码将执行。弹出框仅显示在这些小时之间。如果对话框没有太大的不便,您可以摆脱时间条件,并要求用户每次都回答“是”以运行代码。无论哪种方法都适合您的工艺。

答案 1 :(得分:1)

Jarom的建议导致了这个解决方案(感谢Jarom!)。使用布尔值重新修改了条件:

Sub test()

Dim Rslt As Integer

ShowDurationSecs = 5

'if after hours, then pop up timed-dialog and acquire Rslt value (actively or passively)

If TimeValue(Now) < TimeValue("07:00 AM") And TimeValue(Now) > TimeValue("07:00 PM") Then Rslt = CreateObject("WScript.Shell").PopUp("Do you want to save the VBA code in this workbook to the git repository?", ShowDurationSecs, "Save Code to Repository", 4 + 32)

If (TimeValue(Now) > TimeValue("07:00 AM") And TimeValue(Now) < TimeValue("07:00 PM")) Or Rslt = 6 Then 'if business hours OR Rslt = 6
'run code export routine
Else: Exit Sub
End If

End Sub
对于定时的弹出式创意,给Jarom +1了......我之前从未使用过这种技术,肯定会再次使用它。