Ich versuche VBA
zu verwenden, um ein Online-PDF zu speichern. Das Makro geht auf eine Webseite, loggt sich ein, gibt mehrere Eingaben ein und erzeugt dann eine PDF. Die PDF-Datei wird in einem neuen Tab geöffnet. Ich habe URLDownloadToFile verwendet, um die PDF zu speichern. Ich kann das PDF speichern, aber wenn ich es öffne, erhalte ich folgende Meldung: Acrobat konnte 'pdfname.pdf' nicht öffnen, weil es entweder kein unterstützter Dateityp ist oder weil die Datei beschädigt wurde (zum Beispiel Es wurde als E-Mail-Anhang gesendet und wurde nicht korrekt dekodiert). Ich kann die Links nicht teilen, da es sich um eine Intranetsite handelt.URLDownloadToFile lädt die Datei herunter, speichert die Datei aber ist beschädigt
Ich denke, das Problem ist, da die PDF in einem neuen Tab öffnet, wird die Tatsache, dass ich eingeloggt bin nicht erkannt und deshalb ist das PDF beschädigt. Gibt es eine Möglichkeit, mit URLDownloadToFile einen Benutzernamen und ein Passwort einzugeben?
Ich habe versucht, Ideen aus anderen Posts wie die Anmeldeinformationen in die URL mit https://username:[email protected] setzen, aber das hat nicht funktioniert. Ich führte einen Netzwerk-Trace durch, um andere URLs zu finden, aber die anderen Links funktionierten auch nicht. Ich löschte auch den Cache und wenn ich den Status der URL überprüfe, bekomme ich "200 - OK", aber ich speichere trotzdem eine beschädigte Datei.
Jede Hilfe wird sehr geschätzt!
Hier ist mein Code:
#If VBA7 Then
Private Declare PtrSafe Function DeleteUrlCacheEntry Lib "wininet" Alias _
"DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As LongPtr, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As LongPtr) As LongPtr
#Else
Private Declare Function DeleteUrlCacheEntry Lib "wininet" Alias _
"DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
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
#End If
Public PageSource As String
Public httpRequest As Object
Function GetURLStatus(ByVal URL As String, Optional AllowRedirects As Boolean)
Const WinHttpRequestOption_UserAgentString = 0
Const WinHttpRequestOption_EnableRedirects = 6
On Error Resume Next
Set httpRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
If httpRequest Is Nothing Then
Set httpRequest = CreateObject("WinHttp.WinHttpRequest.5")
End If
Err.Clear
On Error GoTo 0
httpRequest.Option(WinHttpRequestOption_UserAgentString) = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"
httpRequest.Option(WinHttpRequestOption_EnableRedirects) = AllowRedirects
'Clear any pervious web page source information
PageSource = ""
'Add protocol if missing
If InStr(1, URL, "://") = 0 Then
URL = "http://" & URL
End If
'Launch the HTTP httpRequest synchronously
On Error Resume Next
httpRequest.Open "GET", URL, False
If Err.Number <> 0 Then
'Handle connection errors
GetURLStatus = Err.Description
Err.Clear
Exit Function
End If
On Error GoTo 0
'Send the http httpRequest for server status
On Error Resume Next
httpRequest.Send
httpRequest.WaitForResponse
If Err.Number <> 0 Then
' Handle server errors
PageSource = "Error"
GetURLStatus = Err.Description
Err.Clear
Else
'Show HTTP response info
GetURLStatus = httpRequest.Status & " - " & httpRequest.StatusText
'Save the web page text
PageSource = httpRequest.responsetext
End If
On Error GoTo 0
End Function
sub macro()
'some code to generate pdf
Dim strDest As String
Dim strSource As String
strSource = "https://url.pdf"
strDest = "dir/folder/folder/pdfname.pdf"
'CLEAR CACHE
DeleteUrlCacheEntry (strSource)
'CHECK URL
Debug.Print GetURLStatus(strSource, True)
'SAVE PDF
URLDownloadToFile 0, strSource, strDest, 0, 0
End Sub
Haben Sie versucht, die heruntergeladene Datei in einem Texteditor (oder Notizblock) zu öffnen und nach Hinweisen zu suchen? Wie groß ist die heruntergeladene Datei? –
Wenn ich versuche, es als TXT-Datei zu speichern, erhalte ich eine Textdatei mit dem HTML-Code für die Anmeldeseite. Normalerweise sind die Dateien etwa 200-250 KB groß. – Abby