viking
Goto Top

VBA Code in Access 2010 zur Aufruf einer Internetseite und automatischen Druck der Seite als PDF Datei

Hallo,
eine Frage an die Access VBA Experten.

Ich habe eine Access 2010 Datenbank in welcher eine Tabelle mit dem Namen "Tabelle1" ist, die ein Feld mit dem Namen "Ebaylink" hat.
Der Fedlinhalt des Feldes "Ebaylink" ist der komplette Link zur Ebayauktion.

Nun suche ich nach einer Lösung die folgendes automatisch ausführt.

Mit der Betätigung eines Button auf einem Formular soll ein Browser aufgehen.
Zum Beispiel der InternetExplorer oder Firefox.
Soweit bin ich schon mit Marko, ..., aber dann auch schon am Ende.

Was ich nun nicht lösen kann ist, dass automatisiert der Befehl ausgeführt wird, dass die geöffnete Seite nun direkt als PDF in dem Pfad
C:\Auktionen\ gespeichert wird und am besten gleich das Browserfenster wieder geschlossen wird.

Das was ich nun im Beispiel des InternetExplorers in Zusammenhang mit dem PDFCreator ausführen muss, ist die Auswahl:
Datei\Drucken\Druckerauswahl\Drucken\Speichern.

Da der PDFCreator nicht mein Standarddrucker ist wollte ich diesen für diese Aktion fest als Standard definieren.
Der Pfad wohin gedruckt wird soll auch fest sein. "C:\Auktionen\"
Der Name der PDF Datei ist bei mir der ausgewählte EBAY-Link, was so ok, bzw. gewollt ist.

Kann man das mit VBA Code und wenn ja wie lösen.

VBA Code ist noch nicht meine Stärke, da ich bisher immer mit Makros in Access gearbeitet habe.

Wichtig für mich auch, welche Verweise oder Libarys benötige ich in welcher Reihenfolge.
Ich nutze Win7 64bit und Office 2010 32bit. PDFCreator 1.2.3

Hat jemand dafür eine Lösung, bzw einen Ansatz wie ich diese Szenario bestmöglich lösen kann.

Gruß viking

Content-ID: 176881

Url: https://administrator.de/contentid/176881

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

76109
76109 27.11.2011, aktualisiert am 18.10.2012 um 18:49:13 Uhr
Goto Top
Hallo viking!

Hier mal ein Code, der per PDFCreater eine Website in eine PDF-Datei druckt. Als Dateiname wird die Url verwendet, wobei nichterlaubte Zeichen in einen Unterstrich umgewandelt werden. Der aktuelle Standard-Drucker wird zu Begin gesichert und am Ende wieder als Standard-Drucker gesetzt.
Option Explicit

Const PdfPath = "C:\Auktionen"  
 
Const PDF_FORMAT = 0
Const PDF_AUTOSAVE = 1
Const PDF_AUTOSAVEDIRECTORY = 1
Const OLECMDID_PRINT = 6
Const OLECMDEXECOPT_DONTPROMPTUSER = 2
Const READYSTATE_COMPLETE = 4

Sub Test()
    Call PrintToPdfCreater("[content:176881]  
End Sub


Sub PrintToPdfCreater(ByVal Url As String)
    Dim WMIService As Object, Printers As Object, Printer As Object, PdfJob As Object
    Dim IExplorer As Object, Network As Object, DefaultPrinter As String
        
    Set PdfJob = CreateObject("PDFCreator.clsPDFCreator")  

    If PdfJob.cStart("/NoProcessingAtStartup") = False Then  
        MsgBox "PDFCreator konnte nicht gestartet werden!", vbExclamation, "Fehler":  Exit Sub  
    End If

    With PdfJob
        .cOption("UseAutosave") = PDF_AUTOSAVE  
        .cOption("UseAutosaveDirectory") = PDF_AUTOSAVEDIRECTORY  
        .cOption("AutosaveDirectory") = PdfPath  
        .cOption("AutosaveFilename") = Url  
        .cOption("AutosaveFormat") = PDF_FORMAT  
        .cClearCache
    End With
    
    Set Network = CreateObject("WScript.Network")  
    Set WMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")  
    
    Set Printers = WMIService.ExecQuery("Select * From Win32_Printer Where Default = True")  
    
    For Each Printer In Printers
        DefaultPrinter = Printer.Name
    Next
    
    Network.SetDefaultPrinter "PDFCreater"  
    
    Set IExplorer = CreateObject("InternetExplorer.Application")  
    
    With IExplorer
        .Visible = False
        .Navigate Url
         Do: Loop Until .ReadyState = READYSTATE_COMPLETE
        .ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
    End With
  
    With PdfJob
         Do Until .cCountOfPrintjobs = 1:  Loop
        .cPrinterStop = False
         Do Until .cCountOfPrintjobs = 0:  Loop
        .cClose
    End With
    
    IExplorer.Quit
    
    Network.SetDefaultPrinter DefaultPrinter
End Sub

Gruß Dieter
NetWolf
NetWolf 27.11.2011 um 17:55:12 Uhr
Goto Top
Moin Moin,

so da sind wir wieder face-smile

eine kleine Vorbereitung, damit es funktioniert:
- Formular in der Entwurfsansicht öffnen
- im Ribbon auf den Tab [Entwurf]
- ActiveX Steuerelement anklicken
- "Microsoft Webbrowser" wählen

es wird ein Fenster auf deinem Formular erstellt, das einen Webbrower simuliert. Die Bezeichnung ist i.d.R. Webbrowser0

Mit der Betätigung eines Button auf einem Formular soll ein Browser aufgehen.
tja, wenn ich nun wüsste wie die Bezeichnung des Buttons wäre face-sad
Ich nehme mal MyButton für mein Beispiel.

Also als Ereignis bei deinem Button eingeben (oder von hier kopieren):

Private Sub MyButton_Click()
Dim OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, WebSeite

OLECMDID_PRINT = 6
OLECMDEXECOPT_DONTPROMPTUSER = 2

WebSeite = Me.MyAuswahl ' keine Ahnung wie das Feld deiner Auswahl heißt face-sad

With WebBrowser0
.Navigate WebSeite

Do While .Busy: DoEvents: Loop
Do While .ReadyState <> 4: DoEvents: Loop

.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER

End With

End Sub

Damit wird die Webseite deiner Wahl geöffnet und ohne Frage an den Standarddrucker ausgegeben.

Falls dein PDF-Printer nicht gleich speichert, könnte man noch mit Sendkeys entsprechende Tastendrücke simulieren (allerdings nicht im unsichtbaren Modus)

Grüße aus Rostock
Wolfgang
(Netwolf)
viking
viking 27.11.2011 um 21:24:57 Uhr
Goto Top
Hallo Dieter,

zunächst mal Danke für Deine Code.
Nun bin ich noch ein richtiger Blindgänger was das VBA betriftt, wie man diesen einbindet und habe da noch 2-3 Anfängerprobleme.
Bin gerdade am Testen Deines Vorschlags.

Erste dumme Frage:
Wenn ich einen Button oder einem Formularfeld eine Code zuweisen will, dann steht am Anfang immer so was wie

Private Sub Befehl1_Click()

End Sub

Wie kriege ich es gebacken dass ich Deinen Code in ein Formular auf einen Button einbinden.
Mein Button hätte den Namen "Befehl1"

Momentan habe ich wenn ich Deine Code bei mir reinkopiere 3 Abschnitte
Zeile 01
Zeile 12
Zeile 17

zweite Frage, wie schaffe ich es dass, ich den Link selbst aus einem Feld beziehe.
Du hast diesen wenn ich es richtig interpretiere in Zeile 13 fest vorgegeben.
Ich habe es so, dass dieser aus einem Feld einer Datenbanktabelle "Tabelle1" kommt. Das Feld selbst hat den Namen "Ebaylink" und diese habe ich im Formular auch verfügbar.
Ich weiß dass das keine tolle Vergabe von Tabellennamen und Tabellenfeldern ist, aber so hab ich halt vorleigen.

Gruß viking
viking
viking 27.11.2011 um 22:51:34 Uhr
Goto Top
Hallo Wolfgang,

ja, da bin ich schon wieder, ...

Deinen Code habe ich probiert, ...,
den WebBrowser habe ich bei mir auf 9 Stellen müssen anstelle 0.

Dann hats mir die Seite auch gleich auf meinen normalen Drucker raus.

Nach Umstellung des PDF Creator als Standard habe ich den PDF Creator geöffnet bekommen.

Dort habe ich nun automatisches speichern und die Einstellungen vorgenommen, dann tut das auch.

Er speichert nun wie er soll ohne zu fragen auf C:\Auktionen\ rein. Spitze!

Die Variante mit dem automatischen Speichern ist aber nicht so schön, dass er dies nun immer macht und da ich ab und an auch andere Dokumente mit dem PDFCreator drucken will ist das für die Dokumente schlecht.

Könnte man da noch was von Dieter aufnehmen?

Gruß und Danke !!!!

viking
NetWolf
NetWolf 28.11.2011 um 12:16:24 Uhr
Goto Top
Moin Moin,

da hat sich Dieter mehr Mühe gemacht als ich. Der Code ist natürlich viel besser als meiner, da er den PDFCreator gleich mit steuert.

Wenn ich einen Button oder einem Formularfeld eine Code zuweisen will, dann steht am Anfang immer so was wie
Das ist richtig, das ist der "Rahmen" für das Ereignis des Buttons.
In diesen Rahmen kommt der Aufruf für die SUB Prozedur/Funktion die aufgerufen werden soll. Mit der SUB Test hat Dieter den Aufruf demonstriert.

Da dein Formularfeld Ebaylink heißt, wäre dann folgendes zu tun:

1. Kopiere den Code von Dieter komplett VOR den automatisch erzeugten Rahmen deines Buttons. Da vermutlich "Option Explicit" schon bei dir drinsteht, kannst du diese Zeile auslassen beim Kopieren.

2. den "Rahmen" füllst du wie folgt (ME. ist die Variable/Platzhalter für das aktuell genutzte Formular):

Private Sub Befehl1_Click()
Call PrintToPdfCreater(ME.Ebaylink)
End Sub

3. Fertig


Grüße aus Rostock
Wolfgang
(Netwolf)
viking
viking 28.11.2011 um 14:39:42 Uhr
Goto Top
Hallo Wolfgang,

habs nun eingebunden, klappt wunderbar!

Danke für die Hilfe, auch Dir Dieter für Dein umfangreiches Script.

Gruß viking
Winzling
Winzling 22.11.2015 um 18:25:48 Uhr
Goto Top
Hallo Netwolf,
die Funktion könnte ich gut gebrauchen. Allerdings will ich auf der Internetseite eine Abfrage starten, deren Ergebnis dann als PDF in ein bestimmtes Verezichnis gedruckt werden soll. Ich möchte die Empfangsbestätigung von unterschiedlichen Paketdienstleistern dokumentieren. Gibt es dafür auch eine Lösung?
Viele Grüße aus Westfalen