Страницы: 1
RSS
Макрос: работа с окнами браузера IE
 
Доброго дня, уважаемые участники форума!
Прошу помочь разобраться с проблемой в макросе.

Суть проблемы такова. Есть небольшой макрос, который заполняет поля на сайте. Макрос работает с уже открытым окном браузера IE (при запуске макроса IE уже открыт на нужном сайте). Доступ к открытому окну браузера получаю так:
Код
Public Const sAppName As String = "Internet Explorer"


sub ie_macro()

new_ie:

Dim oShellWindows As New SHDocVw.ShellWindows
Dim ie_browser As SHDocVw.WebBrowser
Dim sFlag As Boolean
sFlag = False
If oShellWindows.Count = 0 Then
MsgBox "Браузер не открыт!", vbCritical
Exit Sub
End If
For Each ie_browser In oShellWindows
If ie_browser.Application = sAppName Then
    bFlag = True
    ie_browser.Visible = False
    ie_browser.Visible = True

If bFlag = False Then
MsgBox "Браузер не открыт!", vbCritical
Exit Sub
End If

Exit For
End If
Next ie_browser


ie_browser.document.getElementById("text_1").Value = "Какой-то текст 1"
ie_browser.document.getElementById("text_2").Value = "Какой-то текст 2"

end sub
В процессе работы макроса появляется необходимость в открытии нового окна браузера IE (именно окна, не вкладки), перехода по URL и закрытии старого окна IE, после чего работа макроса должна продолжиться уже в новом открытом окне IE, а старое - закрывается.


Написал такой код.:
Код
new_ie:

 If new_ie_id = 1 Then
 
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.navigate "Необходимый URL сайта"
        Application.Wait (Now + TimeValue("0:00:03"))
ie_browser.Quit
Set ie_browser = Nothing
new_ie_id = 0
        Application.Wait (Now + TimeValue("0:00:03"))
        
        
GoTo new_ie:
 
 
End If
По моему пониманию, данный код должен открыть новое окно браузера, перейти на заданный URL, далее закрыть старое окно браузера и перейти на маркер new_ie, где макрос заново найдет открытое окно браузера IE и продолжит работу так, будто бы макрос только что запущен.

По факту же, из всего указанного работает только открытие нового окна браузера, переход по ссылке и с переменным успехом закрывается старое окно (иногда может не закрыться). После чего все повисает, макрос не продолжает работу с новым окном браузера и подвисает на первой же строке кода, где используется ie_browser.getElementByID("...").value = "....".
Если остановить макрос и навести мышкой на ie_browser, то видно, что скрипт на определил новое окно и подсвечивается ошибка "variable or with block variable not set".

Понимаю, что мой код далек от совершенства.
Помогите, пожалуйста, понять что мешает работе с новым окном, как описано выше.

Спасибо!



UPD: пришла такая мысль... Если открыть новое окно браузера, перейти по URL, закрыть старое окно и сделать:
Код
call ie_macro
то есть, из макроса запустить его же - это будет работать?
Просто сейчас протестировать этот момент не могу.






UPD 2:
Насколько удалось понять данный код просто не замечает новое открытое окно браузера IE и не передает переменной ie_browser управление браузером.. Однако данный код отлично работает, если остановить макрос и запустить его заново руками, но если перейти в начало кода через GoTo, то код не перехватывает окно IE...


Код
Public Const sAppName As String = "Internet Explorer"sub ie_macro()

new_ie:

Dim oShellWindows As New SHDocVw.ShellWindows
Dim ie_browser As SHDocVw.WebBrowser
Dim sFlag As Boolean
sFlag = False
If oShellWindows.Count = 0 Then
MsgBox "Браузер не открыт!", vbCritical
Exit Sub
End If
For Each ie_browser In oShellWindows
If ie_browser.Application = sAppName Then
    bFlag = True
    ie_browser.Visible = False
    ie_browser.Visible = True

If bFlag = False Then
MsgBox "Браузер не открыт!", vbCritical
Exit Sub
End If

Exit For
End If
Next ie_browser


ie_browser.document.getElementById("text_1").Value = "Какой-то текст 1"
ie_browser.document.getElementById("text_2").Value = "Какой-то текст 2"

end sub
Изменено: footballplayer - 26.02.2018 16:03:09
Страницы: 1
Наверх