VBA Datei herunter laden WinHttpReq
23.04.2020 13:42:05
stefan
Public Function DownloadCSVFile(ByVal URL As String, ByVal DownloadPath As String, Optional _
Overwrite As Boolean = True) As Boolean
On Error GoTo Failed
Dim WinHttpReq As Object: Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", URL
WinHttpReq.send
'Application.Wait (Now + TimeValue("0:00:20"))
Debug.Print "Status: " & WinHttpReq.Status
If WinHttpReq.Status = 200 Then
Dim oStream As Object: Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHttpReq.responseBody
Debug.Print "Punkt 3"
oStream.SaveToFile DownloadPath, Abs(CInt(Overwrite)) + 1
oStream.Close
DownloadCSVFile = Len(Dir(DownloadPath)) > 0
Exit Function
End If
Failed:
DownloadCSVFile = False
Debug.Print "Status: " & WinHttpReq.Status
Debug.Print "Fehler in Sub Fehler0" & vbCrLf & "Fehlernummer: " & Err.Number & _
vbCrLf & "Fehlerbeschreibung: " & Err.Description
End Function
Wenn ich nun die Funktion aufrufe, z.B.:
?DownloadCSVFile("https://www.ariva.de/quote/historic/historic.csv?secu=320&boerse_id=1&clean_split=1&clean_payout=0&clean_bezug=1&min_time=1.1.2000&max_time=21.4.2020&trenner=%3B&go=Download", Application.ActiveWorkbook.Path & "\test.csv", True)
Dann habe ich immer das Problem, dass beim ersten Mal herunterladen der Fehler -2147467259 (unbekanter Fehler, der wohl mit dem Schreiben der Datei zu tun hat) auftaucht. Führe ich die Fuunktion kurz danach wieder aus, dann wird die Datei ohne Fehler herunter geladen. Immer wieder das gleiche Muster - wenn ich die Datei bereits einmal herunter geladen habe, dann geht es ohne Probleme, aber auf Anhieb bekomme ich es nicht herunter geladen. Ich hatte gedacht, dass ich mit Application.Wait das Warten auf eine Antwort steuern kann, aber das funktioniert auch nicht zuverlässig. Außerdem hatte ich an der gleichen Stelle schon WinHttpReq.WaitforResponse probiert, allerdings scheint diese Methode im VBA nicht zu existieren. Und ich möchte auch ungern immer 20s warten, bis ich die Datei herunter laden kann, da es bei mehreren Dateien dann doch recht lang dauert.
Kennt hier jemand eine zuverlässige Methode, dass ich die Datei direkt herunterladen kann?
Viele Grüße
Stefan