Как запланировать макрос и продолжать пробовать его, пока не будет выполнено условие? - PullRequest
0 голосов
/ 17 мая 2019

Попытка автоматизировать отправку ежедневного электронного письма на основе файла CSV, который отправляется повторно каждое утро, за исключением нерегулярных интервалов. Я устанавливаю код для запуска каждое утро в 09:34:30 и, если файл не существует, повторите попытку через 10 секунд.

Основная ошибка, с которой я сталкиваюсь, заключается в том, что если файл не существует и код повторяется, он отправляет несколько электронных писем. Ниже приведены соответствующие части кода (я отредактировал фактический URL из соображений конфиденциальности):

Sub Main()

Dim origin As Workbook
Dim dest As Workbook

Dim myURL As String


Dim WinHttpReq As Object, oStream As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", myURL, False
WinHttpReq.Send

If WinHttpReq.status = 404 Then 
    Schedule (Now + TimeValue("00:00:10")) 
    Exit Sub 'tried this to avoid the bug of repeated emails but it's not working
End If

If WinHttpReq.status = 200 Then

    Set oStream = CreateObject("ADODB.Stream")
    oStream.Open
    oStream.Type = 1
    oStream.Write WinHttpReq.ResponseBody
    oStream.SaveToFile ThisWorkbook.Path & "\" & "file.csv", 2
    oStream.Close
    ThisWorkbook.Activate
    ActiveWorkbook.Connections("file").Refresh
    Application.Calculate
    Call Mail.email
    Schedule ("09:34:30")
    Exit Sub


End If


End Sub

Sub Schedule(t As String)
    Application.OnTime t, "Main"
End Sub

1 Ответ

0 голосов
/ 17 мая 2019

Вы можете попробовать использовать:

While WinHttpReq.status <> 200

Wend

Он будет непрерывно повторяться до тех пор, пока ваш статус запроса не станет 200

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