我在Outlook中使用VBA使用SaveAs时出现了什么错误
我正在尝试将outlook文件夹中的所有邮件保存到硬盘。我正在尝试以下代码我在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
'==========================================
' 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