Anzeigen einer PDF-Datei in einem VBA-Benutzerformular (SW 2016)

Hallo

Um eine PDF-Datei in einem Benutzerformular anzuzeigen, habe ich im Internet zwei Hauptlösungen gefunden: die Hinzufügung eines "Adobe PDF Reader"-Controllers oder die Hinzufügung eines "WebBrowser"-Controllers .

Ich habe mich für die Lösung entschieden, einen "Adobe PDF Reader"-Controller hinzuzufügen, aber ich kann ihn nicht zum Laufen bringen. Hier ist das Verfahren, das ich befolgt habe:

  1. Installieren von Acrobat Reader DC
  2. Klicken Sie im VBA-Editor auf der "Toolbox"  = > mit der rechten Maustaste auf den Hintergrund dieser Toolbox  = > "Zusätzliche Steuerelemente... "  => aktivieren Sie "Adobe PDF Reader"

    => Wenn ich den "Adobe PDF Reader"-Controller auf das Benutzerformular legen möchte, erhalte ich die Fehlermeldung: "Element nicht gefunden".

 

=> Wenn jemand die richtige Prozedur und den richtigen Code hat, um diesen "Adobe PDF Reader"-Controller zu verwenden, würde es mir sehr helfen.

 

Danke für Ihre Hilfe.

Hallo

Ich habe dieses Problem nicht, wenn ich das Adobe PDF Reader-Steuerelement hinzufüge. Im Grunde zeigt es mir ein leeres Feld an, um das PDF anzuzeigen: pdf1.loadfile "c:\xxxx" Dateipfad.

Ist der Adobe Reader korrekt installiert? Vielleicht auch ein Versionsproblem.

Hallo

Es gibt eine relativ einfache Methode, um ein Bild in ein Userform einzufügen. Sie müssen einen Bildbereich in Ihr Benutzerformular einfügen und dann zum Codeteil gehen und dies implementieren: 

Image1.Picture = LoadPicture("C:\Benutzer\bem1. DIMECOALIPRESSE\Desktop\TinyStraightMaster\coucou.jpg")

mit dem Pfad Ihres Bildes im JPG-Format.

Ich hoffe, ich habe Ihnen geholfen, viel Glück.

Dimitri. 

1 „Gefällt mir“

Schließlich, nach vielen Tests, habe ich versucht, eine Lösung zu finden, indem ich einen "Adobe PDF Reader"-Controller hinzufüge, um eine PDF-Datei in einem Benutzerformular anzuzeigen.

Also bin ich auf die andere mögliche Lösung umgestiegen: das Hinzufügen eines "WebBrowser"-Controllers 

Ich bin mit dem folgenden Code dorthin gekommen:

Private Sub UserForm_Initialize()

Me.WebBrowser1.Navigate "about:blank"
Me.WebBrowser1.Document.write "<HTML><Body><embed src=""C:\xxxx\xxxxx\xxxxx\test 1.pdf"" width=""100%"" height=""100%"" /></Body></HTML>"

End Sub

 

Diese Methode zeigt mir das PDF mit Adobe Acrobat Reader DC im Benutzerformular, aber das Problem , das ich immer noch habe, ist, dass Adobe Acrobat Reader DC mir alle seine Symbolleisten anzeigt.

Ich kann das PDF nicht automatisch im Vollfenster/Bildschirm anzeigen (ohne die Symbolleisten).

Hat jemand eine Lösung dafür?

 

Hallo

Ich habe es geschafft, eine Lösung zu finden, man muss von den Parametern zum Dokument gehen.

Anstelle der folgenden Codezeile:

Me.WebBrowser1.Document.write "<HTML><Body><embed src=""C:\xxxx\xxxxx\xxxxx\test 1.pdf"" width=""100%"" height=""100%"" /></Body></HTML>"

Servierplatte:

Me.WebBrowser1.Navigate "C:\xxx\xxx.PDF#pagemode=none"

Es ist die #pagemode=keine , die dazu führt, dass Sie nur das Dokument ohne die Schnittstelle haben.

 

Die Liste der Parameter steht Ihnen hier zur Verfügung: http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_open_parameters.pdf

5 „Gefällt mir“

 Danke KVuilleumier !

Der Code, den Sie vorschlagen, funktioniert, bis auf etwas (in meinem Fall), lassen Sie mich erklären:

1. Die PDFs, die ich anzeige, haben Hyperlinks, die andere PDFs anzeigen,

2. Ich habe mich für einen "WebBrowser" für die Navigation entschieden (WebBrowser1.GoBack/GoForward), der es mir ermöglicht, die folgenden und vorherigen PDFs anzuzeigen.

Wenn ich also einen Hypertext-Link auswähle, befindet sich die PDF-Datei, die angezeigt wird, nicht im Vollbildmodus, und wenn ich jede Anzeige aktualisiere, indem ich dem Pfad der angezeigten PDF-Datei "#pagemode=keine" hinzufüge, funktioniert die Navigation (WebBrowser1.GoBack/GoForward) nicht mehr.

Was Sie mir KVuilleumier anbieten , ist schon ein guter Schritt nach vorne, aber wenn ich es schaffe, den Vollbildmodus und die GoBack/GoForward-Navigation zu haben, wäre das großartig.

Hätte er eine Möglichkeit, diese <pagemode=none> dem Viewer (WebBrowser1) zuzuweisen, anstatt dem PDF, das angezeigt werden soll?  (Ich habe es noch nicht geschafft)

 

Hallo

Möglichkeit, den Code zu testen?

2 „Gefällt mir“

Ich kenne Ihr Level in VBA nicht, aber Sie haben immer die Möglichkeit, die GoBack- und GoForward-Funktion selbst zu schreiben, indem Sie sich die Links merken (Scratch the WebBrowser Event). Auf diese Weise haben Sie, wenn Sie auf einen Link klicken, die Möglichkeit, durch Hinzufügen des Seitenmodus zu aktualisieren und dann Ihre Funktion wieder zu verwenden.

1 „Gefällt mir“

Hallo

Cyril.f, ich werde etwas Code einfügen, damit Sie testen können .

KVuilleumier, das habe ich getan: Ich habe die Funktionen GoBack und GoForward selbst geschrieben .

Auf der anderen Seite habe ich immer noch ein Darstellungsproblem für Hypertext-Links. Hier ist mein Code:

Private Sub UserForm_Initialize()

     'J-affiche le 1ere PDF'
     WebBrowser1.Navigate "C:\xxx\xxx\test.PDF#pagemode=none"

End Sub

'------------------------------------------------------------------------------------'

Private Sub WebBrowser1_TitleChange(ByVal Text As String)

    'Si l-URL ne contient pas "#pagemode=none", je l-ajout et recharge la page'
    If Right(WebBrowser1.LocationURL, 14) <> "#pagemode=none" Then
        WebBrowser1.Navigate2 (WebBrowser1.LocationURL & "#pagemode=none")
    End If

End Sub

 

Wenn ich meinen Hyperlink auswähle, wird eine neue PDF-Datei angezeigt, aber nicht im gesamten Fenster/Bildschirm.

Auf der anderen Seite, wenn ich nach der Anzeige der neuen PDF-Datei auf eine Befehlsschaltfläche klicke , die eine Aktualisierung startet, wird die PDF-Datei in das vollständige Fenster/den Bildschirm versetzt.

Private Sub CommandButton1_Click()

    WebBrowser1.Refresh

End Sub

Also habe ich versucht, diesen WebBrowser1.Refresh überall hin zu ziehen  , um ein vollständiges Fenster/ Bildschirmdisplay zu haben, ohne auf eine Schaltfläche klicken zu müssen. Aber auf keinen Fall, ich konnte es nicht. 

Vielleicht verwende ich das falsche WebBrowser-Ereignis, aber ich denke, ich habe so ziemlich alles getestet.

Hat jemand eine Lösung?

 

Seltsames Ereignis:

Im Vergleich zum zuvor vorgestellten Code funktioniert es nicht, wenn ich ein WebBrowser1.Refresh im WebBrowser-Ereignis (kurz vor dem End If) hinzufüge, aber wenn ich auch eine "ok" Msgbox (kurz vor dem WebBrowser1.Refresh) hinzufüge, funktioniert es nach dem Schließen der MsgBox.

Der Code:

Private Sub UserForm_Initialize()

     'J-affiche le 1ere PDF'
     WebBrowser1.Navigate "C:\xxx\xxx\test.PDF#pagemode=none"

End Sub

'------------------------------------------------------------------------------------'

Private Sub WebBrowser1_TitleChange(ByVal Text As String)

    'Si l-URL ne contient pas "#pagemode=none", je l-ajout et recharge la page'
    If Right(WebBrowser1.LocationURL, 14) <> "#pagemode=none" Then
        WebBrowser1.Navigate2 (WebBrowser1.LocationURL & "#pagemode=none")
        MsgBox "ok"
        WebBrowser1.Refresh    
    End If

End Sub

 Sehr seltsam, nicht wahr?

Hallo

Anstatt die PDF-Datei anzuzeigen und dann zu überprüfen, ob sie im Vollbildmodus angezeigt wird, warum führen Sie nicht Ihren Test durch, bevor Sie sie anzeigen?

Dim Adresse As String
    
Adresse = "C:\xxx\xxx\test.PDF"
    
If Right(Adresse, 14) <> "#pagemode=none" Then
   Adresse = (Adresse & "#pagemode=none")
End If
    
WebBrowser1.Navigate Adresse

Herzliche Grüße

Hallo

D.Roger, ich bin damit einverstanden, Sie zu haben, es wäre toll, wenn ich das tun könnte, aber in meinem Fall ist es mir nicht gelungen.

Zur Erinnerung an meinen Fall: Ich zeige ein 1. PDF im Vollbildmodus an (vorerst kein Problem). Diese PDF-Datei enthält Hyperlinks, die andere PDFs anzeigen, und wenn ich auf die Hyperlinks klicke, kann ich die neuen PDFs nicht im Vollbildmodus anzeigen.

In dem, was Sie vorschlagen (wenn ich es richtig verstanden habe), sollte ich in der Lage sein, die Weiterleitung des WebBrowser1.Navigate zu stoppen, wenn ich auf den Hyperlink klicke, während ich den Pfad abrufe, den der Hyperlink zurückgibt, um ihn zu ändern (fügen Sie "#pagemode=keine") hinzu und starten Sie WebBrowser1.Navigate mit dem neuen geänderten Pfad neu.

Wenn Sie wissen, wie das geht, geben Sie Ihren STP-Code weiter.

 

Hallo

Ich weiß nicht genug über diese Art von Steuerung und habe Ihnen leider keinen Code anzubieten, ich bräuchte den Code Ihrer GoBack- und GoForward-Funktionen, um zu sehen ...

Auf der anderen Seite, was Ihr "Seltsames Ereignis" betrifft, so ist es nicht so seltsam, Sie versuchen, Ihre Seite vor dem Ende des Ladens zu aktualisieren, Ihre Msgbox "ok" (kurz vor dem WebBrowser1.Refresh) dient als Tempo, ersetzen Sie es durch:

While WebBrowser1.ReadyState <> READYSTATE_COMPLETE Or WebBrowser1.Busy = True
    DoEvents
Wend

Auf diese Weise können Sie warten, bis die Seite vollständig geladen ist, bevor Sie sie aktualisieren.

Herzliche Grüße

3 „Gefällt mir“

 Danke d.roger,

Das hat mir gefehlt, außer dass in meinem Code die While/Wend-Schleife einen Fehler auslöst, also habe ich eine Do Until/Loop-Schleife verwendet:

Do Until WebBrowser1.ReadyState = READYSTATE_COMPLETE Or WebBrowser1.Busy = False
   DoEvents
Loop

 

Hallo

Um den Fehler in der While-Schleife zu vermeiden, können Sie auch nur Folgendes einfügen:

WhileTrue
    DoEvents
Wend

zum Öffnen lokaler PDF-Dateien und:

While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
    DoEvents
Wend

Für die Anzeige von Webseiten, falls erforderlich, Seiten, die in Ihrem Makro besser verboten sind, es sei denn, alle Sicherheitsvorkehrungen im Zusammenhang mit dem Surfen im Internet sind erfüllt.

Zum Testen hänge ich auch ein Stück Makro an, das es Ihnen ermöglicht, ein PDF in einem "Adobe PDF Reader"-Steuerelement anzuzeigen, das Ihrer ursprünglichen Anfrage entspricht, Sie müssen es bearbeiten und die LoadPDF-Zeile "C:\xxx\xxx.PDF#pagemode=none", 1 ändern, um den Pfad Ihrer PDF-Datei zu setzen.

Herzliche Grüße


macroadobepdfreader.swp