Подскажите пожалуйста, что не хватает в моем макросе для обновления и сохранения по времени Excel, и после, сохранения в PDF файл, буду очень Вам признателен! Так как сейчас он только сохраняет файл и обновляет в Excel, но не сохраняет в PDF! Заранее Всем Спасибо!
Код
Sub MyMacro()
ThisWorkbook.RefreshAll
ThisWorkbook.Save
Call NextRun
End Sub
Sub NextRun()
TimeToRun = TimeValue("21:40:00")
Application.OnTime TimeToRun, "MyMacro"
End Sub
Sub MyMacro1()
Sheets(Array("Свод")).Select
Sheets("Свод").Activate
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"Z:\Common\Отчеты к КБ\2022\Для рассылки PDF\Ежедневный отчет.pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
Sheets("Свод").Select
Range("A1").Select
End Sub
Sub Start()
Call NextRun
End Sub
Sub Finish()
Application.OnTime TimeToRun, "MyMacro", , False
End Sub
Arslan Ikhsanov, оформите пожалуйста код с помощью специальной функции <...>, благодаря этому, всем будет гораздо комфортнее его читать честно говоря, не совсем понимаю, как Вы хотите чтобы необходимый макрос запустился если Вы его не запускаете Я вижу, что вы запускаете MyMacro, но не MyMacro1. Если просто запустить MyMacro1, то все работает?
+решает ли вашу задачу RefreshAll? Все ли успевает обновиться до следующих шагов?
Код
Sub MyMacro()
ThisWorkbook.RefreshAll
ThisWorkbook.Save
Call MuMacro1
Call NextRun
End Sub
Sub MyMacro1()
Sheets("Свод").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"Z:\Common\Отчеты к КБ\2022\Для рассылки PDF\Ежедневный отчет.pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End Sub
Решает ли вашу задачу RefreshAll? - Да, справляется отлично, активирует все внешние и внутренние подключения, тем самым файл обновляется! Все ли успевает обновиться до следующих шагов? - Насколько я понял, следующий шаг не начинается пока не заканчивается предыдущий, поэтому, да, все шаги отрабатывают свою задачу!
Я вроде разобрался, решил это следующим образом:
Код
Sub MyMacro()
ThisWorkbook.RefreshAll
ThisWorkbook.Save
ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:="Z:\Common\Îò÷åòû ê ÊÁ\2022\Äëÿ ðàññûëêè PDF\Åæåäíåâíûé îò÷åò.pdf", OpenAfterPublish:=False
Call NextRun
End Sub
Sub MyMacro1()
Sheets(Array("Ñâîä")).Select
Sheets("Ñâîä").Activate
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"Z:\Common\Îò÷åòû ê ÊÁ\2022\Äëÿ ðàññûëêè PDF\Åæåäíåâíûé îò÷åò.pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
Sheets("Ñâîä").Select
Range("A1").Select
Call NextRun
End Sub
Sub NextRun()
TimeToRun = TimeValue("07:00:00")
Application.OnTime TimeToRun, "MyMacro"
End Sub
Sub Start()
Call NextRun
End Sub
Sub Finish()
Application.OnTime TimeToRun, "MyMacro", , False
End Sub
Arslan Ikhsanov написал: Насколько я понял, следующий шаг не начинается пока не заканчивается
насколько я знаю, это не так
вроде бы вот этот код обновляет запросы по очереди и только после обновления переходит к следующему:
Код
For Each oc In ThisWorkbook.Connections
'запоминаем значение обновления в фоне для запроса
IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery
'выставляем принудительно ждать завершения запроса
oc.OLEDBConnection.BackgroundQuery = False
'обновляем запрос
oc.Refresh
'возвращаем обновление в фоне в первоначальное состояние
oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh
Next
В VBA нет распараллеливания вычислений - пока выполняется код, другие действия выполнить нельзя (если это не разрешено в коде). В случае с обновлением связей - по логике: пока обновление не закончено, макрос дальше не работает.
Arslan Ikhsanov, чисто по логике: попробуйте создать запрос (желательно, чтобы он загружался какое-то время) и запустить макрос. MsgBox не будет ожидать, когда обновится Ваш запрос.