Макрос заполняют таблицу данными из GET Http запроса, который программа запрашивает до тех пор, пока он что то вернет. Проверяется циклом, если запрос пустой, то повторить запрос. Из - за того, что запрос не сразу возвращает данные ( а деать он это может достаточно долго), виснет весь Excel. Вопрос в том, есть ли какой-нибудь способ длеать эти запросы асинхронно, т.е. так, что бы при этом не висла вся программа?
Заранее спасибо)
Всем привет)
Макрос заполняют таблицу данными из GET Http запроса, который программа запрашивает до тех пор, пока он что то вернет. Проверяется циклом, если запрос пустой, то повторить запрос. Из - за того, что запрос не сразу возвращает данные ( а деать он это может достаточно долго), виснет весь Excel. Вопрос в том, есть ли какой-нибудь способ длеать эти запросы асинхронно, т.е. так, что бы при этом не висла вся программа?
Чтоб именно асинхронно - нужно application.ontime, запускать в новых приложениях excel через: [vba]
Код
Set app = New Application
[/vba] Только вряд ли Вам это нужно. а чтобы не зависал, как уже сказал Udik - используйте DoEvents ... только если цикл очень длинный(много раз повторяется) - лучше использовать DoEvents с шагом раз в 100,(1000). Для этого нужно что - то типа: [vba]
Код
If i Mod 100 = 0 Then DoEvents
[/vba]
Чтоб именно асинхронно - нужно application.ontime, запускать в новых приложениях excel через: [vba]
Код
Set app = New Application
[/vba] Только вряд ли Вам это нужно. а чтобы не зависал, как уже сказал Udik - используйте DoEvents ... только если цикл очень длинный(много раз повторяется) - лучше использовать DoEvents с шагом раз в 100,(1000). Для этого нужно что - то типа: [vba]
а чтобы не зависал, как уже сказал Udik - используйте DoEvents ... только если цикл очень длинный(много раз повторяется) - лучше использовать DoEvents с шагом раз в 100,(1000). Для этого нужно что - то типа: If i Mod 100 = 0 Then DoEvents
Спасибо за помощь!
Да, так действительно лучше, по крайней мере окно программы мутнеет только периодически ( видиммо из-за времени выполнения одного запроса ). Но во время выполнения цикла с DoEvents все ранво ничего нельзя сделать ( максимум окно подвигать ), поэтому это особо не решает вопрос. На сколько я понимаю, то DoEvents на веремя выполнения этого цикла дает пользователю рабоать с книгой ( хотя у меня что то не выходит), но все равно, после этого, программа виснет из-за времени выполнения запроса, а хотелось бы, что бы в это время можно было бы хотябы с другими открытыми книгами работать. На всякий случай прикреплю цикл: [vba]
Код
lable1: For k = 1 To 150000 If k Mod 100 = 0 Then DoEvents End If Next k
Resp = httpGET(URL, Token)
If Resp = "" Then GoTo lable1
[/vba] Получается, что выполнение долгого Http запроса загружает excel, и нет способа делать это как то сохраняя доступ к функционалу программы?
а чтобы не зависал, как уже сказал Udik - используйте DoEvents ... только если цикл очень длинный(много раз повторяется) - лучше использовать DoEvents с шагом раз в 100,(1000). Для этого нужно что - то типа: If i Mod 100 = 0 Then DoEvents
Спасибо за помощь!
Да, так действительно лучше, по крайней мере окно программы мутнеет только периодически ( видиммо из-за времени выполнения одного запроса ). Но во время выполнения цикла с DoEvents все ранво ничего нельзя сделать ( максимум окно подвигать ), поэтому это особо не решает вопрос. На сколько я понимаю, то DoEvents на веремя выполнения этого цикла дает пользователю рабоать с книгой ( хотя у меня что то не выходит), но все равно, после этого, программа виснет из-за времени выполнения запроса, а хотелось бы, что бы в это время можно было бы хотябы с другими открытыми книгами работать. На всякий случай прикреплю цикл: [vba]
Код
lable1: For k = 1 To 150000 If k Mod 100 = 0 Then DoEvents End If Next k
Resp = httpGET(URL, Token)
If Resp = "" Then GoTo lable1
[/vba] Получается, что выполнение долгого Http запроса загружает excel, и нет способа делать это как то сохраняя доступ к функционалу программы?Nikitato
и нет способа делать это как то сохраняя доступ к функционалу программы?
нашел 100-о рабочий вариант(для себя): установил virtualbox - и такие файлы запускаю на нем - тогда он там себе ворочается сколько хочет и работать не мешает. .
и нет способа делать это как то сохраняя доступ к функционалу программы?
нашел 100-о рабочий вариант(для себя): установил virtualbox - и такие файлы запускаю на нем - тогда он там себе ворочается сколько хочет и работать не мешает. .SLAVICK
Сам еще особо не разобрался, но думаю попробовать VBS метод, где в VBA коде можно создать скрипт, который будет выполнять это отдельно от excel, а подом загружать в него.
C DoEvents, все равно не выходит.
Нашёл интересную статью о том, как возможно это осуществить несколькими способами.
Сам еще особо не разобрался, но думаю попробовать VBS метод, где в VBA коде можно создать скрипт, который будет выполнять это отдельно от excel, а подом загружать в него.Nikitato