Positionierung von Objekten auf den Millimeter

Hallo zusammen,

hab’ einen Rechnungsvordruck auf diesen noch ein paar Daten wie Rechnungsbetrag, Datum, Rechnungsnummer etc. eingesetzt werden müssen. Da Excel 2000 gleich den Rechnungsbetrag anhand der Einzelposten ausrechnen könnte, wollte ich das gleich damit erledigen. Nur leider ist es aufgrund der Zellen sehr schwierig die Positionen auf dem Vordruck korrekt zu treffen.

Kenn ihr da einen Trick?

Gruß

hab’ einen Rechnungsvordruck auf diesen noch ein paar Daten
wie Rechnungsbetrag, Datum, Rechnungsnummer etc. eingesetzt
werden müssen. Da Excel 2000 gleich den Rechnungsbetrag anhand
der Einzelposten ausrechnen könnte, wollte ich das gleich
damit erledigen. Nur leider ist es aufgrund der Zellen sehr
schwierig die Positionen auf dem Vordruck korrekt zu treffen.
Kenn ihr da einen Trick?

Hi Alex,

nicht so einfach, Excel ist grad bei der waagrechten Positionierung sehr schwierig.
Vertikal zu positionieren ist einfacher.

Was du suchst, da ja Geldbeträge normalerweise rechtsbündig untereinander geschrieben werden, ist eine Anweisung an Excel, schreibe mir den Betrag „21.345,07 €“ so hin daß das Eurozeichen 15 cm vom linken Rand des Blattes aus gemessen erscheint, und alle anderen Beträge genauso.

Mein Tipp dazu ist, schreibe die Beträge rechtsbündig in Spalte B, verändere die Spaltenbreite von A solange bis es passt.
Sicher, kostet einige Probeausdrucke, aber ist m.E. die schnellste und beste Variante.

Gruß
Reinhard

Hallo Alex.

Das Problem hatte ich auch schon. Es ist wirklich die Hölle. Ich hatte mir dann einfach damit beholfen, daß ich sehr viele Spalten für ein Blatt verwendete, also fast wie damals in der Schule, als man noch auf kariertem Papier geschrieben hat.

Du könntest z.B. alle Spaltenbreiten auf, sagen wir mal, 10 Pixel festlegen und dann hin- und herprobieren, bis es paßt. Ich weiß, das ist echter Nervkram, das Ergebnis sollte aber durchaus zufriedenstellend sein.

Am allerbesten wäre natürlich, eine eigene Druck-Prozedur zu programmieren, aber ich glaube in Excel-VBA hat man keinen Zugriff auf das Printer-Objekt.

Viele Grüße
Carsten

Grüezi Alex

hab’ einen Rechnungsvordruck auf diesen noch ein paar Daten
wie Rechnungsbetrag, Datum, Rechnungsnummer etc. eingesetzt
werden müssen. Da Excel 2000 gleich den Rechnungsbetrag anhand
der Einzelposten ausrechnen könnte, wollte ich das gleich
damit erledigen. Nur leider ist es aufgrund der Zellen sehr
schwierig die Positionen auf dem Vordruck korrekt zu treffen.

Kenn ihr da einen Trick?

Ums Ausprobieren herum kommst Du da wohl kaum bis es perfekt passt.
Wichtig sind hier auch die Seitenränder im Druck-Dialog und der Drucker-Treiber. Je nach Drucker kann das Ergebnis wieder ganz anders aussehen.

Aber vielleicht hilft dir das folgende kleine AddIn noch etwas weiter, das zwei neue Buttons in eine Symbolleiste erstellt mit denen Du die Abmessungen der Zellen in Zentimetern vorgeben kannst.

http://users.quick-line.ch/ramel/Files/Spalte-Zeile_…

Je nach Drucker und in Excel eingestellter Standard-Schriftart kann sich hier noch eine kleine Verschiebung bemerkbar machen; dies kannst Du durch eine Anpassung des Korrekturfaktors im Code ggf. angleichen. In den meisten Fällen passt es IMO aber recht gut.

Mit freundlichen Grüssen
Thomas Ramel

  • MVP für Microsoft-Excel -
    [Win XP Pro SP-2 / xl2003 SP-3]

Hallo Carsten,

Das Problem hatte ich auch schon. Es ist wirklich die Hölle.
Ich hatte mir dann einfach damit beholfen, daß ich sehr viele
Spalten für ein Blatt verwendete, also fast wie damals in der
Schule, als man noch auf kariertem Papier geschrieben hat.
Du könntest z.B. alle Spaltenbreiten auf, sagen wir mal, 10
Pixel festlegen und dann hin- und herprobieren, bis es paßt.
Ich weiß, das ist echter Nervkram, das Ergebnis sollte aber
durchaus zufriedenstellend sein.

die Nervenbelastung kann man minimieren und die Anzahl der Ausdrucke auch wenn man Vba mit dazu benutzt.
Letztlich geht dann Vba den gleichen Weg wie du, also viele kleine Zellen und dort dann jenachdem die Höhen oder Breiten variieren.
Es ist echt arbeitserleichternd.

Am allerbesten wäre natürlich, eine eigene Druck-Prozedur zu
programmieren, aber ich glaube in Excel-VBA hat man keinen
Zugriff auf das Printer-Objekt.

Was genau meinst du damit, einen Druckertreiber selbst schreiben?

Man kann auch direkt auf dem Drucker schreiben.
Hier wr mal die Anfrage wie man das macht wenn man da Endlospapier eingelegt hat und auf dem Drucker soll alle 2 Minuten in ein zwei Zeilen irgendwa mitprotokolliert werden.
Das ging recht einfach mit Vba zu lösen. Man braucht ja dazu nur die Druckersteuercodes für CR, LF.
hat man eine Liste aller Steuercodes für den speziellen Drucker kann man auch positionieren wo man will, man muß sich da nur in die Materie einarbeiten und rausfinden mit welcher Einheit, Punkt,pixel,sonstwas der Drucker positionieren kann und um dann die entsprechenden Positionierungsdaten schicken.
Logo kommen dazu noch die üblichen Problematiken wie Schriftart, proportinal oder nicht, Fettdruck, Kursiv, dpi u.v.m.

Gruß
Reinhard

Hallo Reinhard

Was genau meinst du damit, einen Druckertreiber selbst
schreiben?

Eine Druck- Prozedur

Man kann auch direkt auf dem Drucker schreiben.

Hier weiß ich aber nicht, wie das mit VBA geht. Ich habe das noch nie hinbekommen. Wie geht denn das. Ich kann einen Drucker nur mit VB6 ansprechen. Gib’ mir doch mal einen Beispiel-Code für VBA.

Ansonsten ist es in VB6 sehr leicht, eine Druck-Prozedur zu schreiben, es ist eben nur seeeeehr umfangreich. Aber die Arbeit lohnt sich, denn das Ergebnis ist absolut perfekt.

Vielleicht kann man ja in VB6 ein AddIn für Excel schreiben. Ich habe so etwas auch schon mal versucht, aber es ist kläglich gescheitert. Dafür bin ich dann wohl doch zu untalentiert :frowning:

Viele Grüße
Carsten

Danke, noch eine Frage!
Die Höhe oder Breite von Zeilen bzw. Spalten wird in Excel XP als Pixel angegeben. Wieviele Pixel sind denn ein cm?

Gruß

Grüezi Alex

Die Höhe oder Breite von Zeilen bzw. Spalten wird in Excel XP
als Pixel angegeben. Wieviele Pixel sind denn ein cm?

Das hängt ganz von der verwendeten Standard-Schriftart ab.

…aber wenn Du das verlinkte AddIn verwendest, stellt sich das Problem IMO nicht mehr?


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Carsten,

Was genau meinst du damit, einen Druckertreiber selbst
schreiben?

Eine Druck- Prozedur

sorry, mir noch unklar. Ich gehe davon aus

Private Sub Workbook_BeforePrint(Cancel As Boolean)
End Sub

kennst du, da kann man natürlich leicht Cancel auf True setzen und dann selbst festlegen was an den Drucker geschickt wird.
Das meinst du aber irgendwie nicht *glaub*

Man kann auch direkt auf dem Drucker schreiben.

Hier weiß ich aber nicht, wie das mit VBA geht. Ich habe das
noch nie hinbekommen. Wie geht denn das. Ich kann einen
Drucker nur mit VB6 ansprechen. Gib’ mir doch mal einen
Beispiel-Code für VBA.

Habe ich probiert, möglicherweise ist der damalige Code mitsamt der damals abgestürzten Festplatte im Nirwana, jedenfalls fand ich da nix.
Die Suchmöglichkeiten von w-w-w im Archiv gefallen mir sowieso nicht, nochdazu weiß ich ja gar nicht mehr den damaligen Betreff.

Noch dazu habe ich einen anderen Drucker als damals, dem habe ich derart Befehle geschickt:

For n=1 to 20
x=shell(„cmd /c echo huhu " & chr(13) & " >LPT1“)
next n

Das habe ich jetzt grad so hingeschrieben, Syntax kann also falsch sein. Das klappte irgendwie, der Drucker fing an zu blinken und bei Druck auf die, ich sag mal Fehlerbereinigungstaste dazu, schob er auch das Blatt aus und immerhin, einmal huhu war gedruckt.

Nur „damals“, als mit dem Code von mir, hat der Drucker permanent „mitgeschrieben“, nicht nur einmal.

Ein problem ist auch, daß ich nicht mehr weiß ob ic damasl den Shell-befehl benutzt und wenn ja, wie, wenn nein, was nahm ich dann *grübel*

Und mein Code um selbst Volltext im w-w-w Archiv zu suchen ist noch nicht fertig und das ruht auch derzeit, u.a. auch deshalb weil ich durch Mails mit Teammitgliedern erfahren habe daß die vorhaben da am grundsätzlichen innerbetrieblichen Seitenaufbau von w-w-w etwas grundlegend abzuändern.

Nun habe ich von html keine Ahnung, ich schaffs grad so mittels Code aus dem Internet, eine „feste“ html-Seite auszulesen, dort untergeordnete html-Seiten zu finden und diese dann auch auszulesen.

Dies auch nur dann wenn ich bei w-w-w eingeloggt bin.

Es gelang mir schon, z.B. dieses Brett auszulesen wer, also emialadresse, Name, Betreff, Uhrzeit gerade hier aktuell etwas geschrieben hat. dann noch dem Unterlink zu folgen und auszulesen ist dann kein Problem und ich könnte eine Volltextsuche starten.

Wie gesagt das klappt bei „festen“ Html-Seiten, „dynamische“ html-Seiten, da versagt aller VBa-Code den ich habe, dynamisch ist z.B. der hiesige Chat oder auch andere Chats benutzen da irgednwelche Tricks um die Verbindung offen zu halten und daran hängen sich meine Codes auf.

Wenn es dich interessiert weil es ja um Vba geht dann noch das Folgende, und Ahnung habe ich von Webprogrammierung Null, kann sein, eher es wird so sein, ich benutze die falschen Begriffe.

„Normalerweise“ liest man Webseiten so aus, man startet einen Browser mit
Set AppIE=CreateObject(„internetExplorer.application“)
dann navigiert man zu einer Seite:
AppIE.Navigate „http://www.wer-weiss-was.de
dann weiß man ja nicht wie lang das dauert, die Verbindung kann ja hängen, also macht man:
While appIE.busy=True
’ Zur Not noch hier eine pause für eine Sekunde einbauen um nicht die perfomance des Rechners plattzumachen
Wend

Und genau an diesem Punkt versagen alle meine Codes, weil z.B. Chatseiten immer „busy“ sind.

Normale „feste“ Webseiten nicht, in dem Moment wo ich den Code starte wird eine Internetverbindung zu der Webseite aufgebaut, solange ist „busy“ auf True.
Ist der Verbindungsaufbau abgeschlossen ist „busy“ auf falsch und ich kann die Webseite auslesen.

Wenn nun aber das Team den Aufbauu der Webseiten abändert, mit php oder was es da sonst noch so alles an Webseitenprogrammen gibt so ist es sehr fraglich ob meine Codes überhaupt noch etwas auslesen können, also warte ich da erstmal ab.

Mist, bin wieder gewaltig vom Ausgangsthema abgewichen, Verzeihung :smile:

Ansonsten ist es in VB6 sehr leicht, eine Druck-Prozedur zu
schreiben, es ist eben nur seeeeehr umfangreich. Aber die
Arbeit lohnt sich, denn das Ergebnis ist absolut perfekt.

Oh, zeige doch mal so einen Code, hab zwar nur VB5.0 und da läuft manches von VB6.0 nicht, aber wie er aussieht würde mich schon interessieren.

Vielleicht kann man ja in VB6 ein AddIn für Excel schreiben.
Ich habe so etwas auch schon mal versucht, aber es ist
kläglich gescheitert. Dafür bin ich dann wohl doch zu
untalentiert :frowning:

Schnickschnack, die mathematik sagt doch eindeutig, zwei Untalentierte zusammen malgenommen ergeben Talentiert oder hab ich da was falsch verstanden bei -1*-1 *grins*

Zur Not müssen uns Rainer und Anno74 vom VB-Brett mal kurz mit 200 Zeilen Code aushelfen *lächel*
Und es gibt auch sehr nette Schweizer hier und Thomas wird das Ganze sicher locker lösen, vielleicht mit einer Arrayformel in einer Pivottabelle oder so *kicher*

PS. Ja, daß ich nix von Pivottabellen weiß liegt an meiner Faulheit die überhaupt mal zu benutzen. Mit den Arrayformeln ist das was anderes, zwar ähnlich gelagert, ich she eine Arraformeln oder gar Erklärungsseiten wie die funktionieren und schließe in einem automatischen Reflex sofort die Webseite*gg*
Aber zu Weihnachten habe ich mir das Zauberbuch von den Excelformeln.de Jungs bestellt, das werde ich lesen, vielleicht machts dann mal „Klick“ was es mit den Mistdingern auf sich hat.
Sehr brauchbar scheinen sie ja zu sein wenn man in einer Firma arbeitet wo keine Makros erlaubt sind.

Gruß
Reinhard