2016-11-15 3 views
1

Я только что закончил большой код VBA, который в основном происходит на странице интрасети с некоторыми странными свойствами (подробнее см. Мой previous post).Проблемы с выпуском VBA

Код довольно тяжелый, и когда я запускаю его шаг за шагом (F8), он работает, но если я пытаюсь запустить все это, я получаю переменную объекта или с переменной блока не установлена ​​.

Проблема в том, что эта ошибка не всегда появляется в одном месте в коде.

То, что я пытался сделать до сих пор:

  1. Everytime Я нажимаю на элемент веб-страницы, выберите новое окно или любое другое действие, я ждал HTMLDocument страницы и саму страницу чтобы быть в состоянии готовности: Do: Loop Until doc.readyState = "complete" и

    Sub WaitWhileBusy(ie As SHDocVw.InternetExplorer) 
        While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE 
         DoEvents 
        Wend 
    End Sub 
    

Так что я просто распространение некоторых из этих «контрольных точек» здесь и там весь код, но это не влияет на этот вопрос вообще.

  1. Решение, которое у меня есть сейчас, но которое мне совсем не нравится, заключается в том, чтобы поместить весь код в цикл, пока появляется ошибка, и только выходит, когда конец код был достигнут ....

Любые идеи о том, как с этим бороться?

ответ

0

ОК, я нашел хороший способ исправить эту проблему.

Я до сих пор не совсем понимаю, почему возникла ошибка, но я полагаю, что это связано со скоростью процесса, так что я сделал то, что добавил дополнительный код таймеров, который в основном имеет эффект для приостановки кода каждый раз, когда я вызовите его и за количество секунд, которое я хочу.

код (который я буквально копипаст из here) имеет следующий вид:

Sub Таймеры() Dim PauseTime, старт, финиш, TotalTime PauseTime = 1 'Установить продолжительность. Start = Timer 'Установите время начала. Do While Timer < Start + PauseTime Доход от DoEvents для других процессов. Петля Конец Sub

И мой вопрос исчез!

Смежные вопросы