Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Druckereinstellungen mittels Makro/Modul

534 views
Skip to first unread message

Ralf Diller

unread,
Jul 16, 1999, 3:00:00 AM7/16/99
to
Ich suche die Befehle um die Druckereinstellungen für den Papierschacht zu
verändern.
in Word ist es

ActiveDocument.PageSetup.FirstPageTray = [Tray]
ActiveDocument.PageSetup.OtherPagesTray = [Tray]

[Tray] Kan sein:
wdPrinterAutomaticSheetFeed
wdPrinterDefaultBin
wdPrinterEnvelopeFeed
wdPrinterFormSource
wdPrinterLargeCapacityBin
wdPrinterLargeFormatBin
wdPrinterLowerBin
wdPrinterManualEnvelopeFeed
wdPrinterManualFeed
wdPrinterMiddleBin
wdPrinterOnlyBin
wdPrinterPaperCassette
wdPrinterSmallFormatBin
wdPrinterTractorFeed
wdPrinterUpperBin

Gibt es solche Befehle in Excel ?

Ralf Diller

Robert Genzinger

unread,
Jul 16, 1999, 3:00:00 AM7/16/99
to
Zeichne doch einfach ein Makro auf, bei dem Du die Einstellungen änderst
Dann siehst Du welche Befehle Du brauchst und mußt sie nicht mal selbst
eintippen.

Robert Genzinger
LS EDV-Coaching
Robert.G...@LS-online.de
www.LS-online.de

Ralf Diller wrote in message ...

Franz-Josef Raabe

unread,
Jul 16, 1999, 3:00:00 AM7/16/99
to
Hallo Robert, hallo Ralf,
die Druckereinstellung bei EXCEL wird vom Makro nicht aufgezeichnet. Die
Möglichkeiten von EXCEL sind leider beschränkter als in WORD. Die
genannten Befehle gibt es in EXCEL nicht. Es geht nur das über VBA, was
mit "Seiteneinrichtung" passiert.
Einzige Möglichkeit ist, mit SendKeys die Einstellung per Hand
nachzubilden, die ist abhängig von der Dialogführung des
Druckertreibers.
MfG
Franz-Josef

Robert Genzinger schrieb:

Pixeltester

unread,
Jul 16, 1999, 3:00:00 AM7/16/99
to
Franz-Josef Raabe schrieb:

> Hallo Robert, hallo Ralf,
> die Druckereinstellung bei EXCEL wird vom Makro nicht aufgezeichnet. Die
> Möglichkeiten von EXCEL sind leider beschränkter als in WORD. Die
> genannten Befehle gibt es in EXCEL nicht. Es geht nur das über VBA, was
> mit "Seiteneinrichtung" passiert.
> Einzige Möglichkeit ist, mit SendKeys die Einstellung per Hand
> nachzubilden, die ist abhängig von der Dialogführung des
> Druckertreibers.
> MfG
> Franz-Josef
>
> Robert Genzinger schrieb:
> >
> > Zeichne doch einfach ein Makro auf, bei dem Du die Einstellungen änderst
> > Dann siehst Du welche Befehle Du brauchst und mußt sie nicht mal selbst
> > eintippen.
> >
> > Robert Genzinger
> > LS EDV-Coaching
> > Robert.G...@LS-online.de
> > www.LS-online.de

Hallo Robert und Ralf,

wie wäre es (der theroie nach möglich), wenn Ralf einfach in Excel ein Makro
schreibt, daß die Druckereinstellung _über_ Word ändert??

Marco Amistadi

Ralf Diller

unread,
Jul 19, 1999, 3:00:00 AM7/19/99
to
Hallo Marco,

das geht leider nicht, da dieses nur die Druckereinstellungen für ein
Dokument, aber nicht die aktuellen globalen Druckereinstellung ändert.

Ralf

Pixeltester <Pi...@Pixeltester.de> schrieb in im Newsbeitrag:
378F9966...@Pixeltester.de...

Michael Schwimmer

unread,
Jul 19, 1999, 3:00:00 AM7/19/99
to
Hallo Ralf,
die Druckereinstellungen zu ändern ist nicht gerade trivial. Die einfachste
Lösung ist wohl, die Druckereinstellungen zu ändern und dann den entsprechenden
Schlüssel zu exportieren. Die .reg Datei kann dann ev. mit ShellExecute oder Shell
"regedit.exe Dateiname.reg" zurückgeschrieben werden (nicht ausprobiert). Der entsprechende
Schlüssel ist im Pfad "SYSTEM\CurrentControlSet\Control\Print\Printers\HP DeskJet 400"
(hier mein Drucker) zu finden.
Mittels API kannst du aber auch gezielte Änderungen durchführen. Die Einstellungen sind
unter "Default DevMode" gespeichert. Die ersten 148 Byte entsprechen einer DEVMODE
Struktur. Irgendwo in den restlichen Bytes sind die druckerspezifischen Einstellungen
gespeichert. Mit folgender Prozedur kannst du den Schlüsselinhalt in einer Tabelle ausgeben.
Ändere die Druckereinstellungen und sieh dann nach, welche Bytes sich geändert haben.

'Deklarationsabschnitt
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias _
"RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As _
String, ByVal Reserved As Long, ByVal dwType As Long, _
lpData As Any, ByVal cbData As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias _
"RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName _
As String, ByVal lpReserved As Long, lpType As Long, _
lpData As Any, lpcbData As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
"RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _
ByVal ulOptions As Long, ByVal samDesired As Long, phkResult _
As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const Schlüsselname = _
"SYSTEM\CurrentControlSet\Control\Print\Printers\HP DeskJet 400"
Private Const Einstellungsname = "Default DevMode"

Private Sub Einstellungen_in_Tabelle()
Dim dummy, Schlüsselhandle&, Typ&
Dim Schlüsselinhalt() As Byte
Dim Länge&, Eintrag$
ReDim Schlüsselinhalt(1 To 600)
dummy = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
Schlüsselname, 0&, 1&, Schlüsselhandle)
dummy = RegQueryValueEx(Schlüsselhandle, _
Einstellungsname, 0&, Typ, Schlüsselinhalt(1), Länge)
ReDim Schlüsselinhalt(1 To Länge)
dummy = RegQueryValueEx(Schlüsselhandle, _
Einstellungsname, 0&, 3&, Schlüsselinhalt(1), Länge)
dummy = RegCloseKey(Schlüsselhandle)
With Sheets("Druck")
For dummy = 1 To Länge
.Cells(dummy, 1).Value = Schlüsselinhalt(dummy)
Next
End With
End Sub

Mit folgender Prozedur kannst du dann einzelne Bytes ändern und zurückschreiben.

Sub DruckerauflösungÄndern()
Dim dummy, Schlüsselhandle&, Typ&
Dim Schlüsselinhalt() As Byte
Dim Länge&, Eintrag$
ReDim Schlüsselinhalt(1 To 600)
dummy = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
Schlüsselname, 0&, 1&, Schlüsselhandle)
dummy = RegQueryValueEx(Schlüsselhandle, _
Einstellungsname, 0&, Typ, Schlüsselinhalt(1), Länge)
ReDim Schlüsselinhalt(1 To Länge)
dummy = RegQueryValueEx(Schlüsselhandle, _
Einstellungsname, 0&, 3&, Schlüsselinhalt(1), Länge)
'Auf Modus Schnelldruck
'Schlüsselinhalt(341) = 2
'Auf Modus Normaldruck
'Schlüsselinhalt(341) = 1
'Auf Modus Hohe Qualität
Schlüsselinhalt(341) = 0
dummy = RegSetValueEx(Schlüsselhandle, _
Einstellungsname, 0&, 3&, Schlüsselinhalt(1), Länge)
dummy = RegCloseKey(Schlüsselhandle)
End Sub

Bei mir haben zum Bleistift folgende Bytes folgende Funktionen.
379=Farbe-Grauton
341=Druckqualität
391=Papiereinzug
387=Hoch-Querformat
383=Papiergröße

Ich habe aber andere Drucker noch nicht ausprobiert.

MfG
Michael


Stefan Wilfling

unread,
Jul 21, 1999, 3:00:00 AM7/21/99
to

Hallo Ralf,

Wenn Du wirklich nur den Papierschacht verändern möchtest, hätte ich eine
einfache Lösung für das Problem: 1) Du installierst Deinen Drucker ein
zweites mal und stellst einmal den
Druckerschacht auf z.B. A4 und das andere mal auf A5.

2) Du läßt die erste Seite mit dem Druckerprofil A4 ausdrucken und die
restlichen 2 mit dem Druckerprofil A5.

Dies ist vermutlich die schnellere Lösung, da die Umsetzung der
Druckereigenschaften mit VBA sehr langsam geht (frag mich bitte nicht warum;
ist halt so).

MFG
Stefan

0 new messages