VBA Drucker-Info

Hallo

Ich kann in Word mit folgendem Makro den aktiven Drucker abfragen:

Sub druckerinfo()
Dim strPr As String
strPr = ActivePrinter
MsgBox strPr
End Sub

Wie müsste das Makro im Outlook lauten, damit ich dort die Drucker-Info erhalte? - Ich arbeite mit Office Outlook 2003

Vielen dank für Eure Hilfe
Niclaus

Wie müsste das Makro im Outlook lauten, damit ich dort die
Drucker-Info erhalte? - Ich arbeite mit Office Outlook 2003

Hallo Niclaus,

scheinbar nicht so einfach.
Ich fand vba-Code der in OL läuft und alle Drucker auflistet.
Aber Code um den aktiven Drucker auszulesen, gar zu verändern fand ich nicht.

Vielleicht geht das nur über wmi, fso, api, o.ä.

In VB gibt es auch kein Activeprinter-Befehl.

Vielleicht weiß Rainer wie man das lösen könnte.

Gruß
Reinhard

Hallo Reinhard,

In VB gibt es auch kein Activeprinter-Befehl.

braucht man auch nicht.

Der aktive Drucker ist immer ‚Printer‘. Wenn man daran nichts gedreht hat, ist das der Standarddrucker.

Option Explicit

Private Sub Command1\_Click()
 Me.Caption = Printer.DeviceName
End Sub

Der Code zeigt den Namen des aktiven Druckers.

Probier mal, ob das in VBA auch so ist.

Gruß Rainer

Der aktive Drucker ist immer ‚Printer‘. Wenn man daran nichts
gedreht hat, ist das der Standarddrucker.
Private Sub Command1_Click()
Me.Caption = Printer.DeviceName
End Sub

Der Code zeigt den Namen des aktiven Druckers.

Probier mal, ob das in VBA auch so ist.

Hallo Rainer,

leider nein, in OL-Vba gibt es kein „Printer“, „Devicename“ auch nicht.

Die Liste aller verfügbaren Drucker erhielt ich in OL-Vba mit sowas:
Set WSHNet = CreateObject(„WScript.Network“)
Dann konnte man mit WSHNet.enum??? auf alle Ducker zugreifen.

Daher meine Annahme daß man mit wmi, fso o.ä. das Problem lösen kann.
Allerdings kenne ich mich da Null aus.

Gruß
Reinhard

Hallo Reinhard,

Die Liste aller verfügbaren Drucker erhielt ich in OL-Vba mit
sowas:
Set WSHNet = CreateObject(„WScript.Network“)
Dann konnte man mit WSHNet.enum??? auf alle Ducker zugreifen.

Daher meine Annahme daß man mit wmi, fso o.ä. das Problem
lösen kann.
Allerdings kenne ich mich da Null aus.

ich mich auch nicht, ich habe da aber mal gründlich gesucht.
Da steht nur ausdrücklich wie es nicht geht, aber kein Hinweis auf eine Lösung. WScript hilft wohl nicht.

Gruß Rainer

Sub druckerinfo()
Dim strPr As String
strPr = ActivePrinter
MsgBox strPr
End Sub

Wie müsste das Makro im Outlook lauten, damit ich dort die
Drucker-Info erhalte? - Ich arbeite mit Office Outlook 2003

Hallo Niclaus,

lieber den Spatz in der Hand als die Taube auf dem Dach.
In diesem Sinne, wie wär’s mit einem OL-Code der kurz eine Word-Instanz öffnet, den ActivePrinter ausliest und Word dann wieder schließt?

Das geht mit
Set appWord=CreateObject(„Word.Application“)
usw.
Kriegste das hin?

Gruß
Reinhard

Outlook VBA Drucker ermitteln

Wie müsste das Makro im Outlook lauten, damit ich dort die
Drucker-Info erhalte? - Ich arbeite mit Office Outlook 2003

Hallo Niclaus,

ein Anton hat mir das Nachfolgende gebastelt, allerdings fehlt beim Namen der Anschluß wie z.B. „auf LPT1:“ wie bei ActivePrinter bei Word:

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 

Gruß
Reinhard

Daher meine Annahme daß man mit wmi, fso o.ä. das Problem
lösen kann.
Allerdings kenne ich mich da Null aus.

ich mich auch nicht, ich habe da aber mal gründlich gesucht.
Da steht nur ausdrücklich wie es nicht geht, aber kein Hinweis
auf eine Lösung. WScript hilft wohl nicht.

Hallo Rainer,

danke für deine Mühen.
Wenn du gesucht hast und ich, der Anfragesteller sicher auch und nix brauchbares gefunden wurde, gibts da wohl nix.

Ich habe ja was gefunden/bekommen
/t/vba-drucker-info/5597765/7
aber wenn ich mir das so ansehe bin ich doch schneller wenn in in OL kurz eine Word-Instanz aufmache, den Activeprinter auslese usw. *denk*

Eine unbewiesene reine Annahme von mir ist, daß OL nicht auf den Drucker direkt zugreift sondern über Word ausdruckt.

Gruß
Reinhard

Hallo Niclaus,
ein Anton hat mir das Nachfolgende gebastelt

Grüezi Reinhard
Die zwei Makros kommen mir zwar spanisch vor: Ich versteh kaum ein „Wort“. Aber beide funktionieren!
Vielen Dank Dir und Deinem Anton!
Zur Zeit haben wir ja Banken-Krieg mit Frankreich. Ein EDV-Mensch hat in einer Bank in der Schweiz Daten von französischen Kunden geklaut und an den französichen Staat weitergegeben. Sein Deckname ist „Antoine“. - Ist Dein Anton etwa die gleiche Person? :wink:)
Alles Gute
Niclaus

Vielen Dank Rainer für Deine Bemühungen.
Ich habe die Makros von Reinhard übernommen. Siehe oben meine Antwort an Reinhard.
Alles Gute und vorweihnachtliche Grüsse
Niclaus

Outlook Standardrucker ermitteln
Grüezi Nuclaus,

Die zwei Makros kommen mir zwar spanisch vor: Ich versteh kaum
ein „Wort“. Aber beide funktionieren!

Anton oder Antoine *gg* hat wieder Code gezaubert, diesesmal wird der Drucker samt „auf LPT1“ o.ä. angezeigt.
Glaub mal nicht daß ich den Code komplett verstehe :smile:)
Getestet auf OL2007 und XL2000.

Public Sub active\_drucker()
 'Standarddrucker ermitteln
 Dim objWMI As Object, objItem As Object, sd As String, oReg
 Dim strKeyPath, arrValueNames, i, strValue, msg
 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

Gruß
Reinhard