drflorian
Goto Top

VB Script fuer Datensatzdruck aus Serienbrief

Ich benoetige ein VB Script bzw Macro das Datensaetze eines Serienbriefs seperat an den Drucker sendet

Hi,

das Problem habe ich bereits im Word Forum stehen jedoch passt es vielleicht ein wenig besser zu den Spezis hier face-smile.
Wenn jmd den vollen Hintergrund wissen moechte:
Word 2003 Serienbrief seperater Datensatzdruck fuer Drucker-Heftfunktion

Das Macro soll in der Lage sein ein neues Dokument was aus einem Serienbrief erstellt wurde so an den Drucker zu senden das dieser die einzelnen Datensaetze heften kann und nicht ALLE Seiten die gedruckt werden heftet.

Problem dabei ist das Word alle Seiten als einen Druckauftrag abschickt. Leider fehlen mir die Kenntnisse um selber ein solchen Macro zu schreiben. Ich versuche mich grad ein wenig in das Thema einzulesen und habe diesen Unfug gebaut:


Sub mergeMailStaple()

Dim i As Long
Dim datensaetze As Integer

Console.Write ("Wie viele Datensaetze werden gedruckt ?") *
datensaetze = Console.Readline()

With ActiveDocument
For i = 1 To datensaetze
.PrintOut Range:=wdPrintFromTo, From:="s" & i, To:="s" & i
Next i
End With

End Sub


Jedoch weiss ich zum einen nicht ob Word ueberhaupt eine Eingabe erlaubt und wenn ja kann man sicherlich nur einen String aus der Eingabe ziehen und muss den umwandeln ? Jedenfalls gibt er Fehler 424 Object Required aus und meckert die Zeile mit dem Sternchen an.

Selbst wenn das ganze funktionieren wuerde hab ich immernoch keinen Schimmer was die Zeile bewirkt:

.PrintOut Range:=wdPrintFromTo, From:="s" & i, To:="s" & i

Wenn das jmd erklaeren koennte waere mir auch schon einmal sehr geholfen face-smile


Gruss
Florian

Content-ID: 82533

Url: https://administrator.de/contentid/82533

Ausgedruckt am: 20.11.2024 um 04:11 Uhr

Supaman
Supaman 07.03.2008 um 10:37:24 Uhr
Goto Top
eine lösung habe ich nicht, aber einen ansatz den du prüfen kannst. alle druckparameter lassen sich normalerweise über pcl-steuer codes übermitteln, z.b. benutze das fach X als ppaierkassette, duplex, heften, grafikqualität etc.

meistens hat so eine steuersequenz das format (ESC) (Funktion) oder (ECS) (Funktion) (Wert).

müsstest du noch rausknoblem, wie man solche steuersequenzen in ein word dockument einbindet face-smile
DrFlorian
DrFlorian 07.03.2008 um 10:49:25 Uhr
Goto Top
Danke fuer die schnelle Antwort. Das Problem dabei ist vermutlich, mal abgesehen davon das ich mir PCL Befehle bzw einen Druckauftrag erst einmal wirklich angeguckt habe, das ich einen automatischen (oder mit Eingabeaufforderung Halbautomatik face-smile) Ablauf benoetige.

Bei dem Serienbrief handelt es sich um einen internen Newsletter der woechentlich gedruckt wird und bei dem die Seitenzahl woechentlich variieren kann.

Ich hasse ein gewisses Unternehmen aus Redmond dafuer das so eine simple Funktion nicht integriert ist >(. Kann ja nicht so schwer sein Serienbriefe seperat an den Drucker zu senden damit der sie ordentlich abarbeiten.

Ich sehe schon wie sich dieser Mist in die Laenge ziehen wird face-smile


Gruss
Florian

edit:
Selection.Information(wdNumberOfPagesInDocument)
Habe ich fuer die Gesamtanzahl der Seiten schonmal gefunden
edit2:
ich glaube das gibt sogar den 2. Wert aus also brauche ich noch etwas fuer die Gesamtanzahl an Seiten, leider finde ich da nichts
pacobay
pacobay 07.03.2008 um 15:30:28 Uhr
Goto Top
Hallo Florian,

also bin auch nicht immer Fan der Redmonder,
und bin kein besonders aktiver VBA-ler sondern VBScriptler.

Doch habe ich den Eindruck du hast Dich da etwas verlaufen und
die Redmondern sind hier gar nicht so böse.

Sorry nichts für ungut denn back to the roots:
Eigentlich geht es Dir bzw. Deiner Kollegin) ja schlicht darum,
daß der einzelne Sereienbrief auch einzeln geheftet wird.
Alles andere ist nur ein Versuch des Workarrounds.

Zumindest habe ich das so verstanden.
Sollte ich da falsch liegen, dann pls einfach mir nochmal erklären


Im Prinzip ist dann doch die Lösung ganz einfach.
Du erstellst gar keine Riesendatei mit allen Serienbriefen -
sondern jeweils einen Serienbrief nach dem anderen und
sendest ihn dann einfach einzeln an den Drucker (mit entsprechendem Heftauftrag).
Und diese Möglichkeit haben die Remonder auch gegeben.

Vereinfachend wäre:
Du könntest der Kollegin noch einen virtuellen Drucker einrichten "HefteMeinenAusdruck" .

Also schlicht eine Kopie des Druckers der heften kann
der dann von vornherein so eingestellt ist, daß er alle alle Ausdrucke heftet.

Dann bräuchtest Du nur noch den jeweiligen Druckauftrag an "HefteMeinenAusdruck"
zu senden und brauchst dich nicht um irgendwelchen Druckerzeichen (Esc etc )
zu kümmern.

Hilfreich könnte da sein ein kleiner google mit: Mail Merge vba word

Dies gibt dir u.A. Hilfe von den bösen Redmondern face-wink wie denn
Serienbriefe (Mail Merge) denn mit Scripten laufen

Mail Merge: Part I
http://msdn2.microsoft.com/en-us/library/aa140183.aspx

Mail Merge: Part II
http://msdn2.microsoft.com/en-us/library/aa140197.aspx


ciao pacobay

Übrigens ist es i.A. sowieso besser nicht riesige Druckdateien zu erstellen
sondern einzelne kleinere.
Je nach Umfang und Inhalt des Serienbriefes kannst du sonst so manchen
Drucker mit einer fetten SB-Datei in die Knie zwingen.

Schnell mal 1000 Kundeninfos mit den neusten Photos des Produktes
und du produzierst richtig Freude am Drucker.

By the way es ist sinnvoll die Druckaufträge mit einer kleinen fortlaufenden Nummer
zu versehen (z.B. DatensatzNr +1000). Dann kannst Du auf dem Ausdruck auch schnell nachvollziehen welche Ausdrucke / Datensätze denn (von dem nach Murhys LAW unweigerlich eintretenden) Papierstaus & Klammern zu Ende & falsche Papier etc betroffen sind.
DrFlorian
DrFlorian 10.03.2008 um 08:10:39 Uhr
Goto Top
Hi,

natuerlich waere es moeglich jeden Datensatz in ein eigenes Dokument zu ziehen und dann einzeln an den Drucker zu senden. Nur hoert es sicherlich nach 10 Stueck auf Spass zu machen, grade wenn man weiss das noch 200+ vor einem liegen. Prinzipiell ist es ja mit dem Macro kein Problem, dumm nur das es die Seiten nicht richtig einteilt face-sad

Gruss
Florian
DrFlorian
DrFlorian 10.03.2008 um 12:05:26 Uhr
Goto Top
Hi,

habe ein wenig hin und herprobiert und bin fast vor der Loesung. Eigentlich benoetige ich nur 1 Wert den ich nicht ohne Usereingriff bekommen kann da die Newsletter unterschiedliche Anzahlen von Sektionen pro Datensatz haben.

Kurz gesagt:
Ist es moeglich eine EIngabeaufforderung im Makro einzubauen ? Der Wert wird eine runde Zahl also meinetwegen Integer sein.

Bitte schreibt nicht das dies nicht moeglich ist face-smile


Gruss
Florian

edit:

ich glaube ich habe es nun geschafft face-smile. Sicherlich haette man das Script nicht umstaendlicher schreiben koennen aber meine Guete ist halt das erste mal das ich sowas mache. Hier mein Prachtexemplar:

Sub merge()
'
' merge Macro
' Macro created 3/6/2008 by Florian
'

Dim datensaetze As Integer
Dim i As Integer
Dim printEnd As Integer
Dim printStart As Integer
Dim sections As Integer

datensaetze = InputBox("Wieviele Datensaetze werden verwendet ?")

printEnd = ActiveDocument.sections.Count \ datensaetze 'Variable fuer Endsektion jedes Druckvorgangs
sections = ActiveDocument.sections.Count \ datensaetze 'Variable fuer Sektionen pro Datensatz
printStart = 1

With ActiveDocument

For i = 1 To datensaetze

ActiveDocument.PrintOut Range:=wdPrintFromTo, From:="s" & printStart, To:="s" & printEnd 'Hier wird jeder Datensatz seperat zum Drucker gesandt
printStart = printStart + sections 'Zaehler fuer Startsektion des naechsten Datensatzes
printEnd = printEnd + sections 'Zaehler fuer Endsektion des naechsten Datensatzes

Next i

End With

End Sub


Wenn Euch Verbesserungsvorschlaege einfallen nur her damit !

Florian
pacobay
pacobay 10.03.2008 um 13:41:09 Uhr
Goto Top
Hallo Florian

Wie ich zwischenzeitlich gesehen habe, bist Du aber auch wohl auf anderem Wege vorangekommen. Hier ein Beispiel für eine einfache Inputbox . Ggf. sollte hier noch eine Überprüfung des Inputs bezüglich ist integer erfolgen.

Dim strREQUESTs, strTITELs, defStrINPUTs, strVALUATIONb, strInputr
  
  
Sub MyInBox()

     strREQUESTs = "Beispiels-Eingabeaufforderung"  
     strTITELs = "Beispiels-Meldungstitel im Script festgelegt"  
     defStrINPUTs = "Beispiels-Vorgabe-Eingabe-String"  
  
     strInputr = InputBox(strREQUESTs, strTITELs, defStrINPUTs) ' die Inputbox  

    MsgBox ("Der Rückgabewert/strInputr:" & Chr(9) & Chr(9) & strInputr & Chr(13))  
End Sub      'MyInBox  



Ich hatte währenddessen noch an der Antwort auf Dein Feedback geschrieben. Da dies im Prinzip trotdem noch gültig ist lasse ich es einfach dabei.

Aber wie immer Du nun auch vorgehen wirst: Viel Erfolg!

ciao pacobay

natuerlich waere es moeglich jeden Datensatz in ein eigenes Dokument zu ziehen und dann einzeln an den Drucker zu senden.

Also wenn dies mein Lösungsvorschlag wäre, empfände ich diesen auch als wenig sinnvoll.
Und das wäre noch eine sehr gelinde Ausdrucksweise. face-wink

Prinzipiell ist es ja mit dem Macro kein Problem, ...

Aber wie Du ja bereits angemerkt hast, ist dies durch den Einsatz entsprechender Macros/Scripte nicht notwendig.

Jedoch merkst Du an, dass dann ein weiteres Problem auftaucht:
dumm nur das es die Seiten nicht richtig einteilt

Wenn ich Dich richtig verstehe, wäre es für Dich grundsätzlich kein Problem das Erstellen des jeweiligen Dokumentes und dessen Senden an den Drucker via Script/Macro zu automatisieren. (Möglicherweise könnte Dir die Verwendung der von mir angeführten Quellen dies noch vereinfachen.)

Weiterhin verstehe ich Deine Aussagen dergestalt, dass Du bisher über diesen Weg keine zufriedenstellenden Ergebnisse erzielen konntest, bzw. Du es bisher diesen Weg noch nicht versucht hast. Und Du dies wegen des festgestellten bzw. befürchteten Problems mit dem scheinbar willkürlichen Seitenumbruch zurückführst..

Ein entsprechender Makro bzw. Script nimmt jedoch einfach nur die entsprechende Vorlage, füllt die Merge-Felder mit den jeweiligen Daten des Datensatzes und sendet diesen an den Drucker.
Und im allgemeinen ist der Seitenumbruch keine Folge des Macros/ Scriptes sondern die Folge der Gestaltung der Serienbriefvorlage. Genauer gesagt ergibt sich der Seitenumbruch aus den diesbezüglichen Einstellungen der Vorlage und aus den unter Umständen stark unterschiedlichen Datensatzinhalten.

Bei einem einfachen Serienbrief mit Adresse, Anrede dürfte dies zu keiner wesentlichen Veränderungen führen und könnte durch z.B. einen gezielten Abschnittswechsel mit Seitenumbruch abgefangen werden. Sofern jedoch via Mergefelder unterschiedlich umfangreiche empfängergruppenspezifische Textpassagen eingefügt werden, dann wäre entsprechender „Vorsorgeaufwand“ natürlich auch umfangreicher.

Da ich aber zu wenig über die Art Eurer Serienbriefe weiß, ging dies zu sehr in Richtung Spekulation. Hier wären ggf. zusätzliche Infos hilfreich: Betriebssystem, Wordversion,
Art der Datenquelle. Sowie Infos bezüglich: Wie erfolgt der Zugriff auf die Datensätze (u.U. Info’s wie erfolgt deren Selektion.) Ein Beispiel für entsprechenden Serienbrief, Art und Umfang der Daten die eingefügt werden.

Mit solchen Infos wäre dann eine spezifischere Problemlösung möglich.

ciao pacobay
DrFlorian
DrFlorian 10.03.2008 um 14:34:15 Uhr
Goto Top
Hi,

ich wollte nicht die Vermutung aufkommen lassen das ich deinen Beitrag nicht wuerdige jedoch haben die Links nicht sonderlich weitergeholfen da diese sich eher mit der Erstellung und Bearbeitung eines Serienbriefs befassen und nicht mit dem drucken an sich.

Die Textaufforderung habe ich ueber Google doch noch in Erfahrung bringen koennen und ist als Einzeiler auch uebersichtlich face-smile

Wie gesagt handelt es sich bei dem Serienbrief um einen Newsletter der in Seitenanzahl und auch in Sektionen variiert. Dies laesst sich jedoch nicht vermeiden. Das Problem war einfach nur das ich letzte Woche gar keine Ahnung von VB hatte und mich da irgendwie reinlesen musste, zugegebenermassen war ich auf der Suche nach eine copy & paste Loesung fuer mein Problem. Im Nachhinein ist es jedoch besser sich selber ein wenig damit befasst zu haben.

Die Funktion sollte problemlos gegeben sein und jeder der sowas sucht, versucht es aus face-smile (Bevor das Script genutzt wird muessen die Datensaetze in ein neues Dokument eingefuegt werden und hier wird der Standard Drucker mit aktuellen Einstellungne verwendet. Sicher kann man auch Druckerauswahl usw ins Script packen, ich bin aber erstmal froh das es soweit laeuft).

Da der erste Grossdruck Freitag ansteht halte ich meine Freude dennoch erstmal in Grenzen.


Nur ein paar Kleinigkeiten an dich paco:
- Ich hab nie von willkuerlichen Umbruechen gesprochen mir war aber anfangs nicht bewusst das dies eigentlich der einzige Knackpunkt ist
- fragen stellen wenn die Beschreibung nicht genau genug ist (ich geb mir ja muehe :D)
- Ich habe sicherlich alles versucht was ich konnte
- Lediglich die Word Version stand im verlinkten Thread, dem OS habe ich so oder so keine grosse Bedeutung zugesprochen (handelt sich um Win XP Pro SP2)


Gruss
Florian
pacobay
pacobay 10.03.2008 um 17:08:04 Uhr
Goto Top
Hallo Florian,

Bin mir nicht ganz sicher ob mein Eindruck überhaupt zutreffend ist,
aber sollte ich Dir irgendwie auf den Schlips getreten haben,
so lag dies gewiss nicht in meiner Absicht.

Auch ist mir nicht klar wann, wieso, warum bzw. wodurch.
Aber im Zweifelsfalle: Ausrückliches Sorry & peace!


ich wollte nicht die Vermutung aufkommen
lassen das ich deinen Beitrag nicht wuerdige

Es führen sicherlich viele Wege nach Rom, und wenn Dir ein anderer Weg (als der von mir vorgeschlagene Weg) als der für Dich geeigneter Weg erscheint, dann habe ich kein Problem damit. face-smile

jedoch haben die Links nicht sonderlich
weitergeholfen da diese sich eher mit der
Erstellung und Bearbeitung eines Serienbriefs
befassen und nicht mit dem drucken an sich.

Ich hatte einfach den Eindruck gewonnen, dass Du eine Lösung für ein Problem suchst,
dass im Zweifelsfalle gar nicht auftaucht bzw einfach vermeidbar ist.

Daher wollte Dir nur aufzeigen, dass es Dir ganz einfach möglich ist
den jeweiligen Datensatz auch einzeln an den Drucker zu senden.
Folglich auch kein Problem mit dem Heften eines einzelnen Dokumentes
und daher auch Überlegungen wie man das Dokument wieder auseinander
bekommt bzw. unterteilt einfach unnötig sind.

Sprich Serienbrieferstellung via den in den Links dargestellten Wegen,
umgehen das Druckproblem von vornherein.

Aber wie auch immer, scheinbar hast Du nun ja auch eine Lösung
und der Käs ist wohl gegessen.

ciao pacobay
mat-schweiz
mat-schweiz 29.09.2008 um 11:10:04 Uhr
Goto Top
habe genau das selbe problem... leider klappt mit dem vb script von florian nicht face-sad ich warte vergebens auf eine aufforderung zur eingabe der anzahl datensätze oder so... vielleicht könnt ihr mir helfen? oder florian direkt face-smile vielen dank.