在工作时间以外停用Excel加载项

在工作时间以外停用Excel加载项,excel,vba,add-in,Excel,Vba,Add In,每当打开工作簿时,我都使用外接程序将所有vba代码导出到存储库。它对版本控制非常有效,但我必须记得在每天晚上离开办公室之前停用它。如果我不这样做,那么通宵运行的自动化Excel进程将生成提示,直到清除对话框(即导出代码…是/否?)后才能继续。当我登录时,我盯着几个Excel对话框等待响应 请注意,我并不总是想导出代码……有时我只想打开文件并检查某些内容,因此需要“是/否”对话框 如何在自动化流程开始运行之前,每晚在设定的时间自动停用外接程序?请注意,早上手动重新激活它不是问题 如果无法自动停用外

每当打开工作簿时,我都使用外接程序将所有vba代码导出到存储库。它对版本控制非常有效,但我必须记得在每天晚上离开办公室之前停用它。如果我不这样做,那么通宵运行的自动化Excel进程将生成提示,直到清除对话框(即导出代码…是/否?)后才能继续。当我登录时,我盯着几个Excel对话框等待响应

请注意,我并不总是想导出代码……有时我只想打开文件并检查某些内容,因此需要“是/否”对话框

如何在自动化流程开始运行之前,每晚在设定的时间自动停用外接程序?请注意,早上手动重新激活它不是问题

如果无法自动停用外接程序,则可以选择在夜间自动回答“否”对话框。是否有办法自动单击MsgBox的“否”按钮


提前谢谢

尝试在所有代码周围放置两个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
子测试()
如果时间值(现在)小于时间值(“06:00 PM”),则
如果时间值(现在)小于时间值(“08:00 AM”),则
'这里是原始代码
其他:退出子系统
如果结束
其他:退出子系统
如果结束
端接头
如果时间晚于下午6:00或早于上午8:00,将自动退出sub

如果您希望能够灵活地选择在下班后执行代码,您可以这样做:

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
子测试()
ShowDurationSecs=5
将Rslt设置为整数
如果时间值(现在)小于时间值(“06:00 PM”),则
如果时间值(现在)小于时间值(“08:00 AM”),则
Rslt=CreateObject(“WScript.Shell”).PopUp(“将代码移动到存储库?”,ShowDurationSecs,“消息标题”,4+32)
如果Rslt=6,则
'这里是原始代码
其他:退出子系统
如果结束
其他:退出子系统
如果结束
其他:退出子系统
如果结束
端接头

此代码创建一个位于计时器上的对话框。如果框超时或用户单击“否”,则
Rslt
将不等于6,代码将不会执行。如果用户单击“是”,则
Rslt
将等于6,代码将执行。弹出框仅在两个小时之间显示。如果对话框没有那么大的不便,您可以去掉时间条件,并要求用户每次回答“是”,以便运行代码。任何对您的流程更有效的方法。

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
子测试()
将Rslt设置为整数
ShowDurationSecs=5
'如果超过小时,则弹出定时对话框并获取Rslt值(主动或被动)
如果TimeValue(Now)TimeValue(“07:00 PM”),则Rslt=CreateObject(“WScript.Shell”).PopUp(“是否要将此工作簿中的VBA代码保存到git存储库?”,ShowDurationSecs,“将代码保存到存储库”,4+32)
如果(时间价值(现在)>时间价值(“上午07:00”)和时间价值(现在)<时间价值(“下午07:00”))或Rslt=6,则“如果营业时间或Rslt=6
'运行代码导出例程
其他:退出子系统
如果结束
端接头

+感谢Jarom的定时弹出想法……我以前从未使用过这种技术,现在肯定会再次使用。

谢谢Jarom。是的,使用IFs将工作簿打开事件代码包装在.xlam中可以实现这一点。你的答案产生了一个额外的问题,尽管我没有首先考虑。有时我可能想在下班后工作,并且希望能够在这些时间将代码移动到存储库中。IF语句解决方案不会提供这种灵活性(自动禁止单击选项也不会)。我想知道我是否可以创建一个自动任务来停用外接程序,并在需要时仍然保留手动激活/停用外接程序的功能。请参阅我对以前答案所做的编辑。我认为这将解决你的担忧。如果它确实回答了您的问题,您可以通过单击绿色复选标记让其他用户知道。如果你还有任何问题,请告诉我。