2015-01-07 4 views
0

Мне нужно перейти на страницу с помощью VBA. Я создал код ниже, и он работал нормально, пока я не переустановил Windows. Я не знаю, является ли это причиной, но он больше не работает.vba ie.navigate не работает

Есть Тхо случаев:

  1. Если я не вошли в систему перед запуском макроса

    Первая часть, для входа на страницу работает, но когда я пытаюсь перейти к «http://cltd.ro/catalogsearch/result/?q=60041», я получаю сообщение об ошибке «Метод« Навигация »объекта« IWebBrowser 2 »не удался».

  2. Если я уже вошел на сайт

    С другой стороны, если я уже вошел в систему перед запуском макроса, код работает, и я получаю на нужную страницу, но код не получает stuccked в петле "Do/DoEvents/Loop до ie.readystate = 4" навсегда, и я не могу продолжать

Пожалуйста, помогите! Спасибо!

Sub xx() 

    Dim ie As Object 
    Set ie = CreateObject("internetexplorer.application") 

    ie.Visible = True 
    AppActivate ie 
    apiShowWindow ie.hwnd, 3 
    ie.Visible = True 
    ie.navigate "http://cltd.ro/customer/account/login/" 
    Do 
    DoEvents 
    Loop Until ie.readystate = 4 

    On Error Resume Next 'in case I'm already loggen in 
    Call ie.Document.getElementById("email").setattribute("value", "dfgsdfg") 'not real value ;-) 
    Call ie.Document.getElementById("pass").setattribute("value", "dfgsdfg") 'not real value ;-) 
    Call ie.Document.getElementById("send2").Click 
    Do 
    DoEvents 
    Loop Until ie.readystate = 4 
    On Error GoTo 0   'cancels the resume next 

    Application.Wait (Now() + TimeValue("0:00:02")) 

    link = "http://cltd.ro/catalogsearch/resuilt/?q=60041" 
    ie.navigate link 
    Do 
    DoEvents 
    Loop Until ie.readystate = 4 

'Other lines of code ............... 

End Sub 

ответ

0

Это не отвечает на актуальный вопрос, но:

(1) Вы должны всегда иметь тайм-аут в вашем «ждать, пока документ готов» не петлями. В противном случае эти циклы могут ждать всегда, если страница не будет готова. Фактически, когда я попытался вручную (через строку URL IE) вручную перейти на «http://cltd.ro/customer/account/login/», он сидел там, вращаясь довольно долго, пока я не сдался и не остановился. Ваш код должен обнаруживать случаи, когда документ принимает слишком много, чтобы готовиться, и ответьте на что-то вроде «Веб-сайт не ответил в течение 60 секунд, вы хотите продолжать ждать? [Да] [Нет]».

(2) Вы не имеете права на случай, если страница делает, готовьтесь, но это не та страница, которую вы хотели. Например, если веб-сайт возвращает сообщение об ошибке, или IE решает его время, вы получите страницу с URL-адресом формы «res: // ...» - не на той странице, которую вы действительно просили. Вы не можете просто предположить, что на самом деле вы получили правильную страницу.

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