В настоящее время я использую VBA для автоматизации извлечения больших массивов данных.Тем не менее, часто случается, что либо
- подчиненный просто застревает и больше не обновляется / разрывает соединение (приложение все еще реагирует), либо
- приложение перестает отвечать на запросы.
Есть ли способ реализовать функцию тайм-аута, которая автоматически закрывает приложение по истечении, скажем, 15 минут?
В других языках программирования я бы решил это, используя многопоточность,Но не уверен, возможно ли что-то подобное в VBA, учитывая, что оно полностью однопоточное.
Основной алгоритм, который я использовал для автоматизации данных, выглядит следующим образом:
Sub automateFetchData()
Dim requestTable As Workbook
Set requestTable = Workbooks.Open(requestTablePath)
Run ("'" & requestTable.Name & "'" & "!fetchData")
' This is where the application starts fetching data and occasionally gets stuck
debug.print "Data retrieval complete"
End Sub
Для знакомыхс Thomson Reuters Datastream я использую таблицы запросов и предварительно запрограммированный макрос в файле таблицы запросов для подключения и извлечения данных с сервера потоков данных.Поэтому, к сожалению, я не знаю / не понимаю в деталях, что происходит, когда я запускаю:
Run ("'" & requestTable.Name & "'" & "!fetchData")
Я просто знаю, что когда я его вызываю, индикатор выполнения выглядит так:
Который затем переходит к:
Если получение данных прошло успешно, индикатор выполнения исчезает, вывод вставляется в лист и кодвыше достигает
debug.print "Data retrieval complete"
заявление.
Если это не удастся, он просто зависает с индикатором выполнения со второго снимка экрана, который все еще открыт и работает.На этом этапе я бы хотел, чтобы тайм-аут включился и вышел из функции, которая вызвала
Run ("'" & requestTable.Name & "'" & "!fetchData")
Пожалуйста, извините меня за столь расплывчатое описание проблемы.Я был бы рад, если бы кто-то все же мог помочь мне!Всегда рад поделиться дополнительной информацией, где я могу.Ура!