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:
Installieren von Acrobat Reader DC
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.
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.
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:
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).
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)
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.
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/ Bildschirmdisplayzu 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.
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
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
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.
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.
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.