У меня есть книга с именем Запустить все еженедельные отчеты.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