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

Deactivate Excel add-in outside business hours

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

请注意,我并不总是想导出代码...有时我只想打开文件并检查一些内容,因此需要 Yes/No 对话框。

如何在每晚自动进程开始前的设定时间自动停用加载项 运行ning?请注意,早上手动重新激活它是没有问题的。

如果无法自动停用加载项,可以选择在夜间使用 "No" 自动回答对话框。有没有办法自动点击 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

如果晚于 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

此代码创建一个带有计时器的对话框。如果框超时或用户单击 'No',则 Rslt 将不等于 6,代码将不会执行。如果用户单击 'Yes',Rslt 将等于 6,代码将执行。弹出框只会在这些时间之间显示。如果对话框不是那么麻烦,您可以去掉时间条件,要求用户每次都回答 'Yes' 以便 运行 代码。任何更适合您的流程。

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

+1 给 Jarom 的定时 pop-up 想法...我以前从未使用过这种技术,并且肯定会再次使用它。