Доброго дня, уважаемые участники форума!
Прошу помочь разобраться с проблемой в макросе.
Суть проблемы такова. Есть небольшой макрос, который заполняет поля на сайте. Макрос работает с уже открытым окном браузера 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, закрыть старое окно и сделать:
то есть, из макроса запустить его же - это будет работать?
Просто сейчас протестировать этот момент не могу.
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 |