VBA - 在文件夹中搜索SPECIFIC文件并将其附加到Outlook Mail中

时间:2017-11-07 10:57:06

标签: excel vba excel-vba

我正在使用VBA将错误日志发送给多个用户。可以在文件夹中找到此错误日志以及进程日志文件。这些文件的名称上有日期,并且不依赖于Now()。

我只想附加错误日志并忽略进程日志。我做过多次类似主题的研究,并且能够制作这段代码:

Sub SendEmailFail()

    Dim OutlookApp As Outlook.Application
    Dim OutlookMail As Outlook.MailItem
    Dim RecipientF As Object
    Dim myRecipientF As Outlook.Recipient
    Dim sToF As Object
    Dim CCf As Object
    Dim myCCf As Outlook.Recipient
    Dim sCcF As Object
    Dim FilesF As VBA.Collection
    Dim mDoneF As String
    Dim FileF As Scripting.File
    Dim AttsF As Outlook.Attachments

    Application.ScreenUpdating = False

    Set OutlookApp = New Outlook.Application
    Set OutlookMail = OutloookApp.CreateItem(0)

    Set FilesF = GetFilesF

    mDoneF = Environ("userprofile") & _
        "\Documents\Automation Anywhere Files\Automation Anywhere\My Reports\ABC\Logs\Done"

    '=========================================START========================================='

        Workbooks("ConfigFile.xlsm").Activate
        Sheets("Sheet1").Activate

        Range("C2").Select
            Set RecipientF = Range(ActiveCell, ActiveCell.End(xlDown))

        ActiveCell.Offset(0, 1).Select
            Set CCf = Range(ActiveCell, ActiveCell.End(xlDown))

        On Error Resume Next

        With OutlookMail
            .Display
        End With

        With OutlookMail

            'Get all recipients from Column C
            For Each sToF In RecipientF
                Set myRecipientF = OutlookMail.Recipients.Add(sToF)
                myRecipientF.Type = olTo
                myRecipientF.Resolve
                If Not myRecipientF.Resolved Then
                    myRecipientF.Delete
                End If
            Next sToF

            'Get all CCs from Column D
            For Each sCcF In CCf
                Set myCCf = OutlookMail.Recipients.Add(sCcF)
                myCCf.Type = olCC
                myCCf.Resolve
                If Not myCCf.Resolved Then
                    myCCf.Delete
                End If
            Next sCcF

            .Body = ThisWorkbook.Sheets("Sheet1").Range("F2").Value & vbNewLine & _
                vbNewLine & ThisWorkbook.Sheets("Sheet1").Range("F3").Value & vbNewLine & _
                vbNewLine & ThisWorkbook.Sheets("Sheet1").Range("F4").Value & vbNewLine & _
                vbNewLine & "Thank You!"

            'Adding Error Logs
            If FilesF.Count Then
                Set AttsF = OutlookMail.Attachments

                    For Each File In Files
                        AttsF.Add FileF.Path
                    Next

            End If

        End With

        On Error GoTo 0

        Set OutlookMail = Nothing
        Set OutlookApp = Nothing
        Application.ScreenUpdating = True


End Sub

Function GetFilesF() As VBA.Collection

    Dim FolderF As Scripting.Folder
    Dim FsoF As Scripting.FileSystemObject
    Dim FilesF As Scripting.Files
    Dim FileF As Scripting.File
    Dim ListF As VBA.Collection
    Dim mSendF As String
    Dim mDoneF As String
    Dim StrFileF As String

    mSendF = Environ("userprofile") & _
        "\Documents\Automation Anywhere Files\Automation Anywhere\My Reports\ABC\Logs\Send"

    mDoneF = Environ("userprofile") & _
        "\Documents\Automation Anywhere Files\Automation Anywhere\My Reports\ABC\Logs\Done"


    Set ListF = New VBA.Collection
    Set FsoF = New Scripting.FileSystemObject
    Set FolderF = FsoF.GetFolder(mSendF)
    Set FilesF = FolderF.FilesF

    For Each FileF In FilesF

        'Return only visible files
        If (FileF.Attributes Or Hidden) <> FileF.Attributes Then

            StrFileF = Dir(Environ("userprofile") & _
                 "\Documents\Automation Anywhere Files\Automation Anywhere\My Reports\ABC\Logs\Send\*Error Log*")

            If Len(StrFileF) > 0 Then
                List.Add FileF
            End If

        End If

    Next

    Set GetFilesF = ListF

End Function

但是,我遇到了运行时错误“424”:需要对象。这个MsgBox只有一个OK和HELP按钮,并且与通常的MsgBox大小相比有一些小的错误。我不知道错误在哪里,即使我可以使用F8宏,因为它在显示错误后没有突出显示该行。

EDITED

更改了一些声明,我能够完全运行宏。然而,错误日志和进程日志都附加了。我知道我的代码在搜索文件名中带有“ERROR LOG”的文件时出现问题。修改后的代码如下:

Sub SendEmailFail()

Dim OutlookApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Dim RecipientF As Object
Dim myRecipientF As Outlook.Recipient
Dim sToF As Object
Dim CCf As Object
Dim myCCf As Outlook.Recipient
Dim sCcF As Object
Dim Files As VBA.Collection
Dim mDoneF As String
Dim FileF As Scripting.File
Dim AttsF As Outlook.Attachments

Application.ScreenUpdating = False

Set OutlookApp = New Outlook.Application
Set OutMail = OutlookApp.CreateItem(olMailItem)

Set Files = GetFilesF

mDoneF = Environ("userprofile") & _
    "\Documents\Automation Anywhere Files\Automation Anywhere\My Reports\AccentureCIO\Logs\Done"

'=========================================START========================================='

    Workbooks("ConfigFile.xlsm").Activate
    Sheets("Sheet1").Activate

    Range("C2").Select
        Set RecipientF = Range(ActiveCell, ActiveCell.End(xlDown))

    ActiveCell.Offset(0, 1).Select
        Set CCf = Range(ActiveCell, ActiveCell.End(xlDown))

    On Error Resume Next

    With OutMail
        .Display
    End With

    With OutMail

        'Get all recipients from Column C
        For Each sToF In RecipientF
            Set myRecipientF = OutMail.Recipients.Add(sToF)
            myRecipientF.Type = olTo
            myRecipientF.Resolve
            If Not myRecipientF.Resolved Then
                myRecipientF.Delete
            End If
        Next sToF

        'Get all CCs from Column D
        For Each sCcF In CCf
            Set myCCf = OutMail.Recipients.Add(sCcF)
            myCCf.Type = olCC
            myCCf.Resolve
            If Not myCCf.Resolved Then
                myCCf.Delete
            End If
        Next sCcF

        .Body = ThisWorkbook.Sheets("Sheet1").Range("F2").Value & vbNewLine & _
            vbNewLine & ThisWorkbook.Sheets("Sheet1").Range("F3").Value & vbNewLine & _
            vbNewLine & ThisWorkbook.Sheets("Sheet1").Range("F4").Value & vbNewLine & _
            vbNewLine & "Thank You!"

        'Adding Error Logs
        If Files.Count Then
            Set AttsF = OutMail.Attachments

                For Each FileF In Files
                    AttsF.Add FileF.Path
                Next

        End If

    End With

    On Error GoTo 0

    Set OutMail = Nothing
    Set OutlookApp = Nothing
    Application.ScreenUpdating = True


End Sub

Function GetFilesF() As VBA.Collection

Dim FolderF As Scripting.Folder
Dim FsoF As Scripting.FileSystemObject
Dim FilesF As Scripting.Files
Dim FileF As Scripting.File
Dim ListF As VBA.Collection
Dim mSendF As String
Dim mDoneF As String
Dim StrFileF As String

mSendF = Environ("userprofile") & _
    "\Documents\Automation Anywhere Files\Automation Anywhere\My Reports\AccentureCIO\Logs\Send"

mDoneF = Environ("userprofile") & _
    "\Documents\Automation Anywhere Files\Automation Anywhere\My Reports\AccentureCIO\Logs\Done"


Set ListF = New VBA.Collection
Set FsoF = New Scripting.FileSystemObject
Set FolderF = FsoF.GetFolder(mSendF)
Set Files = FolderF.Files

For Each FileF In Files

    'Return only visible files
    If (FileF.Attributes Or Hidden) <> FileF.Attributes Then

        StrFileF = Dir(Environ("userprofile") & _
             "\Documents\Automation Anywhere Files\Automation Anywhere\My Reports\AccentureCIO\Logs\Send\*Error Log*")

        If Len(StrFileF) > 0 Then
            ListF.Add FileF
        End If

    End If

Next

Set GetFilesF = ListF

End Function

0 个答案:

没有答案