Hallo Rainer oder Sandra oder wer auch immer,
ich fürchte Du stellst Dir das etwas einfach vor und das Ergebnis des kleinen angepassten Makros unten wird auch nicht liefern was Du Dir denkst. Es nimmt den gesamten Text aus dem Body-Tag und schreibt ihn in eine Textdatei. Den Pfad musst Du für Dich anpassen, wenn Du es ausprobierst. Wenn Du in den Text guckst, wirst Du zwar den gesamten sichtbaren Text der Seite finden, aber z.B. auch sämtliche HTML Kommentare, die Du mit Sicherheit nicht willst. Darüber hinaus wird der Text einfach so übernommen, wie er in den Tags steht. Ist Text mittendrin durch zwei Tags getrennt, wird er durch das Makro unter Umständen direkt ohne Leerzeichen oder nicht in Tabellenform zusammengeklatscht.
Das liegt daran, dass man das Auslesen von Informationen aus Internetseiten nicht über die Inhalte steuert, sondern über die Struktur. Diese ist festgelegt über HTML-Tags und CSS-Klassen. Das bedeutet, um geziekt Informationen auszulesen, die man auch wirklich will und sie so abzuspeichern, dass sich damit auch etwas anfangen lässt, muss man auf die Einzelteile der Seite zugreifen. Für sehr strukturierte Daten, wie z.B. Tabellen, kann man das über PowerQuery ganz ohne VBA machen (da bin ich kein Experte für). Für Informationen, die über die Seite verstreut ist oder eine unregelmäßige Struktur aufweist, verwendet man das DOM (Docuemnt Object Model).
Mehr will ich an dieser Stelle eigentlich gar nicht dazu sagen, zumal ich davon ausgehe, dass die URL, die Du ins Makro geschrieben hast nicht die ist, die Du wirklich auslesen willst. Ich bin ansonsten nur im Herber Forum aktiv und habe da auch schon einiges zum DOM erklärt. Aber Du kannst auch einfach googeln, um Dich mit den Möglichkeiten vertraut zu machen.
Sub TextAusInternetSeiteSpeichern()
Dim IEApp As Object
Dim sTxt As String
'Instanz des Internet Explorer initialisieren, sichtbarkeit festlegen,
'URL aufrufen und warten bis sie vollständig geladen wurde
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.Navigate "http://www.office-loesung.de/ftopic343448_0_0_asc.php"
Do: Loop Until IEApp.Busy = False
'Text innerhalb des Body-Tags in eine String-Variable schreiben
sTxt = IEApp.Document.getElementsByTagName("Body")(0).innertext
'Inhalt der String-Variable in der Datei 'Test.txt' im Root Verzeichnis von D: speichern
Close
Open "D:\Test.txt" For Output As #1 '<-- Pfad Anpassen
Print #1, sTxt
Close
'Aufräumen
IEApp.Quit
Set IEApp = Nothing
End Sub
Noch eine Anmerkung zur Methode ExecWB 4, 1. Dieser Befehl weist den IE an die Seite zu speichern. Selbst wenn das klappt, wobei ich Sendkeys nur in Notfällen einsetzen würde, passiert das jedoch als HTML Datei plus der zugehörigen Bilder und JavaScripte in einem extra Verzeichnis. Damit erreichst Du also nicht mal Ansatzweise was Du möchtest.
Viele Grüße,
Zwenn
|