Страницы: 1
RSS
Подскажите пожалуйста по макросу, обновление по времени + сохранение в PDF, Макрос, обновление по времени + сохранение в PDF
 
Добрый день!

Подскажите пожалуйста, что не хватает в моем макросе для обновления и сохранения по времени 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 - 24.06.2022 10:13:19
 
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
Изменено: evgeniygeo - 24.06.2022 07:44:43
 
Добрый день!

evgeniygeo спасибо большое за Ваш комментарий!

Решает ли вашу задачу 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
Изменено: evgeniygeo - 27.06.2022 07:16:30
 
В VBA нет распараллеливания вычислений - пока выполняется код, другие действия выполнить нельзя (если это не разрешено в коде). В случае с обновлением связей - по логике: пока обновление не закончено, макрос дальше не работает.
 
Arslan Ikhsanov,
чисто по логике:
попробуйте создать запрос (желательно, чтобы он загружался какое-то время) и запустить макрос. MsgBox не будет ожидать, когда обновится Ваш запрос.

вот здесь Дмитрий писал об этом

Код
Sub aaa()
ThisWorkbook.RefreshAll
MsgBox "aaaa"
End Sub
Изменено: evgeniygeo - 28.06.2022 06:54:08
 
Спасибо!
Попробую, посмотрю как сработает.
Страницы: 1
Наверх