VBA Отправить письмо по электронной почте о проблемах производительности - PullRequest
0 голосов
/ 03 июля 2018

У меня есть макрос ниже, который сканирует файл Excel с электронными письмами менеджера вниз по столбцу B. Для каждого менеджера будет составлено электронное письмо / файл Excel прикреплен / и отправлен автоматически. Я смог проверить это, и он работает нормально при составлении 50 - 100.

Меня беспокоит то, что 50 - 100 электронные письма не являются хорошим показателем того, чтобы знать, будет ли это работать нормально при отправке 5000 электронных писем.

Есть ли у меня риск этого зависания или других проблем при запуске этого файла с 5000 электронными письмами?

Sub CorpCard()

Dim OutApp As Object
Dim OutMail As Object
Dim cell As Range

Application.ScreenUpdating = False
Set OutApp = CreateObject("Outlook.Application")

On Error GoTo cleanup

For Each cell In Columns("B").Cells.SpecialCells(xlCellTypeConstants)
    If cell.Value Like "?*@?*.?*" And LCase(Cells(cell.Row, "C").Value) = "yes" Then
        Set OutMail = OutApp.CreateItem(0)
        On Error Resume Next
        With OutMail
            .SentOnBehalfOfName = "urdearboy@hi.com"
            .to = cell.Value
                .Subject = "Your Employees With A Corporate Credit Card - EID - " & Cells(cell.Row, "D").Value
                .Body = "Hi " & Cells(cell.Row, "A").Value & "," _

                'Body to be patsed here

            strLocation = "C:\Users\urdearboy\Desktop\File Name " & Cells(cell.Row, "D").Value & ".xlsx"
            .Attachments.Add (strLocation)
        .Send
        End With

        On Error GoTo 0
        Set OutMail = Nothing
    End If
Next cell

cleanup:
    Set OutApp = Nothing
    Application.ScreenUpdating = True
End Sub

Было бы хорошей идеей поместить мой цикл For Each в другой цикл, например, For i = 1 to 5000 Step 50, а затем добавить Do Events перед началом фактического цикла, чтобы дать моему компьютеру некоторое время, чтобы наверстать упущенное, прежде чем перейти к следующим 50 электронные письма? Я не совсем уверен, входит ли это в область действия Do Events. При необходимости я также могу предоставить спецификации компьютера.

1 Ответ

0 голосов
/ 03 июля 2018

Это должно хорошо работать для больших файлов. С таким количеством отправляемых писем время выполнения может легко превысить час Хорошей идеей может быть поднять какой-либо флаг в обработчике ошибок, если он действительно столкнулся с проблемой. Может быть что-то вроде:

    if Err then
         Msgbox "Error Encountered at Row " & cell.row
    end if 

прямо под блоком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...