VBA Excel - Webseiten auslesen - Grafiken

Hallo,

nachdem der alte Thread dermaßen unübersichtlich geworden ist, hier ein neuer. Dank eurer Hilfe funktioniert das Makro schon ganz gut - jetzt arbeite ich auch mit der Split-Funktion. Allerdings war es gar nicht so einfach die richtigen „Schnittstellen“ zu finden. Return ist bei Html-Quelltext nicht besonders sinnvoll, da Returns da nichts bedeuten. Wenn, dann muss man an Steuerbefehlen ansetzen. Aber in meinen Webseiten ging das nicht immer so einfach, weil die Infos irgendwo im Text versteckt waren.

Ich hatte jetzt aber immer wieder Probleme mit dem IE. Irgendwie läuft die Routine nicht richtig rund. Die Zeit hab ich auf 30 Sekunden hochgeschalten. Trotzdem läd er manchmal trotz DSL einfach Seiten einmal langsamer oder macht hier bei Batch-Bearbeitung Probleme.

Weiterhin noch eine ggf. schnell zu beantwortende Fragen: könnte man auch irgendwie eine Grafik speichern, wenn man deren genaue Adresse wüßte?

Und die dann ggf. in der Excel-Trefferliste gleich mit der lokal gespeicherten Datei verlinken?

MfG

Stefan

Hallo,

Hallo,

nachdem der alte Thread dermaßen unübersichtlich geworden ist,
hier ein neuer. Dank eurer Hilfe funktioniert das Makro schon
ganz gut - jetzt arbeite ich auch mit der Split-Funktion.

Ok

Allerdings war es gar nicht so einfach die richtigen
„Schnittstellen“ zu finden. Return ist bei Html-Quelltext
nicht besonders sinnvoll, da Returns da nichts bedeuten. Wenn,
dann muss man an Steuerbefehlen ansetzen. Aber in meinen
Webseiten ging das nicht immer so einfach, weil die Infos
irgendwo im Text versteckt waren.

Auch HTML Seiten haben einen Zeilenumbruch. Es waere möglich das er diesen mit vbcr darstellt. Aber dazu muesste man die Webseite sehen.
Aber auch das spielt ja nun keine Rolle mehr, denn es klappt ja nun :smile:

Ich hatte jetzt aber immer wieder Probleme mit dem IE.
Irgendwie läuft die Routine nicht richtig rund. Die Zeit hab
ich auf 30 Sekunden hochgeschalten. Trotzdem läd er manchmal
trotz DSL einfach Seiten einmal langsamer oder macht hier bei
Batch-Bearbeitung Probleme.

Welche Batch Bearbeitung? in welcher Hinsicht macht die Function Probleme? Bei mir klappte alles anstandslos :smile:
Wie schnell die Daten geladen werden, haengt nicht von der Function ab, sondern vom Server auf dem die Daten liegen!

Weiterhin noch eine ggf. schnell zu beantwortende Fragen:
könnte man auch irgendwie eine Grafik speichern, wenn man
deren genaue Adresse wüßte?

Ja klar, nichts leichter als das :smile:

Und die dann ggf. in der Excel-Trefferliste gleich mit der
lokal gespeicherten Datei verlinken?

Ich denke mal das das geht. Nur leider bin ich in Sachen VBA nicht so gut :confused: Brauchst du eine Routine wie du das Bild lokal auf dem Rechner speichern kannst oder in einer PictureBox anzeigen kannst, so kann ich dir da weiterhelfen :smile:

MfG

Stefan

MfG Alex

Hallo Alex,

ich müßte das Bild speichern und hab im Internet folgende Lösung gefunden, die leider eine Fehlermeldung bei mir produziert („Objekt nicht gefunden“):

Set IE = CreateObject(„InternetExplorer.Application“)
Set WSHShell = WScript.CreateObject(„WScript.Shell“)
IE.Visible = 1
IE.Navigate „http://www02.wdr.de/webcam/cam1.jpg

Do While IE.busy
Loop

If Not Left(IE.Document.Title, 8) = „HTTP 404“ Then
WSHShell.SendKeys „%D“ ’ Alt-D „Datei“
WSHShell.SendKeys „u“ ’ u "Speichern unter „“
WSHShell.SendKeys „C:\test.jpg“ 'Pfad eingeben
WSHShell.SendKeys „~“ ’ Enter

Do While IE.busy
Loop

End If

An sich scheint es genau das zu sein, was ich brauche - also ein Bild unter einem speziellen Namen zu speichern. Vielleicht seht ihr irgendwo den Haken an dem Quellcode??

Grüße

Stefan

Hallo Stefan,

vergiss einfach mal die Variante.
Tastenanschlaege simuliert an eine Anwendung zu schicken, halte ich für Russisch Roulette :s
Stell dir mal vor. Du lädst das Bild. Genau indem Moment geht dein Antiviren Prog. an!
Dann bekommst du das Bild nicht gespeichert, denn die Tasten ALT+D und was es alles war, erreichen nie den Internet Explorer!

Probiere mal diese Variante aus :smile:

Option Explicit

Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Public Function LoadWebPicture(ByVal sURL As String, ByVal sFile As String) As Long
Dim nRet As Long
 LoadWebPicture = URLDownloadToFile(0, sURL, sFile, 0, 0)
End Function

'Ein Aufruf um ein Bild zu speichern, könnte wiefolgt ausschauen

Dim vRet as Long

vRet=LoadWebPicture("Http://DieAdressezumBild","DeinPfadzumSpeichern")

Nimmt vRet deb Wert 0 an, so wurde die Datei erfolgreich heruntergeladen. Ist der Wert 0 so hast du den FehlerCode :smile:
Diese Variante hat einen kleinen Nachtei. Das Bild wird geladen. Möchtest du dies erneut laden, so wird es aus dem Cache genommen!
Das bedeutet wenn das Bild geaendert wurde, so bekommst du das alte Bild wieder, welches im Cache liegt. Möchtest du dies umgehen, so mache dich der API

Private Declare Function DeleteUrlCacheEntry Lib "wininet.dll" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long

nützlich. Sie löscht den Eintrag aus dem Cache und das Bild wird erneut geladen!

Auch solltest du in der Function noch kleine Routinen einbauen, wie zum Bsp.
*was wird gemacht wenn die Zieldatei schon vorhanden ist?
*Existiert das Bild überhaupt ?
'Den Mauscursor umschalten auf die Eieruhr etc.

Aber all dies sollte kein Problem sein :smile:

MfG Alex