2017-12-18 3 views
0

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 
+0

Haben Sie versucht, die heruntergeladene Datei in einem Texteditor (oder Notizblock) zu öffnen und nach Hinweisen zu suchen? Wie groß ist die heruntergeladene Datei? –

+0

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

Antwort

0

ich eine Abhilfe gefunden. Wenn Sie Adobe öffnen. Sie können zu Bearbeiten-> Einstellungen-> Internet gehen. Ich habe dann die Box "PDF im Browser anzeigen" deaktiviert. Auf diese Weise wurde das PDF einfach in Adobe erstellt und es war viel einfacher mit ihm zu arbeiten.

Verwandte Themen