Vba 禁用';规则';在发送电子邮件之前,然后在发送电子邮件后重新启用规则

Vba 禁用';规则';在发送电子邮件之前,然后在发送电子邮件后重新启用规则,vba,outlook,rules,Vba,Outlook,Rules,我有一个“Oh-Shi-”规则,它会将我的电子邮件发送延迟5分钟。 每当我希望电子邮件尽快到达收件人时,我就会禁用此规则。发送电子邮件后,将重新启用该规则 宏通过“消息”功能区上的按钮触发 有时会立即发送电子邮件 有时电子邮件会放在发件箱里。如果我在选项功能区下选中→ 延迟交付,设置了5分钟延迟。应禁用5分钟规则 下面是我的代码: Sub-OhShi() 将规则设置为Outlook.Rules 将规则设置为Outlook.Rule Dim intCount为整数 Dim blnExecute作为

我有一个“Oh-Shi-”规则,它会将我的电子邮件发送延迟5分钟。 每当我希望电子邮件尽快到达收件人时,我就会禁用此规则。发送电子邮件后,将重新启用该规则

宏通过“消息”功能区上的按钮触发

有时会立即发送电子邮件

有时电子邮件会放在发件箱里。如果我在选项功能区下选中→ 延迟交付,设置了5分钟延迟。应禁用5分钟规则

下面是我的代码:

Sub-OhShi()
将规则设置为Outlook.Rules
将规则设置为Outlook.Rule
Dim intCount为整数
Dim blnExecute作为布尔值
将objApp设置为Outlook.Application
设置objApp=应用程序
将答案变暗为VbMsgBoxResult
answer=MsgBox(“您确定要快速发送电子邮件吗?”,vbYesNoCancel+vbQuestion+vbDefaultButton1,“OhShi-规则被禁用!”)
如果答案=是,则
取消=错误
ElseIf answer=vbNo然后
取消=真
其他的
取消=真
如果结束
如果Cancel=False,则
'禁用规则
设置olRules=Application.Session.DefaultStore.GetRules
设置olRule=olRules.Item(“延迟交付5分钟”)
olRule.Enabled=False
如果blnExecute,则olRule.Execute ShowProgress:=True
规则,保存
'检查规则是否确实已禁用
如果olRule.Enabled=False,则
'发送活动电子邮件
设置objItem=objApp.ActiveInspector.CurrentItem
objItem.发送
其他的
MsgBox“脚本成功失败!”,vbCritical
如果结束
'重新启用规则
olRule.Enabled=True
如果blnExecute,则olRule.Execute ShowProgress:=True
规则,保存
设置规则=无
设置规则=无
设置objItem=Nothing
如果结束
端接头

我刚刚尝试删除重新启用该规则的代码部分,但该规则仍应用于电子邮件。代码运行后,我现在可以验证该规则是否确实已禁用,但它仍然会应用于电子邮件。

如果忽略禁用该规则,则在发送项目时可能有某些内容未同步

发送前等待可能会提高可靠性

子禁用规则()
把规则当作规则
将规则名称设置为字符串
把规则当作规则
作为对象的Dim objItem
将答案变暗为VbMsgBoxResult
作为字符串的Dim msg
设置olRules=Session.defaultStore.GetRules
olRuleName=“延迟交付5分钟”
Set olRule=olRules.Item(olRuleName)
设置objItem=ActiveInspector.currentItem
answer=MsgBox(“您确定要快速发送电子邮件吗?”_
vbOKCancel+vbQuestion+vbDefaultButton2_
“&olRuleName&”规则被禁用!”)
如果答案=vbOK,则
'禁用规则
olRule.Enabled=False
规则,保存
调试。打印vbCr&“已禁用规则。”
'如果同步是原因
等待的时间一样长
延迟日期
如果可能需要几分钟的时间,偶尔不发送fast可能会更好。
waitTime=3'秒-根据需要进行调整
调试。立即打印vbCr&“等待启动:”&N
延迟=日期添加(“s”,等待时间,现在)
Debug.Print“等待:”&延迟
执行到现在>延迟
多芬特
环
调试。立即打印“等待结束…”(&N)
调试。打印“至少”&waitTime&“秒延迟”以允许在某处同步
'发送活动电子邮件
objItem.发送
Debug.Print vbCr&“objItem.Send”
msg=“已同步已禁用规则的项目。”
调试。打印消息
MsgBox msg,vb信息
olRule.Enabled=True
规则,保存
调试。打印vbCr&“已重新启用规则。”
其他的
msg=“项目未发送。”
调试。打印消息
MsgBox msg,vb信息
如果结束
调试。打印“完成”
端接头

我建议对objItem.Send执行异步操作,因此在重新启用规则时,该项可能尚未发送,然后被捕获?你是否发现有更大的信息无法通过?您可能会发现一个延迟函数很有用,它检查objItem.Send和规则重新启用工作之间的
objItem.Sent
是否为
True
。不幸的是,我刚刚尝试删除重新启用规则的代码部分,但该规则仍应用于电子邮件。代码运行后,我现在可以验证该规则是否确实被禁用,但它仍然会应用到电子邮件中…这似乎暂时有效,在设置为正确答案之前,我将再尝试几天。我有点怀疑,因为我尝试过同样的方法,但是使用了睡眠功能,但不起作用,所以我想知道这种延迟方法是否有所不同,这就是为什么现在它似乎起作用的原因。无论如何,谢谢你迄今为止的帮助!在过去的几天里,它一直在完美地工作,感谢@niton!