Anzeige
Archiv - Navigation
1192to1196
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
Inhaltsverzeichnis

Drucken auf verschiedenen druckern

Drucken auf verschiedenen druckern
niitaka
Hallo zusammen,
hab ein Problem mit dem Drucken auf verschiedenen Papierfächern eines Druckers!
In Windows hab ich mehere Drucker installiert, welche jeweils auf einen anderen Papierschacht des Druckers (insgesamt 4 Papierschächte) zugreifen.
Wenn in Excle über "Datei - Drucken" die einzelnen Drucker manuell ausgewählt werden, dann funktioniert es einwandfrei!
Da es aber umständlich ist, immer manuell den Drucker auszuwählen, möchte ich dies mit einem Userform vereinfachen:
https://www.herber.de/bbs/user/73007.xls
Das Problem ist aber, dass das Code nicht immer funktioniert. Im Debug-Modus zeigt er mir zwar den Druckerwechsel an (ActivePrinter ist ok), der Druck erfolgt jedoch aus einem anderen Papierfach! Selbst in der Windows-Druckumgebung wird der wechsel des Druckers (Voreingestellter Drucker) korrekt angezeigt!
Helft mir bitte, bin am verzweifeln.
Anmerkung:
Der Code funktioniert wie gesagt nicht immer!
Grundsätzlich funktionert er super, wenn Excel geöffnet wird und das Programm das erste mal durchlaufen wird. Bei allen nachfolgenden Programmdurchläufen macht Excel was es will!!
Könnte mir denken, dass ich nicht den Standarddrucker ändere, sondern in der Funktion PrintOut den gewollten Drucker angebe.
Bin gespannt auf eure antworten!

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Drucken auf verschiedenen druckern
10.01.2011 17:57:13
Anton
Hallo niitaka,
probier's so:
Code:

Dim aktDr As String  
aktDr = Application.ActivePrinter
'============ weißen Papierschacht ============
For i = 1 To whitepaper  
  Application.StatusBar = "Drucke auf weißer Papiervorlage (" & i & " von " & whitepaper & ")"
  Application.Wait Now + zeit
  Worksheets(1).PrintOut ActivePrinter:="KC_vorlage_weiss"  'anpassen
  Application.Wait Now + zeit
  .Label5.Caption = whitepaper - i
Next i
'============ grünen Papierschacht ============
For i = 1 To greenpaper  
  Application.StatusBar = "Drucke auf grüner Papiervorlage (" & i & " von " & greenpaper & ")"
  Application.Wait Now + zeit
  Worksheets(1).PrintOut ActivePrinter:="KC_vorlage_gruen"  'anpassen
  Application.Wait Now + zeit
  .Label6.Caption = greenpaper - i
Next i
'usw
Application.StatusBar = False
Application.ActivePrinter = aktDr
Unload UserForm1


mfg Anton
Anzeige
AW: Drucken auf verschiedenen druckern
11.01.2011 09:11:01
niitaka
Hallo Anton,
funktioniert leider nicht, da der Druckername nicht nur "KC_vorlage_weiss" ist, sondern "KC_vorlage_weiss auf Ne02:". Windows ist leider so schlau und behält den Port (Ne02) nicht konstant bei einem Drucker. Je nach Anzahl der Drucker und sogar verschieden vom Computerstart wird der Port an jedem PC anders vergeben. Mein Code soll aber unabhängig von PC und Druckeranzahl funktionieren.
Mich würde interessieren, ob es bei euch funktioniert (ich weiß, dass nicht jeder einen Drucker mit mehreren Papierschächten zur Verfügung hat).
Im Debug-Modus wird mir ein korrekter Wechsel des aktiven Druckers angezeigt. Aber selbst wenn der Drucker mit dem Papierschacht 1 aktiv ist, kann er je nach laune ohne Fehlermeldung den Drucker mit Papierschacht 2 verwenden!
Ganz unten in meinem Code druckt er auch eine pdf. Dies funktioniert jedesmal ohne Probleme! Werde mal versuchen, dass er zwischendrin mal den pdf-Drucker auswählt und dann erst den gewünschten Drucker. Vielleicht kommt Windows zwischen den Einstellungen der Papierschächte durcheinander!
Was keine Abhilfe gebracht hat war nach PrintOut ActivePrinter:=xxx hier mit der Druckersuchen-Funktion den korrekten Druckernamen inkl. Portangabe einzutragen.
Vielleicht kann mir jemand von euch auch einen alternativ-Code mit einem vollkommen anderen Lösungsansatz geben. Nur die Methode Sendkey möchte ich vermeiden.
Anzeige
Drucken auf verschiedenen Druckern
11.01.2011 15:45:08
Anton
Hallo niitaka?,
Die Version , die ich gepostet habe , benötigt keine Angabe von Ports , siehe hier.
Ansonsten kannst du die Ports so ermitteln:
Code:

Option Explicit
Public Sub Drucker_mit_port()  
  Dim strDrucker As String, oReg As Object    
  Dim gefunden As Boolean, strKeyPath As String    
  Dim arrValueNames, i As Integer, strValue As String    
  Const HKEY_current_user = &H80000001
  strDrucker = "HP" 'anpassen
  gefunden = False
  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)  
    If InStr(1, arrValueNames(i), strDrucker) <> 0 Then  
      oReg.GetStringValue HKEY_current_user, strKeyPath, arrValueNames(i), strValue  
      MsgBox arrValueNames(i) & Replace(strValue, "winspool,", " auf ")
      gefunden = True
    End If  
  Next
  Set oReg = Nothing  
  If gefunden = False Then MsgBox "Drucker " & strDrucker & " ist nicht installiert!"  
End Sub  


mfg Anton
Anzeige
AW: Drucken auf verschiedenen druckern
11.01.2011 15:55:07
niitaka
Danke Anton,
werd später mal ausprobieren und mich dann melden!
Grüße
niitaka

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige