AW: Schleifenproblem Drucker wechseln
14.12.2006 12:50:23
lobby007
Hallo Uwe, vielen Dank.
Habe jetzt:
Sub ListAllPrinters()
'bst
Dim WshNetwork As Object, oPrinters As Object, i%
Set WshNetwork = CreateObject("WScript.Network")
Set oPrinters = WshNetwork.EnumPrinterConnections
For i = 0 To oPrinters.Count - 1 Step 2
Debug.Print oPrinters.Item(i + 1) & " an " & oPrinters.Item(i)
Next
Set WshNetwork = Nothing
End Sub
Sub Haupt()
Dim ws As Worksheet
Dim pdf As String
Dim strFormat As String
Dim zeile As Long
Dim strPrinter As String
Set ws = ThisWorkbook.Worksheets(1)
ws.Columns("C").ClearContents
zeile = 2
strPrinter = Application.ActivePrinter
Do Until IsEmpty(ws.Cells(zeile, "A"))
strFormat = ws.Cells(zeile, "B")
pdf = ws.Cells(zeile, "A")
If Dir(pdf) <> "" Then
If strFormat = "A3" Then
ChangePrinter "PDFCreator"
End If
If strFormat = "A4" Then
ChangePrinter "Canon MP830 Series Printer auf Ne04:"
End If
PDF_Datei_drucken datei:=pdf
Else
ws.Cells(zeile, "C") = "NV"
End If
zeile = zeile + 1
Loop
Application.ActivePrinter = strPrinter
ChangePrinter """& strPrinter """
End Sub
Function ChangePrinter(ByVal strPrinter As String) As Boolean
'von bst
Dim WshNetwork As Object, oPrinters As Object, i%
ChangePrinter = False
Set WshNetwork = CreateObject("WScript.Network")
Set oPrinters = WshNetwork.EnumPrinterConnections
For i = 1 To oPrinters.Count Step 2
If oPrinters.Item(i) Like strPrinter Then
WshNetwork.SetDefaultPrinter oPrinters.Item(i)
ChangePrinter = True
Exit For
End If
Next
Set WshNetwork = Nothing
End Function
Problem: Bei deinem letzten Code fehlte m.E. das Rücksetzen des Standarddruckers, war nur der von Excel?!
Das Grundsätzliche Problem: er druckt entweder alles auf dem einen oder auf dem anderen. Manchmal wechselt er auch den Standarddrucker (auf PDF Creator)
Ich verstehe das nicht, im Einzelschritt hat er die richtigen variablen.
Weiß Du woran das liegt?
https://www.herber.de/bbs/user/38993.xls
P.S. das mit dem Direktfenster mit den Druckern hat bei mir nicht geklappt - habe es per Makro aufzeichnen gemacht.
gruß lobby007