每当打开工作簿时,我都使用外接程序将所有vba代码导出到存储库。它适用于版本控制,但我必须记得在我每天晚上离开办公室之前停用它。如果不这样,过夜运行的自动Excel进程会生成提示,并且在清除对话框之前无法继续(即导出代码...是/否?)。当我登录时,我正在盯着几个等待响应的Excel对话框。
请注意,我并不总是想要导出代码...有时我只是想打开文件并检查一下,所以需要是/否对话框。
如何在自动流程开始运行之前的某个时间每晚自动停用加载项?请注意,在早上手动重新激活它不是问题。
如果无法自动加载项停用,则可以选择在夜间自动应答“否”的对话框。有没有办法自动点击MsgBox的No按钮?
提前致谢!
答案 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了......我之前从未使用过这种技术,肯定会再次使用它。