Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
828to832
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
828to832
828to832
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Schleifenproblem Drucker wechseln

Schleifenproblem Drucker wechseln
13.12.2006 14:43:34
lobby007
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

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleifenproblem Drucker wechseln
14.12.2006 07:35:40
Uwe
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
Anzeige
AW: Schleifenproblem Drucker wechseln
14.12.2006 07:59:14
lobby007
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
Anzeige
AW: Schleifenproblem Drucker wechseln
14.12.2006 08:59:56
Uwe
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
Anzeige
AW: Schleifenproblem Drucker wechseln
14.12.2006 09:18:23
lobby007
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
AW: Schleifenproblem Drucker wechseln
14.12.2006 09:17:10
Uwe
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
Anzeige
AW: Schleifenproblem Drucker wechseln
14.12.2006 09:39:44
lobby007
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
AW: Schleifenproblem Drucker wechseln
14.12.2006 09:49:32
Uwe
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
Anzeige
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
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige