Outlook VBA: 并非所有邮件项目都无法识别

Outook VBA: not all mail items are not recognized

我从网上的帮助教程中获得了代码。 我对其进行了测试,并确保更新了我本地系统特有的任何变量。

但是,我遇到了 outlook 导出问题。

之前,我运行代码成功。 获取了Outlook文件夹的全部128项

outlook 文件夹中现在有 231 个项目。 代码,反复只得到其中的162个

就是这个问题,我需要全231

我可以确认以下内容;

有什么想法吗?

我考虑过


Sub ZipAllEmailsInAFolder()
Dim objFolder As Outlook.Folder
Dim objItem As Object
Dim objMail As Outlook.MailItem
Dim strSubject As String
Dim varTempFolder As Variant
Dim varZipFile As Variant
Dim objShell As Object
Dim objFileSystem As Object

'Select an Outlook Folder
Set objFolder = Outlook.Application.Session.PickFolder

If Not (objFolder Is Nothing) Then
   'Create a temp folder
   varTempFolder = "C:\Users\thomdenm\Music\" & objFolder.Name & Format(Now, "YYMMDDHHMMSS")
   MkDir (varTempFolder)
   varTempFolder = varTempFolder & "\"

   'Save each email as msg file
   For Each objItem In objFolder.Items

       If TypeOf objItem Is MailItem Then
          Set objMail = objItem
          strSubject = objMail.Subject
          strSubject = Replace(strSubject, "/", " ")
          strSubject = Replace(strSubject, "\", " ")
          strSubject = Replace(strSubject, ":", "")
          strSubject = Replace(strSubject, "?", " ")
          strSubject = Replace(strSubject, Chr(34), " ")
          strSubject = Replace(strSubject, "*", " ")

          objMail.SaveAs varTempFolder & strSubject & ".msg", olMSG
       End If
   Next

   'Create a new ZIP file
   varZipFile = "C:\Users\thomdenm\Music\" & objFolder.Name & " Emails.zip"
   Open varZipFile For Output As #1
   Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
   Close #1

   'Add the exported msg files to the ZIP file
   Set objShell = CreateObject("Shell.Application")
   objShell.NameSpace(varZipFile).CopyHere objShell.NameSpace(varTempFolder).Items

   On Error Resume Next
   Do Until objShell.NameSpace(varZipFile).Items.Count = objShell.NameSpace(varTempFolder).Items.Count
      Application.Wait (Now + TimeValue("0:00:01"))
   Loop
   On Error GoTo 0

   'Delete the temp folder
   Set objFileSystem = CreateObject("Scripting.FileSystemObject")
   objFileSystem.DeleteFolder Left(varTempFolder, Len(varTempFolder) - 1)
End If

结束子

首先,我会删除您检查项目类型或添加其他条件以确保所有项目都得到处理的条件。或者只是添加一个计数器以查看检查了多少项目。

counter = counter+1
If TypeOf objItem Is MailItem Then

其次,如果出现任何错误,On Error statement 可以帮助您确定问题的根源。

第三,拆分获取 Outlook 项目并将它们保存到文件夹的逻辑是有意义的。另一段代码可以提取到单独的方法中,因此按照这种方式您可以轻松确保一个或另一个方法正常工作(与 Outlook 相关的部分)。

最后,最重要的是项目可以属于同一个对话并且具有相同的主题行,这可能会导致覆盖文件夹中保存的项目。是这样吗?

objMail.SaveAs varTempFolder & strSubject & ".msg", olMSG

我建议在文件名中添加任何 ID,这样您就可以确保文件夹中没有任何项目被覆盖。比如可以是当前时间,也可以是毫秒等