从未经测试的项目类型返回电子邮件类型属性的代码停止在 26 个项目(共 1200 个)

问题描述 投票:0回答:2

目标:将电子邮件保存为文件夹中的 PDF 文件
问题:Outlook 文件夹中有超过 1000 封电子邮件。代码运行 26 封电子邮件然后停止/冻结。
尝试:尝试了不同内容的不同 Outlook 电子邮件文件夹都在 26/27 停止。

我怀疑它造成了某种类型的内存问题。不关闭东西?

Sub save_as_PDF()
 
    Dim objDoc As Object, objInspector As Object
    Dim outApp As Object, objOutlook As Object, objFolder As Object, myItems As Object, myItem As Object
    Dim FolderPath, FileName, ClientName, ModTime, ranDigits As String

    Set outApp = CreateObject("Outlook.Application")
    Set objOutlook = outApp.GetNamespace("MAPI")
    Set objFolder = objOutlook.GetDefaultFolder(olFolderInbox).Folders("regular")
    Set myItems = objFolder.Items

    FolderPath = "C:\Users\xxxxx\Documents\My Documents\__AA My Daily\vbaOutlookTestFolder\"

    On Error Resume Next

    For Each myItem In myItems

        Set objInspector = Nothing
        Set objDoc = Nothing
        Set objInspector = Nothing
        Set objDoc = Nothing
        
        FileName = myItem.To
        FileName = Replace(FileName, ".", "")
        
        Set objInspector = myItem.GetInspector
        Set objDoc = objInspector.WordEditor
        
        objDoc.ExportAsFixedFormat FolderPath & FileName & ".pdf", 17

    Next myItem
    
End Sub

我希望它能将文件夹中的每个电子邮件项目转换为 pdf。

vba outlook export-to-pdf
2个回答
1
投票

myItem.To
可以包含(如果有多个收件人)
";"
,这在文件名中是无效的。

永远不要使用

On Error Resume Next
,除非你真的检查了
Err.Number
- 它只会掩盖异常,你不知道是什么击中了你。


1
投票

问题与以下代码行有关:

objDoc.ExportAsFixedFormat FolderPath & FileName & ".pdf", 17

FileName
不是唯一的,文件夹中的大多数项目都可以保持不变。

FileName = myItem.To

相反,您需要生成一个唯一的文件名,以避免保存 pdf 文件时出现任何麻烦。并尝试将任何 ID 添加到字符串中,以避免在同一文件夹中重复。

此外,文件名可能包含禁用符号:

  FileName = myItem.To
  FileName = Replace(FileName, ".", "")

使用以下函数从文件名字符串中删除任何非法字符:

Function ReplaceIllegalCharacters(strIn As String, strChar As String) As String
    Dim strSpecialChars As String
    Dim i As Long
    strSpecialChars = "~""#%&*:<>?{|}/\[]" & Chr(10) & Chr(13)

    For i = 1 To Len(strSpecialChars)
        strIn = Replace(strIn , Mid$(strSpecialChars, i, 1), strChar)
    Next

    ReplaceIllegalCharacters = strIn 
End Function

pdf files not saving with ExportAsFixedFormat 线程中描述了类似的问题。

© www.soinside.com 2019 - 2024. All rights reserved.