我正在尝试在“发送”按钮下设置Outlook宏,将DeferredDeliveryTime设置为当前时间加上60分钟。
我已经按下了Alt + F11,创建了一个模块并将其放在一个子文件中:
Sub delay_delivery(ByVal item As Object)
Dim mailItem As MailFormat
Set mailItem = item
mailItem.DeferredDeliveryTime = DateAdd("n", 90, Now)
End Sub
并在快速访问工具栏中添加了指向宏的链接,但没有任何反应。
答案 0 :(得分:3)
我认为您遇到的问题是您的程序永远不会得到"项目"。
所以你的程序被定义为
Sub delay_delivery(ByVal item As Object)
但是当你运行它时,"项目"参数永远不会进入程序。我还没有测试过您的代码,但我很惊讶它在运行时不会出现某种错误。
有几种方法可以做你想要的,但每种方法都有自己的问题。
请注意,用户需要在Outlook中启用宏才能使用这些宏,并且每次打开Outlook时都可能会提示用户。
第一个更简单,但不允许您使用宏,并且每次用户发送消息时都会提示。这需要放入" ThisOutlookSession"
Private Sub Application_ItemSend(ByVal olItem As Object, Cancel As Boolean)
Dim response As Integer
response = MsgBox("Would you like to send this in an hour?", vbYesNo)
If response = vbYes Then
olItem.DeferredDeliveryTime = DateAdd("n", 90, Now)
End If
End Sub
这会捕获电子邮件的发送事件,如果用户在消息框中选择,则会将延迟发送属性放在电子邮件中。
第二种方式将允许此人使用宏,但是,如果此人打开了多封电子邮件,选择其中一个中的宏,但是然后先发送另一个,它会将延迟的发送属性放在哪个选择宏后发送项目。发送电子邮件后,它会将延迟传递重置为false。为此,请将以下代码添加到" ThisOutlookSession"
Option Explicit
Private DelaySend As Boolean 'To store whether user wishes to delay
Private Sub Application_Startup()
DelaySend = False 'Set delaysend initially to false
End Sub
Sub delay_delivery()
DelaySend = True 'Set delay send when user clicks macro.
End Sub
Private Sub Application_ItemSend(ByVal olItem As Object, Cancel As Boolean)
If DelaySend = True Then 'Check if user set delay_send
olItem.DeferredDeliveryTime = DateAdd("n", 90, Now)
End If
DelaySend = False 'Reset DelaySend to False
End Sub
如果您想要做其他事情,可以考虑使用此处显示的程序捕获新电子邮件:Capture New Emails
然后,您可以想出一些方法来存储已打开的电子邮件,以及它们是否已设置为" DelaySend"状态,但这样一个功能齐全的应用程序超出了这个答案的范围。
编辑:请参阅此问题,了解如何与当前打开的电子邮件Current Email进行互动,然后修改以设置延迟投放标记。
答案 1 :(得分:1)
你不能把你的代码放在QAT上。您必须在传递项目时调用此代码。
在ThisOutlookSession中:
Private Sub Application_ItemSend(ByVal Item As Object, cancel As Boolean)
Item.DeferredDeliveryTime = DateAdd("n", 60, Now)
End Sub
当您按发送按钮时,正在发送的项目将是所需的参数。