Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1660to1664
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bestehende Internet Explorer Instanz ansprechen

Bestehende Internet Explorer Instanz ansprechen
30.11.2018 20:22:16
Marc
Hallo Forumsgemeinde,
mit unten stehendem Code bin ich in der Lage alle bestehenden IE-Instanzen zu identifizieren.

Private Sub ShellFind()
Dim I As Integer
Dim objShell, objAllWindows As Object
Set objShell = CreateObject("Shell.Application")
Set objAllWindows = objShell.Windows
I = 1
For Each objShell In objAllWindows
If (InStr(1, objShell, "Internet Explorer", vbTextCompare)) Then
ActiveWorkbook.Sheets("Tabelle1").Range("A" & I) = objShell
ActiveWorkbook.Sheets("Tabelle1").Range("B" & I) = objShell.Hwnd
ActiveWorkbook.Sheets("Tabelle1").Range("C" & I) = objShell.Document.Title
ActiveWorkbook.Sheets("Tabelle1").Range("D" & I) = objShell.locationURL
I = I + 1
End If
Next
End Sub


Das Ergebnis sieht so aus:
Internet Explorer 198634 Bing http://www.bing.com/?pc=COSP&ptag=D010117-AF69C3D636C&form=CONMHP&conlogo=CT3335177
Internet Explorer 198634 Yahoo https://de.yahoo.com/?p=us&guccounter=1
Internet Explorer 198634 Digistore24 https://www.digistore24.com/

Im nächsten Schritt möchte ich nun beispielsweise die bestehende Yahoo Instanz ansprechen um Daten aus dem HTML Code der Webseite zu ziehen. Wie bekomme ich es nun aber hin via VBA genau diese Instanz anzusprechen?

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestehende Internet Explorer Instanz ansprechen
30.11.2018 20:45:35
Zwenn
Hallo Marc,
um Deine Frage direkt zu beantworten ... Ein Weg wäre, die Schleife mit Exit For zu verlassen, sobald die von Dir gewünschte Instanz gefunden wurde. Allerdings frage ich mich, warum Du Dir das Leben so schwer machst. Wenn Du etwas von Yahoo (oder von wo auch immer) auslesen willst, dann öffne doch einfach ganz gezielt eine IE Instanz, über die Du dann auch ganz automatisch die Macht hast.
Viele Grüße,
Zwenn
AW: Bestehende Internet Explorer Instanz ansprechen
30.11.2018 22:16:42
Marc
Hallo Zwenn,
das hat einen ganz bestimmtem Grund. Ich habe ein Makro geschrieben, dass leider Probleme macht wenn bereits Instanzen des IE offen sind und ich dazu dann eine neue öffne. Also möchte ich lernen eine bestimmte der bereits geöffneten Instanzen anzusprechen. Es kann sicher nicht schaden zu wissen wie das funktioniert. ;)
Ich habe den Vorschlag von Dir auch bereits umgesetzt, das Makro durchläuft den Code auch ohne zu meckern, allerdings navigiert der Browser nicht zu der gewünschten URL.

Private Sub IEApproach()
Dim IE As Object
Dim x As Integer
Dim Title As String
Dim Count As Integer
Dim objShell As Object
Set objShell = CreateObject("Shell.Application")
Count = objShell.Windows.Count
MsgBox (Count)
For x = 0 To (Count - 1)
On Error Resume Next
Title = objShell.Windows(x).document.Title
If Title = "Yahoo" & "*" Then
Set IE = objShell.Windows(x)
GoTo Ende
Else
End If
Next x
Ende:
IE.navigate "http://https://www.heise.de/"
End Sub

Anzeige
AW: Bestehende Internet Explorer Instanz ansprechen
30.11.2018 22:24:14
Marc
Kleine Ergänzung: Das Makro meckert doch, es wurde durch "On Error resume Next" nur unterdrückt.
Folgende Zeile wird als fehlerhaft moniert:
Title = objShell.Windows(x).document.Title
"Ungültiger Prozeduraufruf oder ungültiges Argument" lautet die Meldung.
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
Anzeige
AW: Bestehende Internet Explorer Instanz ansprechen
01.12.2018 00:04:55
Marc
Ich hab es geschafft:

Private Sub ShellFind()
Dim IE As Object
Dim objShell, objAllWindows As Object
Set objShell = CreateObject("Shell.Application")
Set objAllWindows = objShell.Windows
For Each objShell In objAllWindows
If (InStr(1, objShell, "Internet Explorer", vbTextCompare)) _
And (InStr(1, objShell.Document.Title, "Yahoo", vbTextCompare)) Then
Set IE = objShell
Exit For
Else
End If
Next
IE.navigate "http://www.heise.de"
End Sub


Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige