Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1220to1224
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Druckerwechsel ... PDF ausdrucken

Druckerwechsel ... PDF ausdrucken
Sophie
Hallo zusammen,
folgendes bekomme ich nicht hin:
So wie unten beschrieben drucke ich PDF - Dateien aus, funktioniert auch ganz gut soweit.
Um mich nicht nur auf einen Drucker zu beschränken, rufe ich hierfür Application.Dialogs(xlDialogPrinterSetup).Show auf und ändere den Standartdrucker nach Bedarf, aber wie es scheint nur in Excel. Wenn ich mir das Druckmenue bei Excel danach anzeigen lasse, wurde der ausgewählte Drucker entsprechend meiner Auswahl geändert.
Nur beim Ausdruck der PDF wird dieses leider nicht berücksichtigt, hier scheint mir wird der Standartdrucker den ich in Windows angegeben habe ausgewählt.
Ist es möglich für den Ausdruck der PDF-Datei einen anderen Drucker anzugeben?, wenn ja wie?
Vielen Dank für Eure hilfe.
Gruß Sophie
Sub pdf()
Product = "V:\Test.pdf"
ShellExecute 0, "open", Product, "", "", SHOWMAXIMIZED
ShellExecute 0, "print", Product, "", "", SHOWMAXIMIZED
ShellExecute 0, "exit", Product, "", "", SHOWMAXIMIZED
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Druckerwechsel ... PDF ausdrucken
01.07.2011 21:54:47
Nepumuk
Hallo meine Liebe,
gut so:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)
Private Declare Function GetShortPathName Lib "kernel32.dll" Alias "GetShortPathNameA" ( _
    ByVal lpszLongPath As String, _
    ByVal lpszShortPath As String, _
    ByVal cchBuffer As Long) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
    ByVal hwnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long
Public Declare Function GetActiveWindow Lib "user32.dll" () As Long

Private Const MAX_PATH = 260&
Private Const SW_HIDE = 0&

Public Sub Sophie_druckt(strPath As String)
    
    Dim strShortPath As String
    Dim strPrinter As String, strNewPrinter As String
    Dim objWMI As Object, objItem As Object
    
    strPrinter = Application.ActivePrinter
    
    If Not Application.Dialogs(xlDialogPrinterSetup).Show Then Exit Sub
    
    strNewPrinter = Application.ActivePrinter
    
    If strNewPrinter <> strPrinter Then
        Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery( _
            "Select * from Win32_Printer")
        For Each objItem In objWMI
            If Cbool(InStr(1, strNewPrinter, objItem.Name)) Then
                objItem.SetDefaultPrinter
                Exit For
            End If
        Next
        Set objWMI = Nothing
        Set objItem = Nothing
    End If
    
    strShortPath = Space(MAX_PATH)
    GetShortPathName strPath, strShortPath, MAX_PATH
    
    ShellExecute GetActiveWindow, "print", strShortPath, _
        vbNullString, strShortPath, SW_HIDE
    
    Call Sleep(2000&)
    
    Application.ActivePrinter = strPrinter
    
    If strNewPrinter <> strPrinter Then
        Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery( _
            "Select * from Win32_Printer")
        For Each objItem In objWMI
            If Cbool(InStr(1, strPrinter, objItem.Name)) Then
                objItem.SetDefaultPrinter
                Exit For
            End If
        Next
        Set objWMI = Nothing
        Set objItem = Nothing
    End If
    
End Sub

Public Sub Drucken()
    Call Sophie_druckt("D:\Eigene Dateien\Eigene Tabellen\API32.TXT")
End Sub

Gruß
Nepumuk
Anzeige
AW: Druckerwechsel ... PDF ausdrucken
02.07.2011 13:38:55
Sophie
Hallo Nepumuk,
erstmal vielen Dank für Deine Lösung.
Kann diese leider erst nächste Woche ausprobieren.
Verstehe leider nur Bahnhof, wenn ich mir Dein Modul so ansehe.
Sorry kannst Du mir noch ein bißchen auf die Sprünge helfen, muß ich irgendetwas an Deinem Modul noch auf meine Gegebenheiten anpassen?
Sieht mir so aus, als ob diese Zuweisung evt. angepasst werden muß...:-)
Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery( _
"Select * from Win32_Printer")
Funktioniert dies auch bei einer PDF Datei?
Das folgende ist mir auch noch ein Rätsel...
If Not Application.Dialogs(xlDialogPrinterSetup).Show Then Exit Sub
Wenn ich den Drucker wechsle, dann bereits bevor Dein Modul läuft oder?, dann ist auch das ...Setup.show nicht mehr aktiv.
Habe eine Userform mit 3 Button, ein Button zum Druckerwechsel (Application.Dialogs(xlDialogPrinterSetup).Show)
den zweiten Button mit Deinem Modul und den dritten um die Userform unverrichteter Dinge zu schließen.
Dankeschön im Voraus und einen schönen Tag.
Gruß Sophie
Anzeige
AW: Druckerwechsel ... PDF ausdrucken
02.07.2011 18:59:17
Nepumuk
Hallo Sophie,
das ist ein Beispiel, Denn ich kenn ja deinen Code nicht. Das ganze ist eigenbtlich ganz einfach.
1. Merke dir den aktiven Drucker
2. Lass den User einen Drucker auswählen
3. Ist der gewählte Drücker ungleich dem aktiven Drucker, dann ändere den Standarddrucker auf den gewählten Drucker
4. Drucke das Dokument
5. Stelle den Standarddrucker wieder zurück auf den Ausgangswert
winmgmts ist ein Dienst den du im Taskmanager als Prozess "svchost" (sind meistens mehrere Prozesse) sehen kannst. Dieser Dienst verwaltet das Betriebssystem. Die Einstellungen dazu sind in einer Datenbank hinterlegt. Über eine Query können wir per VBA auf die Datenbank zugreifen und Einträge lesen und schreiben. In meinem Beispiel werden die Drucker ausgelesen und mit der SetDefaultPrinter-Methode der Standarddrucker geändert.
Gruß
Nepumuk
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige