AW: Bestehende Internet Explorer Instanz ansprechen
01.12.2018 00:15:41
Zwenn
Hi Marc,
wenn man pauschal On Error resume Next verwendet ist das immer schlecht. Das bügelt zwar sämtliche Fehler weg, aber wenn einer auftaucht, weiß man nicht welcher und alles sieht gut aus, ohne es zu sein. Diese Erfahrung hast Du immerhin schon einmal gemacht. In den meisten Fällen braucht man On Error auch gar nicht.
Wenn Du Deine Methode anwenden willst, um eine bestehende IE-Instanz zu nutzen, in der Yahoo geladen ist, um mit dieser auf heise.de zu landen, ist das zwar überflüssig, funktioniert aber so:
(Achtung: Wenn Yahoo nicht bereits im IE geöffnet ist, passiert gar nix. Anpassungen sind natürlich leicht möglich.)
Sub MitVorhandenemInternetExplorerWeiterSurfen()
Dim objShell As Object
Dim win As Object
Dim inAdresse As String
Dim zielURL As String
Dim knotenAst As Object
'Zeichenfolge, die in einem geöffnetem IE vorkommen soll
inAdresse = "yahoo"
'Adresse, die aufgerufen werden soll
zielURL = "https://www.heise.de/"
'Den Zugang zu allen geöffneten Fenstern öffnen
Set objShell = CreateObject("Shell.Application")
'Alle Fenster durchgehen
For Each win In objShell.Windows
'Prüfen, ob der Internet Explorer in den geöffneten Fenstern auftaucht
If InStr(1, UCase(win.FullName), "IEXPLORE") > 0 Then
'Prüfen ob in einer geöffneten Internet Explorer
'Adresse 'Yahoo' als Zeichenfolge vorkommt
If InStr(1, win.document.Location, inAdresse) Then
'In dieser Internet Explorer Instanz
'die Ziel-URL aufrufen
win.navigate zielURL
'Warten, bis die Ziel-URL vollständig geladen wurde
Do Until win.ReadyState = 4: DoEvents: Loop
'Keine weiteren geöffneten Fenster abfragen
Exit For
End If
End If
Next win
'Ab hier mit der Brower Instanz machen was Du willst
'Z.B. Die erste Überschrift auf heise.de auslesen
Set knotenAst = win.document.getElementsByClassName("a-article-teaser__title-text")(0)
If Not knotenAst Is Nothing Then
MsgBox knotenAst.innertext
End If
'Aufräumen
win.Quit
Set win = Nothing
Set objShell = Nothing
End Sub
Wenn Du auf eine bestimmte Seite hinaus willst, dann kannst Du diese aber auch immer direkt aufrufen, ohne dass es irgendwelche Probleme gibt:
Sub InternetSeiteDirektAufrufen()
Dim browser As Object
Dim url As String
Dim knotenAst As Object
url = "https://www.heise.de/"
'Internet Explorer Instanzieren, Sichtbarkeit festlegen
'URL aufrufen und warten bis die Seite aufgerufen wurde
Set browser = CreateObject("internetexplorer.application")
browser.Visible = True
browser.navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
'Ab hier mit der Brower Instanz machen was Du willst
'Z.B. Die erste Überschrift auf heise.de auslesen
Set knotenAst = browser.document.getElementsByClassName("a-article-teaser__title-text")(0)
If Not knotenAst Is Nothing Then
MsgBox knotenAst.innertext
End If
'Aufräumen
browser.Quit
Set browser = Nothing
Set knotenAst = Nothing
End Sub
Ich hoffe mit den beiden Beispielen kommst Du zurecht und erreichst, was Du möchtest.
Viele Grüße,
Zwenn