none
Common pitfalls bei der Darstellung von PDFs im ACcess-Formular ...

    Frage

  • Ich möchte in meinem Formular PDFs darstellen, deren Name in einer Tabelle gespeichert wird.

    Die aktuell von mir benutzte Methode funktioniert zwar, hat aber im Alltag Probleme.

    Vielleicht gibt es ja was eleganteres.

    Mit diesem Code wird die PDF angezeigt:

    Dim filestr As String
        Dim objWebPDF As Webbrowser
        
        Debug.Print "Dateiname:", Me.lst_Dateiliste
        If Right(Me.lst_Dateiliste, 3) <> LCase("pdf") Then
            Exit Sub
        End If
        
        Set objWebPDF = Me.Webbrowser.Object
        
        objWebPDF.Navigate ("file:////Galileo2010/inbox/" & Me.lst_Dateiliste)

    Das funktioniert soweit.

    Jetzt kommt aber das Problem:

    Nach der Auswahl des PDFs nebst Anzeige wird als eigentliches Feature ein Verschieben der Datei aus dem EIngangskorb in ein anderes Verzeichnis ausgelöst und die Datei in meiner DB eingetragen.

    das schlägt aber mit einer Fehlermeldung fehl, die ich darauf zurückführe, daß das Webcontrol noch Zugriff auf die PDF begehrt (resp. der darunter liegende Adobe Reader) - zumindest solange  der VBA-Code ohne STop durcläuft.

    Es genügt schon den Code durch eine Msgbox unterbrechen zu lassen, danach geht es.

    Im nächsten Schritt habe ich anstatt einer msgbox eine Verzögerung mt "Sleep 5000" eingebaut - hilft aber nicht; same problem.

    Der nächste Versuch setzt kurzerhand vor dem eigentlichen Verschiebevorgang das anzuzeigende File auf eine Dummy-Datei - hilft aber auch nicht.

    Mir fällt dabei auf , daß auch der Wechsel auf die Dummy-Datei erst sichtbar wird, wenn der VBA_Code des Buttons (über das Button-Click-Event wird der Verschiebevorgang ausgelöst abgearbeitet ist - nicht schon mit der Code-Zeile!.

    Zusammenfassend hilft alles was irgendwie den VBA-Code unterbricht und eine User-intervention erfordert; sei es ein "OK"-Klicken in der Msgbox oder auch ein Fortsetzen des Codes nach einem Break-Point.

    Ich hätte daher 2 Fragen: GIbt es elegantere Methoden ein PDF anzugzeigen innerhalb des Access-Formulars?

    Wie umgehe ich die oben geschilderte Problematik?

    Dienstag, 6. September 2016 07:28

Antworten

  • Hallo!

    Ein "programmiertes Unterbrechen" könntest du mit DoEvents einleiten. Damit wird der Code unterbrochen und  anstehende Ereignisse können abgearbeitet werden. Danach läuft der Code wieder weiter.

    Mögliches Szenario:

    1. PDF wird ausgewählt
    2. Dummy-PDF im Control anzeigen lassen
    3. DoEvents ausführen
    4. PDF verschieben

    Ob das hilft, weiß ich allerdings nicht, aber einen Versuch ist es wert. ;)

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Virtueller Access-Stammtisch


    • Bearbeitet Josef Pötzl Dienstag, 6. September 2016 08:24
    • Als Antwort markiert NicoNi Dienstag, 6. September 2016 09:10
    Dienstag, 6. September 2016 08:23
  • Mit folgender Funktion wird die Anzeige im Webbrowser-Control geschlossen:

    DoEvents      'Systemaktivitäten durchführen
    
    320       With WebBrowser1
    330                 .Navigate "about:blank"
    370       End With
    
    DoEvents

    Eventuell auch noch eine kleine Minipause einfügen bzw. den Status von WebBrowser1.Busy abfragen.

    Gruß Ahmed

    • Als Antwort markiert NicoNi Sonntag, 9. Oktober 2016 17:55
    Freitag, 7. Oktober 2016 11:56

Alle Antworten

  • Hallo!

    Ein "programmiertes Unterbrechen" könntest du mit DoEvents einleiten. Damit wird der Code unterbrochen und  anstehende Ereignisse können abgearbeitet werden. Danach läuft der Code wieder weiter.

    Mögliches Szenario:

    1. PDF wird ausgewählt
    2. Dummy-PDF im Control anzeigen lassen
    3. DoEvents ausführen
    4. PDF verschieben

    Ob das hilft, weiß ich allerdings nicht, aber einen Versuch ist es wert. ;)

    mfg
    Josef


    Code-Bibliothek für Access-Entwickler
    AccUnit - Testen von Access-Anwendungen
    Virtueller Access-Stammtisch


    • Bearbeitet Josef Pötzl Dienstag, 6. September 2016 08:24
    • Als Antwort markiert NicoNi Dienstag, 6. September 2016 09:10
    Dienstag, 6. September 2016 08:23
  • DoEvents hat's rausgerissen! :-)

    Life can be so easy!

    Dienstag, 6. September 2016 09:10
  • Mit folgender Funktion wird die Anzeige im Webbrowser-Control geschlossen:

    DoEvents      'Systemaktivitäten durchführen
    
    320       With WebBrowser1
    330                 .Navigate "about:blank"
    370       End With
    
    DoEvents

    Eventuell auch noch eine kleine Minipause einfügen bzw. den Status von WebBrowser1.Busy abfragen.

    Gruß Ahmed

    • Als Antwort markiert NicoNi Sonntag, 9. Oktober 2016 17:55
    Freitag, 7. Oktober 2016 11:56
  • Das ist noch eleganter.

    Momentan schalte ich auf eine Dummy-Datei.

    Danke schön

    Sonntag, 9. Oktober 2016 17:55