用于下载所选邮件附件的宏 - 有关下载文件计数的问题


0

我更改了一些代码,以便将选定的邮件附件添加到我的硬盘中,如下所示:

Public Sub SaveAttachments()
Dim objOL As Outlook.Application
Dim objMsg As Outlook.MailItem 'Object
Dim objAttachments As Outlook.Attachments
Dim objSelection As Outlook.Selection
Dim I As Long
Dim lngCount As Long
Dim strFile As String
Dim strFolderpath As String
Dim strDeletedFiles As String
Dim Counter As Long

strFolderpath = "D:\attachments"
If (Dir$(strFolderpath, vbDirectory) = "") Then
    MsgBox "'" & strFolderpath & "'  not exist"
    MkDir strFolderpath
    MsgBox "'" & strFolderpath & "'  we create it"

Else
    MsgBox "'" & strFolderpath & "'  exist"
End If

    ' Get the path to your My Documents folder
    'strFolderpath = CreateObject("WScript.Shell").SpecialFolders(16)
    strFolderpath = strFolderpath & "\"
    On Error Resume Next

    ' Instantiate an Outlook Application object.
    Set objOL = CreateObject("Outlook.Application")

    ' Get the collection of selected objects.
    Set objSelection = objOL.ActiveExplorer.Selection

' The attachment folder needs to exist
' You can change this to another folder name of your choice

    ' Set the Attachment folder.
    strFolderpath = strFolderpath

    ' Check each selected item for attachments.
    Counter = 1
    For Each objMsg In objSelection

    Set objAttachments = objMsg.Attachments
    lngCount = objAttachments.Count

    If lngCount > 0 Then

    ' Use a count down loop for removing items
    ' from a collection. Otherwise, the loop counter gets
    ' confused and only every other item is removed.

    For I = lngCount To 1 Step -1

    ' Get the file name.
    strFile = objAttachments.Item(I).FileName

    ' Combine with the path to the Temp folder.
    strFile = strFolderpath & Counter & "_" & strFile

    ' Save the attachment as a file.
    objAttachments.Item(I).SaveAsFile strFile
    Counter = Counter + 1
    Next I
    End If

    Next

ExitSub:

Set objAttachments = Nothing
Set objMsg = Nothing
Set objSelection = Nothing
Set objOL = Nothing
    MsgBox "All Selected Attachments Have Been Downloaded ..."
End Sub

我的目标电子邮件使用imap服务...

这个vb代码完美无缺!

但我的问题是,当下载完成后,我们不需要附件文件夹中的文件!
我的收件箱里有450 封UNREAD电子邮件,所有邮件都有附件...
但我们在附件文件夹中只有200个文件!(由高级代码创建)
我该如何解决这个问题?
似乎这个问题与未读消息和我的ADSL速度有关(但它不应该,我不知道?!)
当你阅读电子邮件时,似乎Outlook用那封电子邮件做了一些事情,所以下次那封电子邮件因为它的缓存而运行得更快。
如何使用高级代码处理未读电子邮件?
或者对这个问题有任何想法吗?

最后,我非常感谢您的评论,并添加或更正我的代码

Answers:


0

如果任何附件具有相同的名称,它们可能会被覆盖(无法记住是否.SaveAsFile会覆盖或导致错误),因此您可能需要先检查文件名是否存在,或者在文件名中添加其他标识符(可能是信息主题?)。

可以将Outlook设置为使用IMAP对电子邮件帐户执行不同的操作,例如仅下载标题,仅在打开时获取整个消息,或者首先下载整个消息。

您是否可以进行一些随机检查以查看所有已读取的邮件中的附件是否存在,并且是否存在未读邮件的附件?这将确认IMAP理论,并且可能能够通过下载所选消息的方法在代码中修复,如果它们尚未存在的话。


谢谢你的答案/ .SaveAsFile只会覆盖 - >我已经为我的代码添加了一个计数器 - > PLZ看到它可以吗?(有许多相同名称的附件)除了我随机测试我的电子邮件 - >他们没问题 - >但是其中一些没有文件后vba END /你会给我一些代码 - >“能够修复在代码中有一个方法来下载所选的消息,如果它们还没有。“
失落的领主2011年

在开始获取附件之前,您需要再次遍历所选消息,并检查objMsg.DownloadState = OlDownloadState.olHeaderOnly,如果是,请设置objMsg.MarkForDownload = OlRemoteStatus.olMarkedForDownload。然后在那个循环之后,我想告诉outlook下载消息或其他东西,我不知道该怎么做。
幽灵

投票转移到stackoverflow,它将获得更多的视图。
幽灵
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.