Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Druckertreiber wählen

Betrifft: Druckertreiber wählen von: Mathias
Geschrieben am: 03.04.2008 08:09:00

Hallo,

habe folgenden Code, um ein PDF über FreePDF zu erstellen:

Application.ActivePrinter = "FreePDF XP - Rechnung auf Ne03:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"FreePDF XP - Rechnung auf Ne03:", Collate:=True

Dummerweise ändert sich manchmal die Bezeichnung "Ne03" in z.B. "Ne04" usw.
und das Makro hängt sich auf.

Wie kann ich den Code ändern, dass der Ausdruck unabhänig von diesen Änderungen wird

und immer der richtige Druckertreiber ausgewählt wird?

Viele Grüße

Mathias

  

Betrifft: AW: Druckertreiber wählen von: Renee
Geschrieben am: 03.04.2008 09:32:18

Hi Matthias,

Füge diese Funktion in ein Modul ein:

Public Function getPrinterName(sPartOfName As String) As String
Dim objNet As Object
Dim objPrinter As Object
Dim ix As Integer
Set objNet = CreateObject("WScript.Network")
Set objPrinter = objNet.EnumPrinterConnections
For ix = 0 To objPrinter.Count - 1 Step 2
    If InStr(UCase(objPrinter.Item(ix + 1)), UCase(sPartOfName)) > 0 Then
        getPrinterName = objPrinter.Item(ix + 1)
        Exit Function
    End If
Next
End Function


und ändere deinen Code so:


Application.ActivePrinter = getPrinterName("FreePDF XP") ....



GreetZ Renée


  

Betrifft: AW: Druckertreiber wählen von: Mathias
Geschrieben am: 03.04.2008 14:59:18

Hallo Renee,

danke für den Quellcode.

Hab ihn genauso eingebunden, aber leider bleibt Excel dabei hängen.

Da ich den Quellcode nicht so wirklich verstehe, find ich leider den Fehler nicht.

Viele Grüße

Mathias


  

Betrifft: AW: Druckertreiber wählen von: anton
Geschrieben am: 03.04.2008 16:11:34

Hallo Mathias,

versuch's mal damit:

Sub b()
  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(UCase(arrValueNames(i)), "FREEPDF XP") > 0 Then    
      Application.ActivePrinter = arrValueNames(i) & Replace(strValue, "winspool,", " auf ")
    End If  
  Next
  Set oReg = Nothing  
  MsgBox Application.ActivePrinter
End Sub  


mfg Anton


  

Betrifft: AW: Druckertreiber wählen von: Mathias
Geschrieben am: 03.04.2008 16:19:26

Hallo Anton,

danke für den Tipp. Hab den Quellcode gespeichert.

In der Zwischenzeit habe ich jedoch schon folgende Lösung gefunden:

Function NeNumber(Druckername As String) As String
Dim Ne As String, Printer$, i%
Printer = Druckername  ' Achtung: Druckername auf Ne !!!
On Error Resume Next
For i = 1 To 99
    Ne = Format(i, "00")
    Err.Number = 0
    Application.ActivePrinter = Printer & Ne & ":"
    If Err.Number = 0 Then
       NeNumber = Ne
       Exit For
    End If
Next
End Function



Viele Grüße

Mathias