从存储在主共享文件夹中的许多子文件夹中的* .msg文件中提取附件

时间:2018-01-11 06:29:34

标签: vba outlook-vba email-attachments subdirectory msg

我正在寻求您的支持,修改以下代码,从主共享文件夹中的许多子文件夹中存储的* .msg文件中提取附件。

如果存储在一个文件夹中,以下代码适用于* .msg文件,但不能用于存储在子文件夹中的* .msg文件。

主文件夹的路径是:

U:\ XXXXX \ XXXXX \ Main Folder

子文件夹的路径是:

U:\ XXXXX \ XXXXX \ Main Folder \ Folder1

U:\ XXXXX \ XXXXX \ Main Folder \ Folder2

U:\ XXXXX \ XXXXX \ Main Folder \ Folder3 ..等

以下是代码:

Sub SaveOlAttachments()

Dim msg As Outlook.MailItem
Dim att As Outlook.Attachment
Dim strFilePath As String
Dim strAttPath As String

    'path for msgs
strFilePath = "U:\XXXXX\XXXXX\Main Folder\"
    'path for saving attachments
strAttPath = "D\Attachments\"

strFile = Dir(strFilePath & "*.msg")
Do While Len(strFile) > 0
    Set msg = Application.CreateItemFromTemplate(strFilePath & strFile)
    If msg.Attachments.Count > 0 Then
         For Each att In msg.Attachments
             att.SaveAsFile strAttPath & att.FileName
         Next
    End If
    strFile = Dir
Loop

End Sub

1 个答案:

答案 0 :(得分:0)

使用VBA macro that search for file in multiple subfolders

的答案
Sub SaveOlAttachments()

    Dim msg As Outlook.MailItem
    Dim att As Outlook.Attachment
    Dim strFilePath As String
    Dim strAttPath As String
    Dim colFiles As New Collection, f

    'path for msgs
    strFilePath = "U:\XXXXX\XXXXX\Main Folder\"

    GetFiles strFilePath , "*.msg", True, colFiles

    'path for saving attachments
    strAttPath = "D\Attachments\"

    For Each f in colFiles
        Set msg = Application.CreateItemFromTemplate(f)
        If msg.Attachments.Count > 0 Then
             For Each att In msg.Attachments
                 att.SaveAsFile strAttPath & att.FileName
             Next
        End If
    Next

End Sub

执行搜索的子项:

Sub GetFiles(StartFolder As String, Pattern As String, _
             DoSubfolders As Boolean, ByRef colFiles As Collection)

    Dim f As String, sf As String, subF As New Collection, s

    If Right(StartFolder, 1) <> "\" Then StartFolder = StartFolder & "\"

    f = Dir(StartFolder & Pattern)
    Do While Len(f) > 0
        colFiles.Add StartFolder & f
        f = Dir()
    Loop

    sf = Dir(StartFolder, vbDirectory)
    Do While Len(sf) > 0
        If sf <> "." And sf <> ".." Then
            If (GetAttr(StartFolder & sf) And vbDirectory) <> 0 Then
                    subF.Add StartFolder & sf
            End If
        End If
        sf = Dir()
    Loop

    For Each s In subF
        GetFiles CStr(s), Pattern, True, colFiles
    Next s

End Sub