我尝试使用以下代码在桌面上的tempfolder上保存Outlook中的选定邮件。
Public Sub SaveMessageAsMsg1()
Dim oMail As Outlook.MailItem
Dim objItem As Object
Dim sPath As String
Dim dtDate As Date
Dim sName As String
Dim enviro As String
enviro = CStr(Environ("USERPROFILE"))
For Each objItem In ActiveExplorer.Selection
If objItem.MessageClass = "IPM.Note*" Then
Set oMail = objItem
sName = oMail.Subject
ReplaceCharsForFileName sName, "-"
dtDate = oMail.ReceivedTime
sName = Format(dtDate, "yyyymmdd", vbUseSystemDayOfWeek,vbUseSystem) & Format(dtDate, "-hhnnss", vbUseSystemDayOfWeek, vbUseSystem) & "-" & sName & ".msg"
sPath = "C:\Users\XBBLC1C\Desktop\TempEmail\"
Debug.Print sPath & sName
oMail.SaveAs sPath & sName, olMSG
End If
Next
End Sub
问题是某些邮件已在Enterprise Vault中存档,而保存这些邮件objItem.MessageClass
会生成值IPM.Note.EnterpriseVault.Shortcut
。
为了适应这种情况,我尝试在上面的代码中添加一个带有IPM.Note
的astrisk。但它没有用。
答案 0 :(得分:2)
我不确切地知道你要做什么,但行:
If objItem.MessageClass = "IPM.Note*" Then
可能不会进行您希望的比较。虽然' *'在某些情况下是一个通配符,它不是像这样的字符串比较。
我建议尝试:
If inStr(objItem.MessageClass, "IPM.Note") <> 0 Then
如果&#34; IPM.Note&#34;在消息类中的任何位置
OR
If InStr(objItem.MessageClass, "IPM.Note") = 1 Then
如果&#34; IPM.Note&#34;在消息类的开头。
同样可以使用
If objItem.MessageClass like "IPM.Note*" Then
如果你想要更接近你最初写作的东西。
答案 1 :(得分:2)
您可以执行OpiesDad建议并检查MessageClass属性,或者您可以检查MailItem.Class
属性 - 对于常规MailItem对象,它将是43(OlObjectClass.olMail):
If objItem.Class = 43 Then
...