Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Internet Explorer ошибка / 4 сообщений из 4, страница 1 из 1
03.08.2012, 12:35
    #37903272
makkostya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Internet Explorer ошибка
Хочу с помощью VBA организовать работу с браузером - открыть страницу, понажимать на кнопки и т. д.. На конкретном примере:
Первая страница - авторизация. Ввожу логин и пароль, нажимаю на кнопку:
Код: html
1.
<input id="e6" class="button b" type="button" value="Login" onclick="post(this.id,event);">


После этого открывается другая страница (во всяком случае визуально) и там есть тег <Select>:
Код: html
1.
2.
3.
4.
<select id="e27" class="mainmenu" onchange="post(this.id,event);">
<option id="e28">0 - Selections</option>
<option id="e29">1 - Campaigns</option>
<option id="e45">G - Misc</option></select>


Мне надо выбрать определенный option и т. д.
Для этого написал код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Login = Range("A1").Value
MDP = Range("A2").Value
Dim IE As New InternetExplorer
Dim IEDoc As HTMLDocument
Dim InputGoogleZoneTexte As HTMLInputElement
Dim InputGoogleBouton As HTMLInputElement   
   IE.navigate "http://10.21.*******"     
   IE.Visible = True    
   Do While (IE.readyState <> 4): Loop     
   Set IEDoc = IE.document  
      
   Set InputGoogleZoneTexte = IEDoc.all("e3")  'Авторизация
   InputGoogleZoneTexte.Value = Login
   Set InputGoogleZoneTexte = IEDoc.all("e2")
   InputGoogleZoneTexte.Value = MDP   
   
   IEDoc.getElementById("e6").Click   'Нажимаю кнопку
   
   Do While (IE.readyState <> 4): Loop

   Set opt = IEDoc.getElementById("e27").Options("e40")  'тут возникает ошибка
   opt.Selected = "True"
   Set bot = IEDoc.getElementById("e85")
   bot.Click
   IEDoc.getElementById("e91").Click



Проблема в том,что в процессе выполнения кода (авторизация прошла и новая страница открылась) выскакует ошибка:
"Run-time error '91' - Object variable or With Block variable not set "
Выделена строка:
Код: vbnet
1.
Set opt = IEDoc.getElementById("e27").Options("e40")



Самое смешное, что если дальше нажать F5 - все продолжает правильно работать.

Подскажите пожалуйста в чем проблема? Заранее спасибо!
...
Рейтинг: 0 / 0
03.08.2012, 13:37
    #37903410
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Internet Explorer ошибка
makkostya'тут возникает ошибкаТам уже другой IEDoc, старый документ уничтожается при каждом переходе.
...
Рейтинг: 0 / 0
03.08.2012, 15:41
    #37903652
makkostya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Internet Explorer ошибка
Antonariymakkostya'тут возникает ошибкаТам уже другой IEDoc, старый документ уничтожается при каждом переходе.
Нет. Пробовал заново присваивать IEDoc, та же история. Дело не в этом. Проблему уже решил. Вместо:
Код: vbnet
1.
Do While (IE.readyState <> 4): Loop


прописал:
Код: vbnet
1.
Do While IE.Busy: Loop


В чем разница, понимаю не совсем. Но видимо есть, раз заработало.
...
Рейтинг: 0 / 0
04.03.2013, 13:59
    #38173289
alexey_grigorov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Internet Explorer ошибка
Та же проблема, только Do While IE.Busy: Loop не помогло! ((

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
Private Sub Form_Load()

Set Sys.Icon = Image2.Picture
Sys.Visible = True
Sys.Enabled = True
Me.WindowState = 0
Me.Hide

Dim objIE As Object

Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = True
    objIE.Navigate ".........."
    
    While objIE.Busy
    DoEvents
    Wend

objIE.document.Forms(0).Elements("pt1:it1").Value = "........."
Wait (1)
objIE.document.Forms(0).Elements("pt1:it2").Value = "............."
Wait (1)
objIE.document.getelementbyID("pt1:cb1").Click
Wait (1)

    While objIE.Busy
    DoEvents
    Wend
objIE.document.getelementbyID("pt1:j_id5").Click
    Wait (1)
    While objIE.Busy
    DoEvents
    Wend
objIE.document.getelementbyID("pt1:r1:0:j_id6::disAcr").Click 'Інформація
    Wait (1)
    While objIE.Busy
    DoEvents
    Wend
    
    Wait (1)
    
objIE.document.getelementbyID("pt1:r1:0:mcl_63").Click 
    Wait (1)
    While objIE.Busy
    DoEvents
    Wend

    TestPos = InStr(1, objIE.document.body.innerText, "No data to display.")
    
    Do
    
    Debug.Print objIE.document.body.innerText
                If TestPos <> 1722 Then
                Set Sys.Icon = Image3.Picture
                Sys.DisabledBalloonIcon = Info
                Sys.BalloonText = "Пришло письмо или почта необработанна!"
                Sys.BalloonTitle = "Сообщение"
                Sys.ShowBalloon
            End If
    objIE.document.getelementbyID("pt1:r1:0:perSends:0:pc1:ctb1::icon").Click 'обновить
    
    While objIE.Busy
    DoEvents
    Wend
    
    Wait (60)
    Loop
    
    
    
End Sub

Public Sub Wait(seconds)
Timer1.Enabled = True 'включение таймера
Timer1.Interval = 1000 * seconds 'установка интервала для таймера
While Timer1.Interval > 0
DoEvents
Wend
Timer1.Enabled = False ' выключение таймера
End Sub

Private Sub Sys_Click(Button As Integer)
Set Sys.Icon = Image2.Picture
End Sub

Private Sub Timer1_Timer()
Timer1.Interval = 0
End Sub



Но что интересно, через F8 все работает (пошагово), а через RUN постоянно ошибки, то на одной ссылке, то на другой.
Что не так??
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Internet Explorer ошибка / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]