2014-12-18 2 views
0

Как ни странно, я не нашел никакой информации по этой теме, и я сейчас застрял в точке, где мне удалось открыть новую вкладку в экземпляре IE, программным образом нажав кнопку, но Я не имею ни малейшего понятия, как обращаться к новой вкладке, чтобы получить информацию оттуда (кнопка в основном открывает новую вкладку с результатом поиска).VBA - Адресация вкладок Internet Explorer

В основном это простой вопрос, но я в том числе мой код все равно:

Sub AddInfoFromIntranet() 

Dim Ie As SHDocVw.InternetExplorer 
Dim URL As String 
Dim iFrames As MSHTML.IHTMLElementCollection 
Dim iFrame As MSHTML.HTMLFrameElement 
Dim Doc As MSHTML.HTMLDocument 
Dim InputBox As MSHTML.IHTMLElementCollection, htmlButton, allTags, Tag 

' Opens Intranet - yeah, sadly it's not a public web page 
URL = "{My intranet website}" 
Set Ie = New SHDocVw.InternetExplorer 
With Ie 
    .navigate URL 
    .Visible = True 
    While .Busy Or .readyState <> READYSTATE_COMPLETE: DoEvents: Wend 
    Set Doc = .document 
End With 

' Gets top_window frame and navigates to it, then inserts the name to search 
Set iFrames = Doc.getElementsByName("top_window") 
If Not iFrames Is Nothing Then 

    Set iFrame = iFrames(0) 
    Ie.navigate URL & iFrame.src 

    While Ie.Busy Or Ie.readyState <> READYSTATE_COMPLETE: DoEvents: Wend 
    Set InputBox = Doc.getElementsByName("Nachnamevalue") 
    If Not InputBox Is Nothing Then InputBox(0).Value = "test" 

    ' Clicks on "search" 
    Set allTags = Doc.getElementsByTagName("input") 
    For Each Tag In allTags 
     If Tag.Value = "suchen" Then 
      Tag.Click 
      Exit For 
     End If 
    Next 

    ' Here a new tab is opened, must find info in this tab 
    While Ie.Busy Or Ie.readyState <> READYSTATE_COMPLETE: DoEvents: Wend 

    ' HERE I HAVE NO CLUE WHAT TO WRITE. THE CODE ABOVE WORKS FLAWLESSLY 

End If 

Set Doc = Nothing 
Set iFrames = Nothing 
Set iFrame = Nothing 
Set InputBox = Nothing 
Set allTags = Nothing 
Set Ie = Nothing 

Ie.Quit 

End Sub 

Теперь есть способ обратиться вкладками: 1) его имя (и где я могу найти его) 2) его положение в браузере 3) статус (если он «активен»)?

Бонусные вопросы: поскольку я новичок в взаимодействии с VBA и Internet Explorer, что именно представляют собой переменные: htmlButton, allTags, Tag? Кроме того, может ли кто-нибудь объяснить, нужно ли мне устанавливать все переменные в конце ни к чему, или мне просто нужно настроить Internet Explorer на ничего?

Заранее благодарен!

ответ

3

Ниже приведена функция, которую вы можете использовать для открытия открытого окна IE. Я не думаю, что IE предоставляет простой (доступный VBA) API для работы непосредственно с вкладками или определения активной вкладки.

allTags представляет собой набор элементов DOM с типом «», а Tag - это единственный член этой коллекции.

У вас нет , чтобы установить объекты в Nothing перед выходом из Sub (хотя некоторые люди все еще это делают) - время выполнения VBA позаботится об этом для вас.

Sub TestGetIE() 
Dim IE As Object 

    Set IE = GetIE("http://stackoverflow.com") 
    If Not IE Is Nothing Then 
     IE.document.execCommand "Print", False, 0 
    End If 

End Sub 

'Get a reference to an open IE window based on its URL 
Function GetIE(sLocation As String) As Object 

Dim objShell As Object, objShellWindows As Object, o As Object 
Dim sURL As String 
Dim retVal As Object 

    Set retVal = Nothing 
    Set objShell = CreateObject("Shell.Application") 
    Set objShellWindows = objShell.Windows 

    For Each o In objShellWindows 
     sURL = "" 
     On Error Resume Next 
     'check the URL and if it's the one you want then 
     ' assign it to the return value 
     sURL = o.document.Location 
     On Error GoTo 0 
     'Debug.Print sURL 
     If sURL Like sLocation & "*" Then 
      Set retVal = o 
      Exit For 
     End If 
    Next o 

Set GetIE = retVal 

End Function 
+0

Я дважды проверил мой адрес (который справа), но присваивание Surl возвращает всегда «Ничто» ... не кажется мне, что снаряды работают правильно, так как 2 вкладки в экземпляре IE открыты и назначение выполняется 2 раза. Я изменил на 'sURL = o.LocationURL' и, похоже, работает. Это нормально? (Я не знаю, как работать с IE). – Noldor130884

+0

Если это работает для вас, тогда это кажется прекрасным. У меня нет доступа к ПК в течение следующих нескольких дней для тестирования. –

+0

Я бы попросил вас протестировать его и дать мне мнение о редактировании, которое я предложил («правильно ли» с точки зрения программиста? Почему ваш Sub дал мне «Nothing»?). Когда вы это сделаете, я с радостью буду отмечать ваш ответ как правильный. – Noldor130884

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