我在Outlook中使用VBA使用SaveAs时出现了什么错误

我在Outlook中使用VBA使用SaveAs时出现了什么错误,vba,outlook,Vba,Outlook,我正在尝试将outlook文件夹中的所有邮件保存到硬盘。我正在尝试以下代码 '========================================== ' Save Inbox Mail Items To The File System '========================================== Sub saveInboxMailItemsToFileSystem() ' Set variables Dim ns As Outlook.Na

我正在尝试将outlook文件夹中的所有邮件保存到硬盘。我正在尝试以下代码

'==========================================
' Save Inbox Mail Items To The File System
'==========================================
Sub saveInboxMailItemsToFileSystem()
    ' Set variables
    Dim ns As Outlook.NameSpace
    Dim inbox As Outlook.MAPIFolder
    Dim item As Outlook.MailItem
    Dim strFileName As String
    ' Set namespace
    Set ns = Application.GetNamespace("MAPI")
    ' Get inbox folder
    Set inbox = ns.GetDefaultFolder(olFolderInbox)
    ' Loop through all mail items
    For Each item In inbox.Items
        ' Set filename
        strFileName = "C:\Users\<moi>\SvgMail\" & VBA.Format(item.ReceivedTime, "yyyymmdd", vbUseSystemDayOfWeek) & " - " & item.Subject & ".msg"
        ' Save mail item to file system
        item.SaveAs strFileName, Outlook.OlSaveAsType.olMSG
    Next item
End Sub

您需要确保结果文件名(
strFileName
)有效并且只包含允许的符号。尝试使用有问题的名称保存任何文件,您将收到通知,某些符号是不允许的。但是在我们的例子中,Outlook对象模型并没有给出有意义的答案,它只是通知您一个问题。作为开发人员,您应该分析此类情况并解决问题。例如,如果您尝试搜索错误代码,您可能会发现类似的线程-。例如,您可能会发现一个示例函数,它替换了一些字符,以便在
SaveAs
调用中使用:

Function FixFileName(FileName As String) As String
Dim fname As String


fname = Trim(FileName)


fname = Replace(fname, " ", "_")
fname = Replace(fname, ",", "")
fname = Replace(fname, "'", "")
fname = Replace(fname, "(", "")
fname = Replace(fname, ")", "")
fname = Replace(fname, "~", "")
fname = Replace(fname, "*", "")
fname = Replace(fname, "?", "")
fname = Replace(fname, "/", "")
fname = Replace(fname, "\", "")
fname = Replace(fname, """", "")


FixFileName = fname


End Function

这是文件名中的打字错误吗?字符
是不允许的。No只是我用户名的替换字符串,但在现实生活中它显然不包含“”确保电子邮件主题不包含任何非法字符。错误为
STG\u E\u INVALIDNAME
,这意味着COM系统无法创建OLE存储(MSG)文件。请参阅Eugene的回复。在尝试保存消息之前,我会添加一个错误检查,以确保
TypeName(item)=“MailItem”
。在补遗中,我找到了相关的MS文档:
Function FixFileName(FileName As String) As String
Dim fname As String


fname = Trim(FileName)


fname = Replace(fname, " ", "_")
fname = Replace(fname, ",", "")
fname = Replace(fname, "'", "")
fname = Replace(fname, "(", "")
fname = Replace(fname, ")", "")
fname = Replace(fname, "~", "")
fname = Replace(fname, "*", "")
fname = Replace(fname, "?", "")
fname = Replace(fname, "/", "")
fname = Replace(fname, "\", "")
fname = Replace(fname, """", "")


FixFileName = fname


End Function