VBA - download aus Internet automatisieren

Ich möchte gerne den Download von Excel-Dateien aus dem Internet automatisieren.
Diese Dateien liegen aber nicht fest (und mit bestimmtem Namen) irgendwo auf einem FTP-Server oder ähnlichem, sondern werden auf Anforderung (je nach Wahl des Datums) erstellt.

Es handelt sich um folgende Quelle:
https://www.theice.com/marketdata/re…&contractkey=1

Geliefert wird jeweils die folgende Datei: EndOfDayFuturesResults.xls (mit jeweisl unterschiedlichem Inhalt - je nach Datum).

Wie kann ich den Download dieser Dateien unter VBA automatisieren?
D.h. im Detail:

  1. Ist es möglich, den Zeitstempel (und die Produktart) per Makro auszuwählen?
  2. Kann ich den Download an sich automatisieren?

Danke im Voraus.

Es handelt sich um folgende Quelle:
https://www.theice.com/marketdata/re…&contractkey=1

Hallo Erika,

wenn ich dem Link folge kommt:

The resource you requested could not be found.
You will be automatically redirected to the ICE home page in 10 seconds.

Tja, danach bin ich da irgendwie auf der Seite von ICE was immer das ist. Eine xls sehe ich nicht.

Geliefert wird jeweils die folgende Datei:
EndOfDayFuturesResults.xls (mit jeweisl unterschiedlichem

  1. Ist es möglich, den Zeitstempel (und die Produktart) per
    Makro auszuwählen?

Kann sein, kann auch nicht sein. Ich bin nicht sehr kompetent im Zugriff auf eine Webseite mit Vba.
Wenn die Seite klassisch mit reinem Html geschrieben ist kann man den Quelltext der Seite auslesen. Sollte darin ein Link auf eine xls sein kann man auch die wahrscheinlich runterladen.

Wenn die da aber Java, php oder was es da für Zeugs gibt benutzen ist es mit Vba vorbei, zumindest für mich.

  1. Kann ich den Download an sich automatisieren?

Wenn es grundsätzlich mit Vba geht dann höchstwahrscheinlich ja.

Ich hoffe du erkennst daß ich mich auf dünnem Eis bewege. Ich kann schon mit Vba hier w-w-w-Seiten auslesen und auch Google-Trefferlisten, aber bei anders programmierten Webseiten versage ich damit.

Wie auch immer, um dir helfen zu können müßte ich und andere hier ja erst mal den manuellen Weg zu dieser xls kennen. Beschreib den halt wenn scheinbar kein Link klappt was ja nicht unnormal ist bei zeitgesteuerten Links.

Gruß
Reinhard

Danke im Voraus.

Merkwürdig, dass der Link jetzt nicht mehr funktioniert.
Manuell kommt man jedenfalls wie folgt dahin.

https://www.theice.com/marketdata/reports/ReportCent…

Unter Category wähle End of Day Report.
Unter Market ICE Futures Europe.
Unter Contract ICE Brent Crude Futures (Monthly)

Unten drunter erscheint (je nach gewähltem Datum eine Tabelle, die ich nach Excel herunterladen möchte. Es gibt auch einen Knopf zum Erstellen der zugehörigen Excel-Datei.

Hilft das?

https://www.theice.com/marketdata/reports/ReportCent…
Unter Category wähle End of Day Report.
Unter Market ICE Futures Europe.
Unter Contract ICE Brent Crude Futures (Monthly)

Unten drunter erscheint (je nach gewähltem Datum eine Tabelle,
die ich nach Excel herunterladen möchte. Es gibt auch einen
Knopf zum Erstellen der zugehörigen Excel-Datei.

Hallo Erika,

es tut mir leid, da versagen meine bescheidenen Vba-Kenntnisse :frowning:
Webseiten sind mir ein Buch mit sieben Siegeln.
Nachfolgender Code, zusammengesucht aus dem Internet, öffnet schon die genannte Webseite. Aber mir gelang es bislang nicht per Code die Felder auszufüllen, dann das „Submit“ durchführen zu lassen.

Vielleicht hilft ja einem anderen oder dir dieser Link:
http://msdn.microsoft.com/de-de/library/bb978940.aspx

Du kannst auch googeln nach z.B.
CreateObject(„InternetExplorer.Application“)
navigate
visible

denn das alles muß auch in einem Code vorhanden sein der deine Lösung sein könnte.
Problem ist, du wirst viele Treffer erhalten. Dann müßte man aufgrund neuer gefundenen Codewörter genauer nochmals suchen lassen usw.
Das dauert aber ewig und mit geringen Vba-Kenntnissen ist fast davon abzuraten wegen Syssiphus Arbeit.

Gruß
Reinhard

In ein Standardmodul, Modul1 o.ä.

Option Explicit

Sub tt()
' Verweis auf "Microsoft Internet Controls" setzen!
' Verweis auf "Microsoft HTML Object Library" setzen!
Dim element As Object, objIE As SHDocVw.InternetExplorer
Dim objHTMLForm ' As HTMLFormElement
Dim objInputName
Set objIE = New SHDocVw.InternetExplorer
objIE.Navigate2 "https://www.theice.com/marketdata/reports/ReportCenter.shtml"
Do Until objIE.ReadyState = READYSTATE\_COMPLETE
DoEvents
Loop
objIE.Visible = True
Set objHTMLForm = objIE.Document
'Set objInputName = objHTMLForm.getElementsByName("Market").Item
'objInputName.Value = "ICE OTC" '"End of Day Report"
'MsgBox objInputName.Value
'Set objHTMLForm = Document.forms.Item(0)
' Alle Elemente der HTML-Form ausgeben:
'For Each element In objHTMLForm.elements
' 'Ausgabe der wichtigsten Eigenschaften:
' MsgBox "Element " & element.Name & \_
' " vom Typ " & element.Type & \_
' ", Wert: " & element.Value & \_
' ", Checked: " & element.Checked
'Next element
End Sub

Hallo Reinhard,
danke für deine Idee. Ich probiere sie mal aus.

Was auf jeden Fall funktioniert, ist folgender Code, der mir in einem anderen Forum empfohlen wurde.
Die Datei wird hierbei als Byte-Array heruntergeladen und anschließend in eine Datei auf dem Desktop gespeichert.

Besten Gruß,
Gregor

Sub Download()

Dim tradeDay As Integer, tradeMonth As Integer, tradeYear As Integer, contractkey As Integer
Dim strWebSource As String, strLocalDestination As String
Dim objXMLHTTP As Object, iFreeFile As Integer, arrResponse() As Byte

tradeDay = 12
tradeMonth = 4
tradeYear = 2011
contractkey = 1

strWebSource = _
https://www.theice.com/marketdata/reports/icefutures…“ _
& „&tradeDay=“ & tradeDay _
& „&tradeMonth=“ & tradeMonth _
& „&tradeYear=“ & tradeYear _
& „&contractkey=“ & contractkey & „“""

strLocalDestination = Environ(„userprofile“) & „\Desktop\EndOfDayFuturesResults.xls“

Set objXMLHTTP = CreateObject(„MSXML2.XMLHTTP“)
objXMLHTTP.Open „GET“, strWebSource, False
objXMLHTTP.Send
While Not objXMLHTTP.readyState = 4
DoEvents
Wend
arrResponse = objXMLHTTP.responseBody
If Not Dir(strLocalDestination) = „“ Then Kill strLocalDestination
iFreeFile = FreeFile
Open strLocalDestination For Binary As #iFreeFile
Put #iFreeFile, , arrResponse
Close #iFreeFile
Set objXMLHTTP = Nothing

End Sub