HERBERS Excel-Forum - das Archiv
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

AW: Aktiven Drucker mit Outlook-Vba ermitteln
Hajo_Zi

Hallo Reinhard,
die Version ist schon entscheident. Forum für 2007 http://www.office2007-hilfe.de/outlook-hilfe/, für 2010 http://www.office2010-hilfe.de/outlook2010-hilfe/

AW: Aktiven Drucker mit Outlook-Vba ermitteln
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
AW: Aktiven Drucker mit Outlook-Vba ermitteln
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
AW: Aktiven Drucker mit Outlook-Vba ermitteln
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
noch eine Variante
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
Funktioniert :-)
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