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

Seitengröße in Berichten

164 views
Skip to first unread message

Thomas Raasch

unread,
Apr 18, 2008, 8:56:50 AM4/18/08
to
Hallo NG,

ich habe Acc2002.
Darin sind ein Haufen Berichte. Derzeit stelle ich über "Seite einrichten"
den Drucker, Schacht, Papiergröße, ... ein also bspw. Epson - Traktor - A4

Nun habe ich aber das Problem, dass wir ein etwas eigenartiges Papierformat
haben (1/3 von A4). Dieses gibt es in der Auswahlliste der Papierformate
nicht. Wenn ich mir unter den "Servereigenschaften" bei Start -->
Einstellungen --> Drucker und Faxgeräte ein eigenes Papierformat "Test"
erstellen, so kann ich dieses danach im Bericht auswählen - klar. Der
Ausdruck ist nun korrekt.
Starte ich die Access-Datei nun aber an einem anderen PC, funktioniert der
Ausdruck dort nicht, da dieser PC das selbst definierte Papierformat "Test"
nicht hat. Erstelle ich "Test" an diesem PC findet Access dieses
Papierformat dennoch nicht. Hier scheint Access mit IDs zu arbeiten und
nicht mit den Namen der Papiere (oder Formulare - wie sie dort heißen). It's
not a bug - it's a feature!

Als Lösung bleibt also nur die Einstellung per Code zur Laufzeit. Ich habe
ein wenig rumprobiert aber nix passendes gefunden. Bspw. kann man
_angeblich_ so das Seitenformat ändern:

Sub Test()
Set prnt = Application.Printers("EPSON Generic 24Pin With Euro")
Set rprt = Report_Betriebsauftrag

'von A4 auf A5 umstellen
prnt.PaperSize = acPRPSA5
'auf Hochformat
prnt.Orientation = acPRORPortrait
'Bericht öffnen
DoCmd.OpenReport rprt.Name, acViewPreview
'Drucker-Einstellungen anwenden
rprt.Printer = prnt
End Sub

Leider funktioniert dies bei mir nicht. Der Bericht öffnet wie immer in A4.
Sehe ich unter "Seite einrichten" nach steht dort zwar A5 aber angezeigt
wirds als A4. Ich habe den Code auch schon bei Report_Open versucht -
gleiches Ergebnis.

Und abgesehen davon, dass er die Änderungen nicht annimmt kann ich auch hier
wieder nur die Standard-Papierformate wählen.


Nun bleibt also die Frage:
Wie kann ich einen Bericht während der Laufzeit auf ein
Nicht-Standard-Papierformat umbiegen?
Am besten noch so, dass er es speichert und nicht jedes mal vor dem Druck
die Druckereinstellungen ändern muss. Ich stellte mir eine kleine
Update-Funktion vor, die beim ersten Start des Programms alle Berichte nach
meinen Wünschen anpasst.


Für Infos sehr dankbar
Grüße
Thomas


Jens Schilling

unread,
Apr 19, 2008, 2:34:14 AM4/19/08
to
Hallo, Thomas

Thomas Raasch wrote:
> Nun habe ich aber das Problem, dass wir ein etwas eigenartiges
> Papierformat haben (1/3 von A4). Dieses gibt es in der Auswahlliste
> der Papierformate nicht. Wenn ich mir unter den "Servereigenschaften"
> bei Start --> Einstellungen --> Drucker und Faxgeräte ein eigenes
> Papierformat "Test" erstellen, so kann ich dieses danach im Bericht
> auswählen - klar. Der Ausdruck ist nun korrekt.
> Starte ich die Access-Datei nun aber an einem anderen PC,
> funktioniert der Ausdruck dort nicht, da dieser PC das selbst
> definierte Papierformat "Test" nicht hat. Erstelle ich "Test" an
> diesem PC findet Access dieses Papierformat dennoch nicht. Hier
> scheint Access mit IDs zu arbeiten und nicht mit den Namen der
> Papiere (oder Formulare - wie sie dort heißen). It's not a bug - it's
> a feature!
> Als Lösung bleibt also nur die Einstellung per Code zur Laufzeit. Ich
> habe ein wenig rumprobiert aber nix passendes gefunden. Bspw. kann man
> _angeblich_ so das Seitenformat ändern:
>
> Sub Test()

[SNIP


>
> Leider funktioniert dies bei mir nicht. Der Bericht öffnet wie immer
> in A4. Sehe ich unter "Seite einrichten" nach steht dort zwar A5 aber
> angezeigt wirds als A4. Ich habe den Code auch schon bei Report_Open
> versucht - gleiches Ergebnis.
>
> Und abgesehen davon, dass er die Änderungen nicht annimmt kann ich
> auch hier wieder nur die Standard-Papierformate wählen.

Es kannst bei Peter Walker ( http://www.papwalker.com/links.html ) die Demo
"Report Printer Settings" finden, die einige Funktionen zum Einstellen
eines Druckers bereitstellt, u.a. auch das Papierformat.

Schau Dir die doch mal an..

Gruss
Jens


Thomas Raasch

unread,
Apr 21, 2008, 4:05:21 AM4/21/08
to

"Jens Schilling" <JensSchilling...@fissership.de> schrieb im
Newsbeitrag news:Oqunmdeo...@TK2MSFTNGP05.phx.gbl...
> Hallo, Thomas

>
>
> Es kannst bei Peter Walker ( http://www.papwalker.com/links.html ) die
> Demo "Report Printer Settings" finden, die einige Funktionen zum
> Einstellen eines Druckers bereitstellt, u.a. auch das Papierformat.
>
> Schau Dir die doch mal an..
>
> Gruss
> Jens
>


Hi,

Danke danke! OK mit dem Tool speichert er schonmal die Einstellungen. Der
Trick war einfach, den Report im Entwurf zu öffnen - dann ändern - Speichern
und gut. Die anderen google-Ergebnisse haben den Bericht alle als Preview
geöffnet und dann geändert. Das klappte bei mir nie.

Jedoch auch hierbei bleibt das Hauptproblem, dass ich keine eigene
Papiergröße angeben kann. Die Combo "Paper" lässt halt nur die Standards wie
A3, A4, ... zu.
Ich habe einen Zettel der A4-Breite hat (21cm) aber nur eine Höhe von 10,2cm
Es handelt sich hierbei um Endlospapier. Komisch ist aber noch, wenn ich den
Bericht auf A4 formatiere und am anderen PC ausdrucke fährt er genau 3
dieser Blätter durch und steht dann an der Abrisskante. D.h. er ist der
Meinung A4 sei 3x 10,2cm lang - aber A4 ist keine 30,6cm sondern nur 29,7cm.
Aber er fährt exakt auf Abrisskante! Dieser fehlende cm ist nicht
nachvollziehbar. Naja, aber dieses "Problem" interessiert mich eigentlich
gar nicht... ich brauche meine Papiergröße.

Oder es wäre möglich die Papier-Formate, die ich unter "Servereinstellungen"
bei Drucker und Faxgeräte angegeben habe zu exportieren! Dann könnte ich
diese am nächsten PC importieren und alles sollte gehen.


Grüße
Thomas


Jens Schilling

unread,
Apr 21, 2008, 5:01:46 AM4/21/08
to
Hallo, Thomas

Thomas Raasch wrote:
>> die Demo "Report Printer Settings" finden

> Danke danke! OK mit dem Tool speichert er schonmal die Einstellungen.

Immerhin schon etwas ;-)

> Jedoch auch hierbei bleibt das Hauptproblem, dass ich keine eigene
> Papiergröße angeben kann. Die Combo "Paper" lässt halt nur die
> Standards wie A3, A4, ... zu.

Das verstehe ich jetzt nicht ganz....
Ich habe eben in den Servereigenschaften ein neues Formular erstellt - und
dieses kann ich auch auswählen, wenn ich im Bericht auf Datei --> Seite
Einrichten --> Seite --> Papier --> Größe gehe ( Access 03 ) ; es wird auch
gespeichert, und ist unverändert nach einem Neustart der DB vorhanden.

> Oder es wäre möglich die Papier-Formate, die ich unter
> "Servereinstellungen" bei Drucker und Faxgeräte angegeben habe zu
> exportieren! Dann könnte ich diese am nächsten PC importieren und
> alles sollte gehen.

Da muss ich passen, ich hatte noch nie das Bedürfnis, Papier-Formate zu
exportieren...

--
Gruss
Jens
______________________________
FAQ: http://www.donkarl.com


Thomas Raasch

unread,
Apr 21, 2008, 5:44:09 AM4/21/08
to
Hi

>> Jedoch auch hierbei bleibt das Hauptproblem, dass ich keine eigene
>> Papiergröße angeben kann. Die Combo "Paper" lässt halt nur die
>> Standards wie A3, A4, ... zu.
>
> Das verstehe ich jetzt nicht ganz....
> Ich habe eben in den Servereigenschaften ein neues Formular erstellt - und
> dieses kann ich auch auswählen, wenn ich im Bericht auf Datei --> Seite
> Einrichten --> Seite --> Papier --> Größe gehe ( Access 03 ) ; es wird
> auch gespeichert, und ist unverändert nach einem Neustart der DB
> vorhanden.

Ja genau... das geht lokal sehr gut
Nur wenn man jetzt mit der DB an einen anderen PC geht - dort sei ein
baugleicher Drucker angeschlossen - und dann dort drucken will formatiert
Access wieder auf Standard-A4 um. Schade aber evtl. noch verständlich, da
dem PC das eigendefinierte Papierformat fehlt. Man braucht nichtmal
drucken - das ist bereits in der Vorschau zu erkennen (wenn das eigene
Papierformat sichtbar von A4 abweicht).

Jetzt könnte man meinen, es reicht an diesem zweiten PC ein gleichnamiges
Papier mit den gleichen Maßen anzulegen - aber nein! Das erkennt er nicht
automatisch.

Die "Lösung" wäre für jeden einzelnen PC eine PC-eigene Programmversion zu
bauen. Heißt ich müsste die MDB nehmen und auf jeden Ziel-PC kopieren (dort
nebens AccessRT noch ein richtiges Access installieren) und dort den Drucker
jedesmal neu einrichten und dann als MDE speichern. Und bei jedem Update des
Programms wieder dasselbe Spiel an jedem PC......
?!


Versuchs doch bitte mal an nem anderen PC...
Grüße
Thomas


Jens Schilling

unread,
Apr 21, 2008, 6:58:09 AM4/21/08
to
Hallo, Thomas

Thomas Raasch wrote:
> Nur wenn man jetzt mit der DB an einen anderen PC geht - dort sei ein
> baugleicher Drucker angeschlossen - und dann dort drucken will
> formatiert Access wieder auf Standard-A4 um.

Alles klar - nun hab' ich wohl verstanden ...

> Jetzt könnte man meinen, es reicht an diesem zweiten PC ein
> gleichnamiges Papier mit den gleichen Maßen anzulegen - aber nein!
> Das erkennt er nicht automatisch.

OK - das ist nichts, mit dem ich mich intensiver beschäftigt hätte, ich kann
daher nur versuchen, Dich ein einigen Links zum Thema zu unterstützen.

Hier ist ein KB-Artikel, der auf Dein Problem eingeht - ich denke, der
könnte helfen :

Drucken mit benutzerdefinierten Seitengrößen unter Windows NT und Windows
2000:
http://support.microsoft.com/default.aspx?kbid=282474

Bei Helen Feddema gibt es Folgendes zum Thema :

Using the Printer Object (Access Archon 131)
http://www.helenfeddema.com/access.htm

und da zu passend - wenngleich auch nur zur Info - die Liste der
Paper-Size-Konstanten
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbaac11/html/PaperSizeValues.asp

Hier gibt es Infos zum Umgang mit dem Printer Object und dem Page Dimensions
:

http://www.freevbcode.com/ShowCode.asp?ID=3646

Und hier geht's um das Thema "Vom Drucker unterstützte Papierformate
auslesen"

http://www.activevb.de/tipps/vb6tipps/tipp0185.html

Schau mal, ob Du darin was findest, was Dich weiterbringt.....

Thomas Raasch

unread,
Apr 21, 2008, 8:54:53 AM4/21/08
to
jo danke
ich arbeite mich mal durch

ich habe schon dies hier versucht:
http://support.microsoft.com/default.aspx?scid=kb;en-us;210283
jedoch klappt auch das nicht!
Er setzt zwar die Eigenschaften korrekt und speichert diese auch aber egal
was für eine PaperLength und Width ich eingebe - es kommt A4 raus


naja... ich klappere mal die Links ab

Grüße
Thomas


Jens Schilling

unread,
Apr 21, 2008, 9:21:32 AM4/21/08
to
Hall, Thomas

Thomas Raasch wrote:
> naja... ich klappere mal die Links ab

Ein' hab' ich noch :

http://pubs.logicalexpressions.com/pub0009/LPMArticle.asp?ID=132

Hmm, ein vorhandenes Format ändern und wieder zurücksetzen ..... ?

Thomas Raasch

unread,
Apr 22, 2008, 5:38:49 AM4/22/08
to
Hab eine Lösung gefunden:

man benötigt einen gleichen Druckernamen auf allen PCs sowie dasselbe
Papierformat (ebenfalls Namensgleich)

Kurzbeschreibung:
- man erstelle sein eigenes Papierformat in den Servereigenschaften unter
Drucker und Faxgeräte
- Im Code durchläuft man alle Papierformate die dem Drucker zur Verfügung
stehen (über API möglich)
- man suche sich anhand des Namens sein Papierformat raus und erhält darüber
die ID
- man setze das Papierformat per ID in einem Druckerobjektes
- man öffne den Bericht in der Vorschau (erstmal noch A4 oder ähnliches)
- man weise das veränderte Druckerobjekt zu (nun ist das Papierformat
geändert - aber nur in dieser Vorschau)
- man "öffne" den selben Bericht erneut zum Ausdruck (ohne die Vorschau
zuvor zu schließen)
- nach dem Schließen der Vorschau ist wieder alles beim Alten.. die
Einstellungen können nicht gespeichert werden

hier der Code (subDrucken mit entsprechenden Paras aufrufen...)

Private Sub subDrucken(strDruckerName As String, strBerichtName As String,
strPapier As String)
Dim prnDrucker As Printer

'Drucker des Reports auswählen
Set prnDrucker = Printers(strDruckerName)
'Papierformat im Druckerobjekt setzen
prnDrucker.PaperSize = fktGetPapierID(strDruckerName, strPapier)
'Bericht immer in Vorschau öffnen um Drucker zuzuweisen
DoCmd.OpenReport strBerichtName, acViewPreview
'Drucker für den Bericht auf das geänderte Druckerobjekt festlegen
Reports(strBerichtName).Printer = prnDrucker
'falls Sofortdruck den angezeigten Bericht ausdrucken
If cboAusgabe = acViewNormal Then 'cboAusgabe ist eine Combo wo
der Benutzer zwischen "Vorschau" und "Ausdruck" wählen kann
'den geöffneten Bericht drucken
DoCmd.OpenReport strBerichtName, acViewNormal
'den Bericht schließen
DoCmd.Close acReport, strBerichtName, acSaveNo
End If
End Sub

Public Function fktGetPapierID(strNameDrucker As String, strNamePapier As
String) As Integer
Dim prnDrucker As Printer
Dim i As Integer
Dim intPapierAnzahl As Integer
Dim strPapier As String
Dim strPapierNamen As String
Dim aintPapierID() As Integer

Const DC_PAPERS As Long = 2&
Const DC_PAPERNAMES As Long = 16&

'Drucker auswählen
Set prnDrucker = Printers(strNameDrucker)

'Anzahl an Papiersorten herausfinden
intPapierAnzahl = DeviceCapabilities(prnDrucker.DeviceName, _
prnDrucker.Port, _
DC_PAPERS, _
ByVal vbNullString, _
0)
'Variablen neu dimensionieren
ReDim aintPapierID(1 To intPapierAnzahl)
strPapierNamen = String$(64 * intPapierAnzahl, 0)
'PapierIDs herausfinden
intPapierAnzahl = DeviceCapabilities(prnDrucker.DeviceName, _
prnDrucker.Port, _
DC_PAPERS, _
aintPapierID(1), _
0)
'PapierNamen herausfinden
intPapierAnzahl = DeviceCapabilities(prnDrucker.DeviceName, _
prnDrucker.Port, _
DC_PAPERNAMES, _
ByVal strPapierNamen, _
0)
'Papiere durchlaufen
For i = 1 To intPapierAnzahl
strPapier = Mid(strPapierNamen, 64 * (i - 1) + 1, 64)
If Left(strPapier, Len(strNamePapier)) = strNamePapier Then
'Rückgabe der ID
fktGetPapierID = aintPapierID(i)
Exit For
End If
Next i
End Function

Declare Function DeviceCapabilities Lib "winspool.drv" _
Alias "DeviceCapabilitiesA" ( _
ByVal lpDeviceName As String, _
ByVal lpPort As String, _
ByVal iIndei As Long, _
lpOutput As Any, _
ByVal dev As Long) _
As Long


Der Code entstammt aus eigener Feder und auf Hilfe und Anregung der in
diesem Thread aufgeführten Links.
Grüße
Thomas


Karl Donaubauer

unread,
Apr 22, 2008, 6:15:42 AM4/22/08
to
Thomas Raasch wrote:
> Hab eine Lösung gefunden:
>
> man benötigt einen gleichen Druckernamen auf allen PCs sowie dasselbe
> Papierformat (ebenfalls Namensgleich)
>
> Kurzbeschreibung:
> - man erstelle sein eigenes Papierformat in den Servereigenschaften unter
> Drucker und Faxgeräte
> - Im Code durchläuft man alle Papierformate die dem Drucker zur Verfügung
> stehen (über API möglich)
> - man suche sich anhand des Namens sein Papierformat raus und erhält
> darüber die ID
> - man setze das Papierformat per ID in einem Druckerobjektes
> - man öffne den Bericht in der Vorschau (erstmal noch A4 oder ähnliches)
> - man weise das veränderte Druckerobjekt zu (nun ist das Papierformat
> geändert - aber nur in dieser Vorschau)
> - man "öffne" den selben Bericht erneut zum Ausdruck (ohne die Vorschau
> zuvor zu schließen)
> - nach dem Schließen der Vorschau ist wieder alles beim Alten.. die
> Einstellungen können nicht gespeichert werden
>
> hier der Code (subDrucken mit entsprechenden Paras aufrufen...)
> ...

Nur als Bestätigung:

Ich mache das seit Jahren nach dem gleichen Verfahren und
mit ähnlichem Code. Habe also auch nix einfacheres gefunden
als diese Bastelei.

--
cu
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com
+ Entwickler-Konferenzen für Access und SQL Server

0 new messages