Om een PDF op een gebruikersformulier weer te geven, vond ik twee belangrijke oplossingen op het internet: de toevoeging van een "Adobe PDF Reader" controller of de toevoeging van een "WebBrowser" controller .
Ik heb gekozen voor de oplossing om een "Adobe PDF Reader" -controller toe te voegen, maar ik krijg deze niet aan de praat. Dit is de procedure die ik heb gevolgd:
Acrobat Reader DC installeren
In de VBA-editor, op de "Toolbox" => klik met de rechtermuisknop op de achtergrond van deze toolbox => "Aanvullende bedieningselementen... " => "Adobe PDF Reader" aanvinken
=> Wanneer ik de "Adobe PDF Reader" controller op het gebruikersformulier wil zetten krijg ik een foutmelding: "Item not found."
=> Als iemand de juiste procedure en code heeft om deze "Adobe PDF Reader" controller te gebruiken, zou het me veel helpen.
Ik heb dit probleem niet bij het toevoegen van het besturingselement Adobe PDF Reader. In feite toont het me een leeg vak om het pdf-bestand weer te geven: pdf1.loadfile "c:\xxxx" bestandspad.
Is Adobe Reader correct geïnstalleerd? Misschien ook een versieprobleem.
Er is een vrij eenvoudige methode om een afbeelding in een gebruikersformulier in te voegen. U moet een afbeeldingsgebied in uw gebruikersformulier plaatsen en vervolgens naar het codegedeelte gaan en dit implementeren:
Uiteindelijk, na veel tests te hebben gedaan, heb ik geprobeerd de oplossing te vinden om een "Adobe PDF Reader"-controller toe te voegen om een pdf in een gebruikersformulier weer te geven.
Dus ben ik overgestapt op de andere mogelijke oplossing: de toevoeging van een "WebBrowser" controller
Ik kwam daar met de volgende code:
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
Deze methode toont me de pdf met Adobe Acrobat Reader DC in de userform, maar het probleem dat ik nog steeds heb is dat Adobe Acrobat Reader DC me al zijn werkbalken laat zien.
Ik kan de pdf niet automatisch in een volledig venster/scherm weergeven (zonder de werkbalken).
De code die je voorstelt werkt, behalve iets (in mijn geval), laat me het uitleggen:
1. De pdf's die ik toon hebben hyperlinks die andere pdf's weergeven,
2. Ik heb ervoor gekozen om een "WebBrowser" te gebruiken voor de navigatie (WebBrowser1.GoBack/GoForward) waarmee ik de volgende en vorige pdf's kan weergeven.
Als gevolg hiervan, wanneer ik een hypertekstlink selecteer, is de pdf die wordt weergegeven niet op volledig scherm, als ik elke weergave bijwerk door "#pagemode=geen" toe te voegen aan het pad van de weergegeven pdf, is het de navigatie (WebBrowser1.GoBack/GoForward) die niet meer werkt.
Wat je me aanbiedt KVuilleumier is al een goede stap vooruit, maar als het me lukt om de FullScreen en de GoBack/GoForward-navigatie te hebben, zou dat geweldig zijn.
Zou hij een manier hebben om dit <pagemode=none> toe te wijzen aan de viewer (WebBrowser1) in plaats van aan de pdf die moet worden weergegeven? (Het is me nog niet gelukt)
Ik weet niet wat je niveau in VBA is, maar je hebt altijd de mogelijkheid om de GoBack- en GoForward-functie zelf te schrijven door de links te onthouden (Scratch the WebBrowser event). Op die manier heb je, wanneer je op een link klikt, de mogelijkheid om te vernieuwen door de pagemode toe te voegen en vervolgens terug te komen gebruik je je functie.
Cyril.f, ik ga wat code plaatsen zodat je kunt testen.
KVuilleumier, dat is wat ik deed: ik heb de GoBack- en GoForward-functies zelf geschreven .
Aan de andere kant heb ik nog steeds een weergaveprobleem voor hypertekstlinks. Hier is mijn 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
Wanneer ik mijn hyperlink selecteer, wordt een nieuwe pdf weergegeven, maar niet in een volledig venster/scherm.
Aan de andere kant, als ik na het weergeven van de nieuwe pdf op een CommandButton klik die een Refresh start, zal de pdf deze in een volledig venster/scherm plaatsen.
Private Sub CommandButton1_Click()
WebBrowser1.Refresh
End Sub
Dus ik heb geprobeerd deze webbrowser1.Refresh overal naartoe te slepen , om een volledig venster / scherm weerte geven zonder op een knop te hoeven klikken. Maar nee hoor, ik kon het niet.
Misschien gebruik ik het verkeerde webbrowserevenement, maar ik denk dat ik vrijwel alles heb getest.
Vergeleken met de eerder gepresenteerde code, als ik een WebBrowser1.Refresh toevoeg in het WebBrowser-evenement (net voor de End If) werkt het niet, maar als ik ook een "ok" Msgbox toevoeg (net voor de WebBrowser1.Refresh) werkt het na het sluiten van de MsgBox.
De 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
In plaats van de pdf weer te geven en vervolgens te controleren of deze op volledig scherm is, waarom doet u uw test niet voordat u deze weergeeft?
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, ik ben het ermee eens dat ik je heb, het zou geweldig zijn als ik dat kon doen, maar in mijn geval is het me niet gelukt.
Herinnering aan mijn zaak: ik geef een 1e PDF weer op volledig scherm (voorlopig geen probleem). Deze PDF heeft hyperlinks die andere PDF('s) weergeven, en het is door op de hyperlinks te klikken dat ik de nieuwe PDF('s) niet op volledig scherm kan weergeven.
In wat u voorstelt (als ik het goed begrijp), zou ik in staat moeten zijn om de omleiding van de webbrowser1 te stoppen.Navigeer wanneer ik op de hyperlink klik tijdens het ophalen van het pad dat de hyperlink retourneert om het te wijzigen (voeg "#pagemode=geen") toe en start WebBrowser1.Navigeer met het nieuwe gewijzigde pad.
Als je weet hoe je dat moet doen, deel dan je STP-code.
Ik weet niet genoeg over dit type besturing en heb helaas geen code om je aan te bieden, ik zou de code van je GoBack- en GoForward-functies nodig hebben om te zien ...
Aan de andere kant, wat betreft uw "Strange Event" is het niet zo vreemd, u probeert uw pagina te vernieuwen voor het einde van het laden, uw Msgbox "ok" (net voor de webbrowser1.Refresh) dient als een tempo, vervang het door:
While WebBrowser1.ReadyState <> READYSTATE_COMPLETE Or WebBrowser1.Busy = True
DoEvents
Wend
Hierdoor kunt u wachten tot de pagina is geladen voordat u deze vernieuwt.
Om de fout in de while-lus te voorkomen, kunt u ook alleen het volgende instellen:
WhileTrue
DoEvents
Wend
voor het openen van lokale PDF-bestanden en:
While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
Voor de weergave van webpagina's indien nodig, pagina's die beter verboden zijn in uw macro, tenzij alle beveiliging met betrekking tot surfen op internet wordt genomen.
Om te testen, voeg ik ook een stukje macro toe waarmee je een PDF kunt weergeven in een "Adobe PDF Reader" -besturingselement dat overeenkomt met je eerste verzoek, je moet het bewerken en de LoadPDF-regel "C:\xxx\xxx.PDF#pagemode=none", 1 wijzigen om het pad van je PDF-bestand te plaatsen.