Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1676to1680
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

Aufruf geöffneter IE/Rückgabe HTML

Aufruf geöffneter IE/Rückgabe HTML
07.03.2019 09:01:07
David
Guten Morgen,
ich habe folgendes Problem: Ich habe eine Anwendung im IE geöffnet, der User ist angemeldet und befindet sich auf der Startseite. Ich möchte nun aus einer anderen Anwendung heraus ein Makro aufrufen, dass:
a) Den geöffneten IE anhand einer eindeutigen Kennung (Name) identifiziert
b) Den geöffneten IE in den Vordergrund holt und aktiviert.
c) Mir ein Objekt vom Typ SHDocVw.InternetExplorer aus der Bibliothek Microsoft Internet Controls zurückgibt, sodass ich über diesen wiederrum in den HTML Quellcode und das DOM einsteigen kann.
Die Startseite stellt mir Methoden bereit, an die ich nunmehr andocken möchte. Schritt a und b löse ich über den Window Handle, was auch bereits einwandfrei funktioniert. Allerdings kann ich vom Window Handle nicht auf das SHDocVw.InternetExplorer Objekt wechseln, da hier eine Typunverträglichkeit vorliegt.
Soweit ich es gelesen habe, ist ein Typcast in VBA nicht möglich. Wie kann ich das Problem dann lösen? Hier ist ein (Teil)ausschnitt des Quellcodes, insb. derjenige, der nicht funktioniert.
Sub Main(JsonFile As String)
'Bibliothek: Microsoft Internet Controls
Dim IE_Handle As Long
Dim IE As SHDocVw.InternetExplorer
IE_Handle = OpenWindow
'funktioniert bereits, Funktion OpenWindow hier nicht weiter aufgeführt
If IE_Handle  0
Then Set IE = IE_Handle
'hier schlägt der Typcast fehl
IE.Visible = True
'Warten auf Fertigladen
Do While IE.ReadyState  READYSTATE_COMPLETE
Loop
Else 'Verhalten, wenn kein IE geöffnet ist definieren
End If
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aufruf geöffneter IE/Rückgabe HTML
07.03.2019 09:36:48
Zwenn
Hallo David,
natürlich ergibt das einen Typenfehler, denn ein Long (IE_Handle) ist ein Primitive und kein Object (IE). Wobei Objekte sich logischerweise sowieso nicht casten lassen. Nun zeigst Du nicht, wie Du an das Handle kommst. Ich würde den offenen IE aber über über die Shell holen und direkt den gefundneen IE als Objekt zurück geben. Dabei kannst Du ihn auch gleich in den Vordergrund holen.
Ungetestet:
(Gibt entweder den gefunden IE oder Nothing zurück)

Function IEHolen(url As String) As Object
Dim objShell As Object
Dim IEApp As Object
Dim win As Object
Set objShell = CreateObject("Shell.Application")
For Each win In objShell.Windows
If InStr(1, UCase(win.FullName), "IEXPLORE") > 0 Then
If win.Document.Location = adresse Then
AppActivate win.Document.Title
Exit For
End If
End If
Next
IEHolen = win
End Function

Viele Grüße,
Zwenn
Anzeige
AW: Aufruf geöffneter IE/Rückgabe HTML
07.03.2019 09:41:53
Zwenn
Nochmal ohne die offensichtlichen Ungereimtheiten nach dem Anpassen aus einer Sub ;-)

Function IEHolen(url As String) As Object
Dim objShell As Object
Dim win As Object
Set objShell = CreateObject("Shell.Application")
For Each win In objShell.Windows
If InStr(1, UCase(win.FullName), "IEXPLORE") > 0 Then
If win.Document.Location = url Then
AppActivate win.Document.Title
Exit For
End If
End If
Next
IEHolen = win
End Function

AW: Aufruf geöffneter IE/Rückgabe HTML
07.03.2019 10:13:25
David
Hallo Zwenn,
vielen Dank zunächst für Deine Antwort. Die Begründung des Typcast auf Objekt ist natürlich nachvollziehbar, auch dass Du nicht über die Window Handle, sondern über einen Shell gehen willst. Ich habe aber bei Ausführung Deines Codes zwei Probleme:
1. Die Zeile IEHolen = win führt zu (Fehler 91) Objektvariable oder With-Blockvariable nicht festgelegt. Setze ich ein "set" davor, gibt es keine Probleme.
2. Füge ich noch ein Debug.print hier hinzu:
****
For Each win In objShell.Windows
debug.print win.FullName
If InStr(1, UCase(win.FullName), "IEXPLORE") > 0 Then
****
gibt mir der Direktbereich lediglich "C:\WINDOWS\Explorer.EXE". Verstehe ich die Funktion dahingehend richtig, dass jedes offene Fenster nach seinem vollständigen Namen durchsucht werden soll und dann mit der InStr-Funktion auf das Enthaltensein von "IEXPLORE" durchsucht wird?
In diesem Fall würde ich erwarten, dass der debug.print Befehl mehrere Zeilen ausgibt, da ich mehrere Fenster (Internet Explorer, Word, ...) offen habe. Dies ist aber nicht der Fall.
Folglich schlägt auch die Funktion fehl, der IE wird nicht gefunden und nicht in den Vordergrund geholt.
Hast Du oder jemand anderes noch einen weiteren Tipp?
Danke und Grüße
David
Anzeige
AW: Aufruf geöffneter IE/Rückgabe HTML
07.03.2019 10:48:45
Zwenn
Hallo David,
mit dem Set hast Du natürlich recht. Das habe ich schlicht vergessen hinzuschreiben.
Die Schleife geht eigentlich alle geöffneten Anwendungen durch. Sobald ein IE gefunden wurde, wird die übergebene URL mit der im gefundenen IE verglichen. Wurde sie gefunden, wird die Schleife verlassen.
Wenn Du jetzt einen vorhandenen IE damit nicht finden kannst wundert mich das. Denn ich habe nur eine Sub etwas umgeschrieben, die zum Auffinden eines IE genau so funktioniert. Ich habe im Moment leider keine Zeit das auszuprobieren. In der Tat würde ich allerdings auch erwarten, dass alle geöffneten Programme mit Debug.Print ausgegeben werden. Eine einzelne Ausgabe sollte lediglich erfolgen, wenn der richtige IE direkt im ersten Schleifenlauf gefunden wurde. Dann würdest Du ihn allerdings auch von der Funktion zurückgeliefert bekommen.
Ggf. schaue ich mir das später noch einmal genauer an.
Viele Grüße,
Zwenn
Anzeige
Aufruf geöffneter IE/Rückgabe HTML
07.03.2019 15:29:58
Anton
Hallo David,
vielleicht hilft dir dieser Beitrag weiter.
mfg Anton
AW: Aufruf geöffneter IE/Rückgabe HTML
07.03.2019 18:41:47
Zwenn
Hallo Anton,
die ursprüngliche Prozedur ist also von Dir. Hätte ich mir ja fast denken können :-) Mir ist die in etwas abgewandelter Form in einer anderen Anfrage begegnet und ich dachte direkt daran, als ich die Frage von David gelesen habe.
Ich habe viel aus Deinen Beiträgen gelernt. Danke dafür :-)
Viele Grüße,
Zwenn

22 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige