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

Text aus einer bestimmten HTML-Tag auslesen

Text aus einer bestimmten HTML-Tag auslesen
02.06.2017 04:05:53
Franz
Hallo zusammen,
ich muss in schöner Regelmäßigkeit Daten aus einer HTML Datei suchen, die mir ein Kollege übergibt. Die Daten stehen dabei jedesmal folgendermaßen in mehreren Tags im gleichen Dokument:

"[" & "]" sind ""
[td class="vs129"][strong] TEXT1 [/strong] TEXT2 [/td]

Wie kann ich diesen HTML-Tag via VBA direkt ansteuern und den TEXT1 jeweils in eine Zelle kopieren?
Ich habe mich bisschen erkundigt und bin soweit gekommen:

Option Explicit
Sub GetData()
Dim IEApp As Object, all As Object
Dim zeile As Long, spalte As Integer
zeile = 18
spalte = 1
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.Navigate ("https://www.link.com/123") 'Daten Seite
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.ReadyState = 4 'Geladen
For Each all In IEApp.Document.all
If all.classname = "vs129" And all.nodename = "td" Then
Tabelle1.Cells(zeile, spalte) = all.innertext
zeile = zeile + 1
End If
Next
IEApp.Quit()
IEApp = Nothing
MsgBox ("Fertig")
End Sub

Viele Grüße,
Franz

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

Betreff
Datum
Anwender
Anzeige
AW: getElementByClass
02.06.2017 08:06:49
Fennek
Hallo,
würde es helfen gezielt diese Class auzulesen: [td class="vs129"]
Man müßte prüfen, wie häufig diese Class vorkommt, falls es selten genug wäre, könnte der Text dann direkt gelesen werden.
mfg
AW: getElementByClass
03.06.2017 03:49:01
Franz
So, ich habe es geschafft, dass ich alle mit Class Name "vs129" in meine Excel Mappe zu kopieren, indem ich einfach nodename weggelassen habe.
Aber jetzt habe noch ein problem und zwar 20 Zellen. Ich brauche aber nur die erste Zelle.
Wie kann ich nach der ersten "vs129" abbrechen, weiter zu suchen ? Natürlich kann ich es manuell löschen, aber ich will auch ein schnelles programm :)
Mit exit for hat es nicht geklappt, da habe ich keinen Text bekommen.
mfg Franz

'Dim f as long
'f=0
For Each all In IEApp.Document.all
If all.classname = "vs129" Then
Tabelle1.Cells(zeile, spalte) = all.innertext
spalte = spalte + 1
'f = f + 1
End If
'If f = 1 Then Exit For
Next

Anzeige
AW: for ... next
03.06.2017 08:33:00
Fennek
Hallo,
nur ein Spruch ins Blaue:
Meisten kann man For each ersetzen durch
for i = 1 to .count
oder
MeinWert = .getElementByClass(1)
Da ich es nicht testen kann, bleibt es vage.
mfg
AW: for ... next
03.06.2017 13:04:15
Franz
Wie sollte es dann ausschauen ?
for i = 1 to .count all In IEApp.Document.all
hat nicht funktioniert
AW: getElementByClass
03.06.2017 20:07:51
Zwenn
Hallo Franz,
Fennek hatte Dir ja schon den Hinweis gegeben, dass sich Dein Problem über getElementsByClassName() lösen lässt. Dieser Befehl erzeugt ein Array aus allen HTML-Elementen, die die CSS-Klasse mit dem angegebenen Namen zur Formatierung zugewiesen bekommen haben. Dieses Array beginnt mit dem Index 0. Wenn Du also weißt, dass Du immer und ausschließlich das erste Element dieses Array brauchst, kannst Du das folgendermaßen erreichen:

Option Explicit
Sub GetData()
Dim IEApp As Object
Dim gewuenschterWert As Object
Dim zeile As Long
Dim spalte As Integer
zeile = 18
spalte = 1
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.Navigate ("https://www.link.com/123") 'Daten Seite
Do: Loop Until IEApp.ReadyState = 4 'Geladen
'Versuchen das Objekt "gewuenschterWert" zu erzeugen
'Es soll aus dem ersten Array Element aller HTML Elemente
'mit der zugewiesenen CSS Klasse "vs129" bestehen
Set gewuenschterWert = IEApp.Document.getElementsByClassName("vs129")(0)
'Prüfen, ob das Objekt erzeugt werden konnte und entsprechend weiter verfahren
If Not gewuenschterWert Is Nothing Then
'Objekt konnte erzeugt werden und wird nun in die Tabelle geschrieben
Tabelle1.Cells(zeile, spalte) = gewuenschterWert.innertext
Else
'Objekt konnte nicht erzeugt werden, weil es kein HTML Element
'mit der zugewiesenen CSS Klasse "vs129" gibt
MsgBox "Wert nicht vorhanden"
End If
IEApp.Quit
IEApp = Nothing
MsgBox ("Fertig")
End Sub
Die Schleife wird erst notwendig, wenn Du aus dem Array den richtigen Wert oder mehrere richtige Werte ausfiltern musst. Sobald Du weißt, das wievielte Element Du immer brauchst, kannst Du seinen Index im Array direkt in der runden Klammer hinter getElementsByClassName() angeben. Im Quelltext wird das erste Element mit dem Index 0 so angegeben: IEApp.Document.getElementsByClassName("vs129")(0)
Nur der Vollständigkeit halber:
Das all, dass Du in Deiner Version hinter Document verwendet hast IEApp.Document.all, wird zwar noch unterstützt, gehört aber nicht mehr zum Standard. Deshalb sollte man es nicht mehr benutzen. Es kann einfach sein, dass es in einer zukünftigen Version nicht mehr unterstützt wird.
Viele Grüße,
Zwenn
Anzeige
AW: getElementByClass
04.06.2017 01:21:48
Franz
Danke läuft perfekt !!!

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige