Fach Ansteuerung bei diversen Druckern

12/11/2007 - 17:53 von andre.gobet | Report spam
Hallo zusammen

Ich habe hier folgendes Problem, in unserer Firma setzen wir die
folgenden Drucker-Modelle ein:

2x HP LaserJet 4200 DTN
3x HP LaserJet 4250 DTN

Wenn wir Briefe Drucken so habe ich ein kleines Script, welches
automatisch ein Exemplar auf weissem Papier und ein Exemplar auf
unserem Briefpapier druckt.

Fach 1 = leer wird nicht benutzt
Fach 2 = Briefpapier mit Logo
Fach 3 = Weisses Papier

Hier nun mein Script dazu:

Private Sub P_OK_WIN_Click()
Me.Hide
Dim ori As Integer
ori = Val(cbnumber3)
Dim cop As Integer
cop = Val(cbnumber4)
If ori + cop = 0 Then Exit Sub
If ori > 0 Then
With Options
.DefaultTrayID = 263
End With
Application.PrintOut FileName:="", Range:=wdPrintAllDocument,
Item:= _
wdPrintDocumentContent, copies:=ori, Pages:="",
PageType:=wdPrintAllPages, _
ManualDuplexPrint:=False, Collate:=True, Background:=True,
PrintToFile:= _
False, PrintZoomColumn:=0, PrintZoomRow:=0,
PrintZoomPaperWidth:=0, _
PrintZoomPaperHeight:=0
End If
If cop > 0 Then
'COPY
With Options
.DefaultTrayID = 262
End With
Application.PrintOut FileName:="", Range:=wdPrintAllDocument,
Item:= _
wdPrintDocumentContent, copies:=cop, Pages:="",
PageType:=wdPrintAllPages, _
ManualDuplexPrint:=False, Collate:=True, Background:=True,
PrintToFile:= _
False, PrintZoomColumn:=0, PrintZoomRow:=0,
PrintZoomPaperWidth:=0, _
PrintZoomPaperHeight:=0
End If
End Sub

Mein Problem, ist dass ich die Fàcher nur mit den ID's ansteuern kann
und diese ID's sind leider bei den beiden Modellen nicht identisch.
Das Fach ansteuern mit dem Namen funktioniert auch nicht, da die Namen
der Fàcher bei den Modellen unterschiedlich sind vom Werk aus.

Hier mal die ID-Codes:

HP LaserJet 4200
Fach 2 = 263
Fach 3 = 262

HP LaserJet 4250
Fach 2 = 261
Fach 3 = 260

Wie kann ich mein Script anpassen verbessern, dass dieses für beide
Drucker funktioniert ?

Ich danke euch für eure Hilfe und Feed-Back
 

Lesen sie die antworten

#1 Thomas Gahler
13/11/2007 - 08:04 | Warnen spam
Hallo andre



Wie kann ich mein Script anpassen verbessern, dass dieses für beide
Drucker funktioniert ?


Also wenn du Glück hast, dann musst du nicht das Script anpassen sondern die
Drucker. Schau mal nach ob du im Druckertreiber nebst den Eintràgen (Fach1,
Fach2 usw.) auch Eintràge zu Papierarten (Normal, Briefkopf usw.) hast.
Falls ja, dann kannst du deinen Drucker konfigurieren, in dem du dem
Drucker die einzelnen Papierarten pro Papierfach zuweist, anschliessend
kannst du dann im Makro die «neutralen» ID's für die Papierarten verwenden
(Normal73, Briefkopf71). Aber frei dich nicht zu früh, auch hier gibt
es zum Teil unterschiedliche Werte (und das kann ich wirklich nicht
verstehen, was das bei HP soll).

Du kannst deine Werte in ein Array packen und dann von dort entsprechend
auslesen. Eine Idee wie das gehen könnte kannst du hier anschauen, da ist
eine àhnliche Anforderung verpackt
http://groups.google.ch/group/micro...027ee0117c

Wenn es noch flexibler sein soll, dann verpack alle Werte für die
Fachsteuerung in eine .ini-Datei. Dann kannst du von extern die gewünschten
Codes àndern.


Ich selber habe das Ganz so anpackt, via API werden alle Drucker eingelesen
und in einer ComboBox zur Verfügung gestellt. Die Papierschàchte und die
zugehörigen Druckersteuerzeichen werden ebenfalls via API eingelesen. So
kann der Anwender auswàhlen und gleich mit dem Druck starten (also eine
Kombination von Dialog Datei/Drucken und Datei/Seite einrichten).
Falls du diesen Ansatz gehen willst, dann kann ich dir die entsprechenen
Codestellen zuammen schnippseln. Bedingtt aber, dass du ein gewisses
VBA-Knowhow hast, ansonsten wir wohl nicht vom Fleck kommen.





Dann noch ein paar Sachen zu deinem Code


Private Sub P_OK_WIN_Click()
Me.Hide
Dim ori As Integer
ori = Val(cbnumber3)
Dim cop As Integer


Meine Empfehlung, gewöhn dir an, alle Variablen zu beginn der Prozedur zu
deklarieren und nicht irgendwo im Code


cop = Val(cbnumber4)


Meine Empfehlung, gib den Steuerelementen und Variablen aussage kràftige
Namen, du oder andere werden sich spàter viel schneller wieder im Code
zurecht finden


If ori + cop = 0 Then Exit Sub


Braucht es meiner Meinung nach gar nicht


Application.PrintOut FileName:="", Range:=wdPrintAllDocument,
Item:=wdPrintDocumentContent


Meine Empfehlung, setze jeweisl nur jene Argumente ein, die dur wirklich
benötigst und nicht direkt den Code übernehmen, den dir der Makrorekorder
zurückliefert.

Background:=True,


Erfahrungs gemàss sollte beim Drucken in Makros immer 'Background:=False'
gesetzt sein.









Thomas Gahler
MVP für WordVBA
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP2), Office XP (SP3)

Ähnliche fragen