Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Aktiven Drucker mit Outlook-Vba ermitteln

Forumthread: Aktiven Drucker mit Outlook-Vba ermitteln

Aktiven Drucker mit Outlook-Vba ermitteln
Reinhard
Hallo Wissende,
in Excel, Word kriegt man ja den aktiven Drucker in Vba mit ActivePrinter usw.
In Outlook gibt's das aber nicht. Auch nicht DefaultPrinter, Printer, u.ä.
Stundenlanges Googlen brachte mich nicht weiter :-(
Weiß jmd. hier wie man den aktiven Drucker in OL-Vba auslesen kann und auch abändern kann?
Ein Link zu einem guten OL-Forum mit Archiv hilft mir evtl. auch schon.
Den workaround, aus OL-Vba heraus eine Word-Instanz zu öffnene, den ActivePrinter auszulesen usw. krieg ich hin, aber geht es nicht direkt?
Danke ^ Gruß
Reinhard
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Aktiven Drucker mit Outlook-Vba ermitteln
09.12.2009 16:35:57
Reinhard
Hallo Hajo,
mit der Version hast du schon Recht, andrerseits kapiere ich nicht daß man mit OL-Vba nicht einfach mal den Standarddrucker anzeigen/abändern kann, Versionsunabhängig.
Bei deinem ersten Link muß man hinten das Komma wegmachen, dann geht es.
Bei beiden habe ich bei "Suchen" Drucker eingegeben. Bei 2010 gab's keinen Treffer, bei 2007 16, aber es ging um etwas anderes :-(
Danke für deine Reaktion
Gruß
Reinhard
Anzeige
AW: Aktiven Drucker mit Outlook-Vba ermitteln
09.12.2009 16:32:26
Anton
Hallo Reinhard,
probier sowas:
Code:

Sub standarddrucker()
 'Standarddrucker ermitteln
  Dim objWMI As Object, objItem As Object  
  Set objWMI = GetObject("winmgmts:\\.\root\cimv2"). _  
    ExecQuery("Select * from Win32_Printer where Default = 'true'")  
  For Each objItem In objWMI  
    MsgBox objItem.properties_.Item("Name").Value
  Next
  Set objWMI = Nothing  
End Sub  
Sub drucker_als_standard()
  Dim oWMI As Object, colInstalledPrinters As Object, oPrinter As Object    
  Dim sPrinterName As String    
  Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")  
  sPrinterName = "HP Deskjet F300 series"  'anpassen
  Set colInstalledPrinters = oWMI.ExecQuery("SELECT * FROM Win32_Printer WHERE Name = '" & sPrinterName & "'")  
 ' Drucker als Standard-Drucker festlegen
  For Each oPrinter In colInstalledPrinters    
    oPrinter.SetDefaultPrinter  
  Next
  Set oWMI = Nothing  
End Sub  


mfg Anton
Anzeige
AW: Aktiven Drucker mit Outlook-Vba ermitteln
09.12.2009 16:57:05
Reinhard
Hallo Anton,
scheinbar nicht so einfach in OL banale Dinge zu tun.
Danke dir schonmal für den Code, sieht gut aus.
Ein Problem gibt es noch, lasse ich die Prozedur Standarddrucker in OL laufen so erscheint bei mir:
HP Deskjet 600 (Monochrome)
Benutze ich aber "ActivePrinter" in Excel kommt:
HP Deskjet 600 (Monochrome) auf LPT1:
Gruß
Reinhard
Anzeige
noch eine Variante
15.12.2009 11:25:13
Anton
Hallo Reinhard,
Code:

Public Sub active_drucker()  
 'Standarddrucker ermitteln
  Dim objWMI As Object, objItem As Object, sd As String    
  Set objWMI = GetObject("winmgmts:\\.\root\cimv2"). _  
    ExecQuery("Select * from Win32_Printer where Default = 'true'")  
  For Each objItem In objWMI  
    sd = objItem.properties_.Item("Name").Value
  Next
  Set objWMI = Nothing  
  Const HKEY_current_user = &H80000001
  Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")  
  strKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Devices"
  oReg.EnumValues HKEY_current_user, strKeyPath, arrValueNames
  For i = 0 To UBound(arrValueNames)  
    oReg.GetStringValue HKEY_current_user, strKeyPath, arrValueNames(i), strValue  
    If InStr(1, arrValueNames(i), sd) <> 0 Then  
      msg = arrValueNames(i) & Replace(strValue, "winspool,", " auf ")
    End If  
  Next
  Set oReg = Nothing  
  MsgBox msg, vbInformation, "ActiveDrucker"
End Sub  


mfg Anton
Anzeige
Funktioniert :-)
15.12.2009 12:42:24
Reinhard
Hallo Anton,
danke dir, jetzt klappt es komplett.
Getestet in OL2007 und Excel2000.
Für das hiesige Archiv, oben muß noch diese Zeile rein:
Dim strKeyPath, arrValueNames, i, strValue, msg
Gruß
Reinhard
;
Anzeige
Anzeige

Infobox / Tutorial

Aktiven Drucker in Outlook mit VBA ermitteln und festlegen


Schritt-für-Schritt-Anleitung

Um den aktiven Drucker in Outlook mit VBA zu ermitteln und eventuell den Outlook Standarddrucker einzustellen, kannst du folgenden Code verwenden:

Sub standarddrucker()
    'Standarddrucker ermitteln
    Dim objWMI As Object, objItem As Object
    Set objWMI = GetObject("winmgmts:\\.\root\cimv2"). _
        ExecQuery("Select * from Win32_Printer where Default = 'true'")
    For Each objItem In objWMI
        MsgBox objItem.properties_.Item("Name").Value
    Next
    Set objWMI = Nothing
End Sub

Sub drucker_als_standard()
    Dim oWMI As Object, colInstalledPrinters As Object, oPrinter As Object
    Dim sPrinterName As String
    Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    sPrinterName = "HP Deskjet F300 series" 'anpassen
    Set colInstalledPrinters = oWMI.ExecQuery("SELECT * FROM Win32_Printer WHERE Name = '" & sPrinterName & "'")

    ' Drucker als Standard-Drucker festlegen
    For Each oPrinter In colInstalledPrinters
        oPrinter.SetDefaultPrinter
    Next
    Set oWMI = Nothing
End Sub

Dieser Code ermittelt zunächst den Standarddrucker und zeigt ihn in einer Meldung an. Der zweite Teil des Codes setzt einen spezifischen Drucker als Standarddrucker.


Häufige Fehler und Lösungen

  • Fehler: "Drucker nicht gefunden"

    • Lösung: Stelle sicher, dass der Druckername im Code exakt mit dem Namen des Druckers übereinstimmt, der auf deinem System installiert ist.
  • Fehler: Der Standarddrucker wird nicht korrekt angezeigt.

    • Lösung: Überprüfe, ob du die richtigen Berechtigungen hast, um auf Druckerinformationen zuzugreifen. Stelle sicher, dass der Drucker als Standarddrucker in Windows festgelegt ist.

Alternative Methoden

Eine alternative Methode besteht darin, den aktiven Drucker über Word zu ermitteln und dann die Informationen in Outlook zu verwenden. Dies könnte so aussehen:

Sub aktivenDruckerErmitteln()
    Dim druckerName As String
    druckerName = Application.ActivePrinter
    MsgBox "Aktiver Drucker: " & druckerName
End Sub

Diese Methode erfordert jedoch, dass Word installiert ist und könnte nicht für alle Benutzer eine praktikable Lösung darstellen.


Praktische Beispiele

  • Beispiel 1: Um den aktiven Drucker in Outlook anzuzeigen, kannst du den oben genannten Code in ein Modul einfügen und ausführen.
  • Beispiel 2: Um den Drucker "HP Deskjet F300 series" als Standarddrucker festzulegen, ändere einfach den Druckernamen im Code und führe drucker_als_standard aus.

Tipps für Profis

  • Nutze die GetObject-Methode, um auf Systeminformationen zuzugreifen. Dies ist eine leistungsstarke Methode, um verschiedene Systemeigenschaften abzufragen.
  • Halte deinen VBA-Code gut dokumentiert, insbesondere wenn du mehrere Drucker verwalten möchtest.
  • Überlege, die Druckerinformationen in einer Excel-Tabelle zu speichern, um sie einfacher verwalten zu können.

FAQ: Häufige Fragen

1. Wie kann ich den Standarddrucker in Outlook dauerhaft ändern?
Du musst den Standarddrucker in den Windows-Druckereinstellungen ändern. Outlook verwendet die Windows-Druckereinstellungen.

2. Funktioniert dieser Code in allen Outlook-Versionen?
Der Code wurde in Outlook 2007 und Excel 2000 getestet und sollte in ähnlichen Versionen funktionieren. Bei neueren Versionen kann es jedoch zu Abweichungen kommen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige