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

Dateidownload per vba unter O2016

Dateidownload per vba unter O2016
21.02.2018 18:47:46
Harry
Hi,
vorab es geht um Office 365/2016 und nicht um 2013. Seit ca. 10 Jahren nutze ich die auch hier im Forum häufiger erwähnte Form mittels wininet.dll, um in vba eine Datei aus den Internet zu laden. Funktioniert hat diese unter 2007/2010/2013. Heute bei einer Testinstallation von 2016 funktioniert diese nicht mehr (sowohl in Excel als auch in Access in Benutzung)
Wurde hier etwas geändert? Oder gibt es mittlerweile bessere Wege? Bin da nicht auf dem laufenden weil einem funktionierendem Gaul schaut man nicht ins Maul oder so..
Private Declare Function InternetOpen Lib "wininet.dll" Alias _
"InternetOpenA" (ByVal lpszAgent As String, ByVal dwAccessType As Long, _
ByVal lpszProxyName As String, _
ByVal lpszProxyBypass As String, _
ByVal dwFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias _
"InternetOpenUrlA" (ByVal hInternetSession As Long, _
ByVal lpszUrl As String, _
ByVal lpszHeaders As String, _
ByVal dwHeadersLength As Long, _
ByVal dwFlags As Long, _
ByVal dwContext As Long) As Long
Private Declare Function InternetCloseHandle Lib "wininet.dll" _
(ByVal hInet As Long) As Integer
Private Declare Function InternetReadFile Lib "wininet.dll" _
(ByVal hFile As Long, ByVal lpBuffer As String, _
ByVal dwNumberOfBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer
Sub CopyURLToFile(ByVal url As String, ByVal Filename As String)
Dim hInternetSession As Long
Dim hUrl As Long
Dim DatNum As Integer
Dim ByteAnz As Long
Dim Buffer As String * 4096
Dim DatInhalt As String
On Error GoTo Err_Sub
If Len(url) = 0 Or Len(Filename) = 0 Then
MsgBox "Fehlende URL"
Exit Sub
End If
' open an Internet session, and retrieve its handle
hInternetSession = InternetOpen("dummy", INTERNET_OPEN_TYPE_PRECONFIG, _
vbNullString, vbNullString, 0)
If hInternetSession = 0 Then
MsgBox "Fehler bei InternetOpen"
Exit Sub
End If
' open the file and retrieve its handle
hUrl = InternetOpenUrl(hInternetSession, url, vbNullString, 0, _
INTERNET_FLAG_EXISTING_CONNECT, 0)
If hUrl = 0 Then
If hInternetSession Then InternetCloseHandle hInternetSession
MsgBox "Fehler bei InternetOpenUrl"
Exit Sub
End If
...

hUrl hat bei mir immer 0 (zeitgleich unter älterem Office klappen die Tests aber). Und falls relevant - Url ist https mit user:passwort
Besten Dank vorab für Antwort
Harry

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateidownload per vba unter O2016
21.02.2018 20:23:00
Planlos
Hallo
u.U. blockt die Firewall, denn prinzipiell kannst du auch mit O2016 Dateien downloaden.
AW: Dateidownload per vba unter O2016
21.02.2018 20:49:25
mumpel
Hallo!
Bei mir funktioniert es noch. Schau mal nach Deinem AV-Programm ob etwas blockiert wird, und ob as aktuell ist.
Gruß, René
AW: warum nicht URLMON
21.02.2018 21:58:16
Fennek
Hallo,
nur aus Interesse: warum verwendest du nicht

Private Declare PtrSafe Function iDownLoad 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
mfg
AW: warum nicht URLMON
22.02.2018 10:37:07
Harry
Danke für die Rückmeldungen. Rechnerspezifika kann ich ausschließen, da nebenbei auch in anderen Netzen getestet. Es funktioniert auch für:

http[s]://domain.xx[/subdir[/datei.xyz]]

aber nicht für

https://user:pw@domain.xx/subdir/method

Im vorliegenden Fall ist method eine REST-Api, die auch einen Dateinamen für die Daten zurückgibt ("method_timestamp.csv").
Diese Kombination ist auch der Grund, warum ich u.a. auch mit dem Vorschlag "urlmon" gescheitert bin, weiß nicht wie ich da user/pw übergeben muss - mit Angabe in der Url bekomme ich den gleichen Fehler.
Habe jetzt umgestellt auf

Const HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0
Sub CopyURLToFile(ByVal url As String, ByVal FileName As String, ByVal Username As String,  _
ByVal password As String)
Dim MyRequest As Object
'Dim DatNum As Integer
Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1") '
MyRequest.Open "GET", url
'Set credentials
MyRequest.SetCredentials Username, password, HTTPREQUEST_SETCREDENTIALS_FOR_SERVER
' Send Request.
MyRequest.Send
'And we get this response
'For debug only
'MsgBox MyRequest.ResponseText 'For debug only
'And here directly2file (uppss, response is utf8, saved file ansi)
'    DatNum = FreeFile
'    Open FileName For Output As #DatNum
'    Print #DatNum, MyRequest.ResponseText;
'    Close #DatNum
'And now converting to saved utf8
WriteUTF8File FileName, MyRequest.ResponseText
End Sub
Damit gelöst. Ich wundere mich nur, da ich so einen Fehler eher bei einem Wechsel des Betriebssystems erwartet hätte und nicht bei Office-Wechsel.
Trotzdem nochmal Danke.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige