Vba 从Outlook保存带有会议邀请的电子邮件

Vba 从Outlook保存带有会议邀请的电子邮件,vba,outlook,Vba,Outlook,我使用下面的VBA代码宏将所有选定的电子邮件以.msg格式保存到任何文件夹中,但它不会保存带有会议邀请的电子邮件。如何保存带有会议邀请的邮件?我必须包括任何特殊物品吗?下面是我用来以.msg格式保存电子邮件的代码: Option Explicit Public Sub SaveMessageAsMsg() Dim xShell As Object Dim xFolder As Object Dim strStartingFolder As String Dim xFolderItem As

我使用下面的VBA代码宏将所有选定的电子邮件以.msg格式保存到任何文件夹中,但它不会保存带有会议邀请的电子邮件。如何保存带有会议邀请的邮件?我必须包括任何特殊物品吗?下面是我用来以.msg格式保存电子邮件的代码:

Option Explicit

Public Sub SaveMessageAsMsg()

Dim xShell As Object
Dim xFolder As Object
Dim strStartingFolder As String
Dim xFolderItem As Object

Dim xMail As MailItem
Dim xObjItem As Object

Dim xPath As String
Dim xFileName As String
Dim xName As String
Dim xDtDate As Date

Set xShell = CreateObject("Shell.Application")

On Error Resume Next
' Bypass error when xFolder is nothing on Cancel
Set xFolder = xShell.BrowseForFolder(0, "Select a folder:", 0, strStartingFolder)
' Remove error bypass as soon as the purpose is served
On Error GoTo 0

If Not TypeName(xFolder) = "Nothing" Then
    Set xFolderItem = xFolder.Self
    xFileName = xFolderItem.Path
    ' missing path separator
    If Right(xFileName, 1) <> "\" Then xFileName = xFileName & "\"
Else
    xFileName = ""
    Exit Sub
End If

For Each xObjItem In ActiveExplorer.Selection

    If xObjItem.Class = olMail Then

        Set xMail = xObjItem

        xName = Left(CleanFileName(xMail.Subject), 100)
        Debug.Print xName

        xDtDate = xMail.ReceivedTime

        xName = Format(xDtDate, "yyyymmdd", vbUseSystemDayOfWeek, _
          vbUseSystem) & "-" & xName & ".msg"

        xPath = xFileName & xName

        xMail.SaveAs xPath, olMSG
    End If
Next

End Sub

Public Function CleanFileName(strFileName As String) As String

Dim Invalids
Dim e
Dim strTemp As String

Invalids = Array("?", "*", ":", "|", "<", ">", "[", "]", """", "/", "\")

strTemp = strFileName

For Each e In Invalids
    strTemp = Replace(strTemp, e, " ")
    'strTemp = Replace(strTemp, e, "")
Next

CleanFileName = strTemp

End Function
选项显式
公共子存储消息asmsg()
Dim xShell作为对象
将xFolder设置为对象
Dim strStartingFolder作为字符串
Dim xFolderItem作为对象
Dim xMail As MailItem
将项目作为对象进行调整
将xPath设置为字符串
Dim xFileName作为字符串
将xName设置为字符串
Dim xDtDate作为日期
设置xShell=CreateObject(“Shell.Application”)
出错时继续下一步
'取消时xFolder为nothing时发生旁路错误
设置xFolder=xShell.BrowseForFolder(0,“选择文件夹:”,0,strStartingFolder)
'一旦达到目的,立即删除错误旁路
错误转到0
如果不是TypeName(xFolder)=“Nothing”,则
设置xFolderItem=xFolder.Self
xFileName=xFolderItem.Path
'缺少路径分隔符
如果正确(xFileName,1)“\”则xFileName=xFileName&“\”
其他的
xFileName=“”
出口接头
如果结束
对于ActiveExplorer.Selection中的每个xObjItem
如果xObjItem.Class=olMail,则
设置xMail=xObjItem
xName=Left(CleanFileName(xMail.Subject),100)
调试。打印xName
xDtDate=xMail.ReceivedTime
xName=格式(xDtDate,“yyyymmdd”,vbUseSystemDayOfWeek_
vbUseSystem)和“-”以及xName和“.msg”
xPath=xFileName&xName
xMail.SaveAs xPath,olMSG
如果结束
下一个
端接头
公共函数CleanFileName(strFileName作为字符串)作为字符串
弱智残疾人
暗淡的
将strTemp设置为字符串
Invalids=数组(“?”、“*”、“:”、“|”、“,”、“[”、“]”、“/”、“\”)
strTemp=strFileName
每名残疾人士
strTemp=替换(strTemp,e,“”)
'strTemp=Replace(strTemp,e,“”)
下一个
CleanFileName=strTemp
端函数

在上面发布的代码中,仅处理邮件:

 If xObjItem.Class = olMail Then
Outlook中有多种对象类型,有关详细信息,请参阅

基本上,您还需要处理会议项目:

Dim xMail As Object
If xObjItem.Class = olMail Or xObjItem.Class = olMeetingRequest Then


在上面发布的代码中,仅处理邮件:

 If xObjItem.Class = olMail Then
Outlook中有多种对象类型,有关详细信息,请参阅

基本上,您还需要处理会议项目:

Dim xMail As Object
If xObjItem.Class = olMail Or xObjItem.Class = olMeetingRequest Then


我试过了,但是我得到了类型不匹配(错误13)errorNevermind,它现在可以工作了。我没有把xMail作为一个对象来澄清。非常感谢。我很高兴我的帖子能帮上忙。我试过了,但是我得到了类型不匹配(错误13)errorNevermind,它现在可以工作了。我没有把xMail作为一个对象来澄清。非常感谢。我很高兴我的帖子对你有所帮助。