【发布时间】:2015-11-02 15:19:27
【问题描述】:
目前,我在所有已发送的项目上运行一个宏,以检查我是否正在向特定客户发送电子邮件。如果是,它会检查是否存在客户对所有消息的要求之一,如果不是,它会询问是否需要“下一次更新到期”。见下文;
Public Sub application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim addrType
Dim addr
Dim recip
For Each recip In Item.Recipients
If recip.Type = olTo Then
addrType = recip.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3002001F")
If addrType = "EX" Then
addr = recip.AddressEntry.GetExchangeUser.PrimarySmtpAddress
Else
addr = recip.Address
End If
If LCase(addr) = "relevantemail1@outlook.com" Or LCase(addr) = "relevantemail2@outlook.com" Then
If InStr(1, Item.Body, LCase("next update due"), vbTextCompare) > 0 Then
Call errhandler
Else
'ask if we've added the date
prompt$ = "You're sending this to company x and have not added a 'next update due' date, do you need to add one?"
If MsgBox(prompt$, vbYesNo + vbQuestion + vbMsgBoxSetForeground, "Check Address") = vbYes Then
Cancel = True
End If
Exit For
End If
End If
End If
Next
End Sub
我仍然真正掌握了其中的 Outlook VBA 和字符串函数等基础知识。所以我的问题是:我可以在文本“下一次更新到期:”之后找到字符串(理想情况下我想要一个格式化的日期,但暂时可以使用一个字符串)?本质上,总会有两个分隔符“:”来开始日期,回车结束日期。一旦我可以检索到它,我就可以将相关信息导出到一个 excel 文档中,但是我正在为字符串/日期的初始检索而苦苦挣扎。
希望你们能提供帮助,如果需要,非常乐意扩展上述代码。
【问题讨论】:
-
上述代码是否按预期工作?各种字符串操作都可以用 vba 完成。它很潮而且可能会令人困惑,但我确信通过一些狡猾的功能它是可行的。我在此找不到 vba msdn 页面,但 vb one 非常相似。你最终会做类似
Left(Left(Body, Instr(body, "next update due")),instr(Body, vbcrlf) - Instr(body, "next update due"))之类的事情。