Макрос перестает зацикливаться, если я вызываю макрос для отправки электронного письма - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть книга с именем Запустить все еженедельные отчеты.xlsm , где я перечисляю отчеты, которые я обновляю каждый понедельник. Имена рабочих книг / отчетов, которые должны быть обновлены, находятся в столбце A, пути к рабочим книгам в столбце B и имена макросов в столбце C.

Макрос (который я нашел где-то в Интернете) работает отлично, циклически перебирая все файлов и обновления данных, но недавно я добавил несколько файлов, которые обновляют sh данных и затем вызывают другой макрос (в другой рабочей книге), чтобы отправить рабочие книги моим коллегам по электронной почте. Как только он отправляет электронное письмо, этот макрос останавливается и не будет продолжать цикл по остальным остальным книгам. Я думаю, что это как-то связано с установкой объекта обратно в Excel. Я искал в Google и попробовал Set xlApp = CreateObject("Excel.Application"), но он не будет продолжаться. L oop.

Любая помощь будет принята с благодарностью. Вот мой макрос:

Sub Run()
    'PURPOSE: To loop through all Excel files listed in Worksheet and run macro listed in column C

    Dim wb As Workbook
    Dim myPath As String

    Dim fn As String
    Dim MacroName As String
    Dim x As Integer

    NumRows = Range("A1", Range("A1").End(xlDown)).Rows.Count
    For x = 1 To NumRows

        Workbooks("Run All Weekly Reports.xlsm").Sheets("List").Activate
        ActiveCell.Offset(1, 0).Select

        fn = ActiveCell.Offset(0, 0).Value
        myPath = ActiveCell.Offset(0, 1).Value
        MacroName = ActiveCell.Offset(0, 2).Value
        ActiveCell.Offset(0, 3) = "Done"

        If myPath = "" Then GoTo ResetSettings
        Set wb = Workbooks.Open(Filename:=myPath & fn)
        Application.Run "'" & fn & "'!" & MacroName

        wb.Close SaveChanges:=True
        Workbooks("RUN ALL WEEKLY REPORTS.xlsm").Save

        'Ensure Workbook has closed before moving on to next line of code
        DoEvents

ResetSettings:
        'Reset Macro Optimization Settings
        Application.EnableEvents = True
        Application.Calculation = xlCalculationAutomatic
        Application.ScreenUpdating = True
    Next
    MsgBox ("Finished")
End Sub

Мой опыт работы с макросами ограничен пробами и ошибками, поэтому, пожалуйста, извините за мои грубые описания.

Макрос в моем исходном сообщении - это тот, который я скопировал его откуда-то в Интернете и просто немного изменил, чтобы он подходил.

Я скопировал его в свою книгу с поддержкой макросов, поэтому для его запуска мне нужно выбрать макрос «Выполнить» из списка макросов и «Выполнить». 'it.

Я думаю, это означает, что это subli c sub?
У меня есть список рабочих книг в файле, например. Backorder Сообщает, что он открывается, и обновляет данные из запроса ODB C, затем вызывает электронное письмо для отправки моему коллеге, но после Sub SEND_Mail_Outlook_With_Signature_Html() макрос l oop просто останавливается.

Если Я не вызываю макрос SEND, он без проблем переходит к следующему файлу, указанному в моей рабочей книге.
Надеюсь, что это имеет смысл.

Ниже приведен пример макроса, который в каждом из моих листов, что он должен открыть и выполнить.

Sub Refresh()

    ' Refreshes the data and the dates in the pivot tables

    ActiveWorkbook.RefreshAll
    Application.CalculateUntilAsyncQueriesDone
    ActiveWorkbook.Save
    Call SEND_Mail_Outlook_With_Signature_Html
    ActiveWorkbook.Close

End Sub

Sub SEND_Mail_Outlook_With_Signature_Html()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim StrBody As String

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    StrBody = "Today's report attached."

    On Error Resume Next

    With OutMail
        .Display
        .To = "mycolleague@live.com.au"
        .CC =
        .BCC =
        .Subject = "Backorder Report"
        .HTMLBody = StrBody & "<br>" & .HTMLBody
        .Attachments.Add ActiveWorkbook.FullName
        .Send
    End With

    On Error GoTo 0
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

1 Ответ

0 голосов
/ 14 февраля 2020

Похоже, вы пытаетесь закрыть книгу после того, как она уже закрыта. Используйте Stop в стратеги c местах для отладки вашего кода. Очевидно, вы не сможете закрыть его снова, если он уже закрыт.

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