Herbers Excel-Forum - das Archiv

Schleifenproblem Drucker wechseln

Bild

Betrifft: Schleifenproblem Drucker wechseln
von: lobby007

Geschrieben am: 13.12.2006 14:43:34
Hallo Excel Spezialisten,
habe folgenden Code:
Sub Haupt()
Dim ws As Worksheet
Dim pdf As String
Dim format As String
Dim zeile As Long
Set ws = ThisWorkbook.Worksheets(1)
ws.Columns("C").ClearContents
zeile = 2
Do Until IsEmpty(ws.Cells(zeile, "A"))
format = ws.Cells(zeile, "B")
pdf = ws.Cells(zeile, "A")
If Dir(pdf) <> "" And format = "A4" Then
Application.ActivePrinter = "PDFCreator auf Ne00:"
PDF_Datei_drucken datei:=pdf
If Dir(pdf) <> "" And format = "A3" Then
Application.ActivePrinter = "canon mp830 series printer auf NE04:"
PDF_Datei_drucken datei:=pdf
Else
ws.Cells(zeile, "C") = "NV"
End If
End If
zeile = zeile + 1
Loop
End Sub

Er soll bei A3 den einen Drucker ansprechen und bei A4 den anderen - tut er aber nicht.
Woran liegt das?
Wer hat eine Idee?
gruß lobby007
Bild

Betrifft: AW: Schleifenproblem Drucker wechseln
von: Uwe Küstner

Geschrieben am: 14.12.2006 07:35:40
Hallo lobby,
so sollte es gehen:
Sub Haupt()
Dim ws As Worksheet
Dim pdf As String
Dim strFormat As String
Dim zeile As Long
Set ws = ThisWorkbook.Worksheets(1)
ws.Columns("C").ClearContents
zeile = 2
Do Until IsEmpty(ws.Cells(zeile, "A"))
strFormat = ws.Cells(zeile, "B")
pdf = ws.Cells(zeile, "A")
If Dir(pdf) <> "" Then
If strFormat = "A4" Then
Application.ActivePrinter = "PDFCreator auf Ne00:"
End If
If strFormat = "A3" Then
Application.ActivePrinter = "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
End Sub

Gruß Uwe
Bild

Betrifft: AW: Schleifenproblem Drucker wechseln
von: lobby007

Geschrieben am: 14.12.2006 07:59:14
Hallo Uwe, danke für die Antwort.
Ist wohl richtig aber das Problem ist das die Drucksteuerung gar nicht von Excel sondern von Adobe ausgeht (in der PDF_Datei_drucken...).
Ist mir erst zu spät eingefallen.
Das ist diese Funktion:
Private Declare
Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long _
) As Long
Sub PDF_Datei_drucken(datei As String)
ShellExecute 0&, "print", datei, vbNullString, vbNullString, vbNormalFocus
End Sub

Und ob man da das Druckerformat anpassen kann weiß ich nicht - Du?
gruß lobby007
Bild

Betrifft: AW: Schleifenproblem Drucker wechseln
von: Uwe Küstner

Geschrieben am: 14.12.2006 08:59:56
Hallo lobby,
dann probier es mal so:
Sub Haupt()
Dim ws As Worksheet
Dim pdf As String
Dim strFormat As String
Dim zeile As Long
Set ws = ThisWorkbook.Worksheets(1)
ws.Columns("C").ClearContents
zeile = 2
Do Until IsEmpty(ws.Cells(zeile, "A"))
strFormat = ws.Cells(zeile, "B")
pdf = ws.Cells(zeile, "A")
If Dir(pdf) <> "" Then
If strFormat = "A4" Then
ChangePrinter = "PDFCreator"
End If
If strFormat = "A3" Then
ChangePrinter = "canon mp830 series printer"
End If
PDF_Datei_drucken datei:=pdf
Else
ws.Cells(zeile, "C") = "NV"
End If
zeile = zeile + 1
Loop
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
Gruß Uwe
Bild

Betrifft: AW: Schleifenproblem Drucker wechseln
von: lobby007
Geschrieben am: 14.12.2006 09:18:23
Hallo Uwe,
das steigt bei mir beim kompilieren aus: Funktionsaufruf auf der linken Seite der Zweisung muß den Typ Variant oder Object zurückgeben.
An einem Verweis kann es wohl nicht liegen?
gruß lobby007
Bild

Betrifft: AW: Schleifenproblem Drucker wechseln
von: Uwe Küstner

Geschrieben am: 14.12.2006 09:17:10
Hallo lobby,
da waren vorhin 2 Gleichheitszeichen zu viel drin.
Also nochmal komplett:
Sub Haupt()
Dim ws As Worksheet
Dim pdf As String
Dim strFormat As String
Dim zeile As Long
Set ws = ThisWorkbook.Worksheets(1)
ws.Columns("C").ClearContents
zeile = 2
Do Until IsEmpty(ws.Cells(zeile, "A"))
strFormat = ws.Cells(zeile, "B")
pdf = ws.Cells(zeile, "A")
If Dir(pdf) <> "" Then
If strFormat = "A4" Then
ChangePrinter "PDFCreator"
End If
If strFormat = "A3" Then
ChangePrinter "canon mp830 series printer"
End If
PDF_Datei_drucken datei:=pdf
Else
ws.Cells(zeile, "C") = "NV"
End If
zeile = zeile + 1
Loop
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
Gruß Uwe
Bild

Betrifft: AW: Schleifenproblem Drucker wechseln
von: lobby007

Geschrieben am: 14.12.2006 09:39:44
Hallo Uwe,
er wechselt zwar den Drucker einmal auf PDFCreator aber das wars. Auf den 2ten bei A3 wechselt er nicht.
Anbei mal die Datei.
https://www.herber.de/bbs/user/38983.xls
Als kleiner Sonderbonbon wäre es gut wenn man sich am Anfang der Funktion den Standarddrucker merken würde und am Ende diesen wieder aktivieren würde.
gruß lobby007
Bild

Betrifft: AW: Schleifenproblem Drucker wechseln
von: Uwe Küstner

Geschrieben am: 14.12.2006 09:49:32
Hallo lobby,
wahrscheinlich stimmt der Name des A3-Druckers nicht.
Lass Dir mal die Namen mit diesem Makro im Direktfenster ausgeben:
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
Und hier noch mal mit Merken und Zurücksetzen des Aktiven Druckers:
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 = "A4" Then
ChangePrinter "PDFCreator"
End If
If strFormat = "A3" Then
ChangePrinter "canon mp830 series printer"
End If
PDF_Datei_drucken datei:=pdf
Else
ws.Cells(zeile, "C") = "NV"
End If
zeile = zeile + 1
Loop
Application.ActivePrinter = strPrinter
End Sub
Gruß Uwe
Bild

Betrifft: AW: Schleifenproblem Drucker wechseln
von: lobby007

Geschrieben am: 14.12.2006 12:50:23
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
 Bild
Excel-Beispiele zum Thema "Schleifenproblem Drucker wechseln"
Druckereinstellungen verändern Aktiven Drucker in UserForm wechseln
Zum Druck auf Fax-Drucker umschalten und wieder zurück Einstellen des Drucker-Papiereinzug-Schachts
Installierte Drucker auslesen Drucker auswählen und nach dem Drucken zurücksetzen
Menüleiste wechseln ListBox-Einträge auswechseln
Zum nächsten Blatt wechseln Farbe bei Mausberührung wechseln