Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Per VBA "Id" aus geöffneter IE-Instanz (Adresse nicht fest) auslesen

Per VBA "Id" aus geöffneter IE-Instanz (Adresse nicht fest) auslesen
26.10.2019 07:53:04
Andrea
Hallo, hab sehr lange gesucht und bin noch nicht richtig weiter gekommen.
Folgendes also:
Ich möchte aus der letzten aktiven geöffneten IE Seite den Quellcode auslesen, bzw. dort bestimmte IDs ansteuern und deren Namen oder Inhalt in Excel in (z.B.) Zelle A1 wiedergeben. Die Adresse der IE-Seite ist variable. Ich kann die also nicht vorher gezielt ansteuern. Sie muss also geöffnet werden.
Unten angefügten Code hab ich gefunden. Der verursacht aber eine Fehlermeldung: "Objektvariable oder With-Blockvariable nicht festgelegt" bei: MsgBox ie.Document.body.innertext.
Was mache ich falsch. Danke für die Hilfe und viele Grüße
Andrea

Sub a()
Dim ie As Object
Dim objShell As Object
Dim objWindow As Object
Dim objItem As Object
Set objShell = CreateObject("Shell.Application")
Set objWindow = objShell.Windows()
For Each objItem In objWindow
If LCase(objItem.FullName Like "*iexplore*") Then
Set ie = objItem
End If
Next objItem
MsgBox ie.Document.body.innertext
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: cmd
26.10.2019 09:01:25
Fennek
Hallo,
jede Programmiersprache bietet die Tasklist an, z.B.

cmd &gt tasklist | find svchost.exe
In MS-Office bietet Word das Object "Tasks", also
dim TS as task
for each ts in tasks
debug.print ts.name
next ts
Bevor jemand mit Windows-APIs kommt, hier ein Powershellcode:
Get-Process | Format-Table ProcessName, Id | stop-process
| Format-List
| select-object Name1 name2
mfg
Anzeige
AW: cmd
26.10.2019 11:00:26
Andrea
Hallo Fennek, erstmal Danke für die schnelle Antwort. Nur leider kann ich damit nicht so viel anfangen. Ich kann ja auf die aktuell letzte geöffnete IE-Instanz per VBA zugreifen. Hab dazu noch mal einen weiteren Code, mit dem ich jetzt zwischenzeitlich etwas weiter kam und experimentieren konnte, unten angefügt. Nun möchte dann von einer bestimmten Position auf dieser geöffneten aktuellen IE-Seite den Inhalt einer "ID" auslesen und in Zelle z.B. "A2" übertragen. Per Msg Box funktioniert das Grundkonstrukt. Ich werde es wohl weiterprobieren. Aber vielleicht hat jemand diesbezüglich eine Idee.
Vielen Dank
Andrea
Sub b()

Sub main()
Set oWindowList = CreateObject("Shell.Application").Windows
If oWindowList.Count > 0 Then
Dim oWindow
For Each oWindow In oWindowList
If UCase(Right(oWindow.FullName, 12)) = "IEXPLORE.EXE" Then
Seite = oWindow.Document.body.outerHTML
Seite2 = Mid(oWindow.Document.body.outerHTML, 1, 60000)
'MsgBox (oWindow.Document.body.innerText)
'MsgBox (Seite)
Range("A1") = oWindow.LocationURL
Range("A2") = Seite2
End If
Next
End If
End Sub

Anzeige
Per VBA "Id" aus geöffneter IE-Instanz auslesen
26.10.2019 13:54:57
Anton
Hallo Andrea,
so?:
Code in Zwischenablage:

Sub b()
  Dim objShell As Object, win As Object  
  Dim al As Object, sID As String    
  sID = "doc-info" 'ID anpassen
  Set objShell = CreateObject("Shell.Application")  
  For Each win In objShell.Windows  
    If InStr(1, UCase(win.FullName), "IEXPLORE") > 0 Then    
      For Each al In win.Document.all    
        If al.ID = sID Then  
          MsgBox al.outerhtml
          Range("A2") = al.outerhtml
        End If  
      Next
    End If  
  Next
  Set objShell = Nothing  
End Sub  

mfg Anton
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA zur ID-Abfrage aus geöffneter IE-Instanz


Schritt-für-Schritt-Anleitung

Um die ID aus einer geöffneten Internet Explorer (IE) Instanz per VBA auszulesen, kannst du die folgenden Schritte befolgen:

  1. VBA-Editor öffnen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Neues Modul erstellen: Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Sub GetIEId()
        Dim objShell As Object
        Dim win As Object
        Dim al As Object
        Dim sID As String
    
        sID = "doc-info" ' Hier die ID anpassen
        Set objShell = CreateObject("Shell.Application")
    
        For Each win In objShell.Windows
            If InStr(1, UCase(win.FullName), "IEXPLORE") > 0 Then
                For Each al In win.Document.all
                    If al.ID = sID Then
                        MsgBox al.outerHTML
                        Range("A2") = al.outerHTML
                    End If
                Next al
            End If
        Next win
    
        Set objShell = Nothing
    End Sub
  4. Ausführen: Stelle sicher, dass der Internet Explorer mit der gewünschten Seite geöffnet ist, und führe das Makro aus, indem du F5 drückst oder das Makro über das Menü startest.


Häufige Fehler und Lösungen

  • "Objektvariable oder With-Blockvariable nicht festgelegt" Fehler: Dieser Fehler tritt auf, wenn der IE-Objekt nicht korrekt erkannt wird. Stelle sicher, dass der Internet Explorer geöffnet ist und die Seite geladen ist, bevor du das Makro ausführst.

  • ID wird nicht gefunden: Überprüfe, ob die angegebene ID (sID) in der HTML-Struktur der geöffneten Webseite vorhanden ist. Verwende die Entwicklertools (F12) in IE, um die IDs zu überprüfen.


Alternative Methoden

Falls du Schwierigkeiten mit dem Internet Explorer hast, kannst du auch PowerShell verwenden, um Informationen über laufende Prozesse zu erhalten. Hier ein Beispiel:

Get-Process | Where-Object {$_.ProcessName -eq "iexplore"} | Select-Object Id, ProcessName

Alternativ könntest du auch Microsoft Edge oder Chrome in Betracht ziehen, wenn du VBA mit Selenium kombinierst, um Webdaten zu extrahieren.


Praktische Beispiele

Ein einfaches Beispiel, um den Inhalt einer ID-Variable in Zelle A1 zu speichern, könnte so aussehen:

Sub GetContentById()
    Dim objShell As Object
    Dim win As Object
    Dim al As Object
    Dim sID As String

    sID = "myId" ' Hier die ID anpassen
    Set objShell = CreateObject("Shell.Application")

    For Each win In objShell.Windows
        If InStr(1, UCase(win.FullName), "IEXPLORE") > 0 Then
            For Each al In win.Document.all
                If al.ID = sID Then
                    Range("A1") = al.innerText
                End If
            Next al
        End If
    Next win

    Set objShell = Nothing
End Sub

Dieses Skript speichert den Text der ID myId in Zelle A1.


Tipps für Profis

  • Nutze Debug.Print, um den Wert von Variablen während der Ausführung zu überprüfen, was dir hilft, Probleme schneller zu identifizieren.
  • Achte darauf, deine Excel-Datei regelmäßig zu speichern, bevor du Makros ausführst, um Datenverlust zu vermeiden.
  • Experimentiere mit verschiedenen IDs und HTML-Elementen, um ein besseres Verständnis für die Struktur der Webseite zu erhalten.

FAQ: Häufige Fragen

1. Ist dieser Code auch in Excel 365 anwendbar? Ja, der Code funktioniert in Excel 365 sowie in älteren Versionen, solange du den Internet Explorer verwendest.

2. Was mache ich, wenn IE nicht mehr funktioniert? Du kannst versuchen, die Webseite in einem anderen Browser zu öffnen und die Webdaten mit Selenium und VBA zu extrahieren. Alternativ kannst du PowerShell oder andere Skriptsprachen verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige