Autor Thema: Serienbriefe in Word datensatzweise drucken  (Gelesen 6579 mal)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Serienbriefe in Word datensatzweise drucken
« am: 18.12.02 - 14:57:58 »
Hallo Leute,

und wieder ein klitzeklitzekleines Problem (hüstel)

Ich erstelle einen Serienbrief, möchte aber nicht den kompletten
Serienbrief auf einmal, sondern immer nur Datensatzweise.

Aber irgendwie springt er nicht in den nächsten Datensatz.

Hier ein Codeauszug :


MyWordDoc.MailMerge.DataSource.ActiveRecord = wdFirstRecord
Do While iAlterRecord <> iNeuerRecord
   iRepetition = 0
         
   word.ActivePrinter = "Print-2-Image"
   Call myworddoc.PrintOut(False, , , , , , , 1)
   word.Applikation.FileName ="test777.tif"
   worddoc.saveas("c:\temp\test.doc")
   iAlterRecord =1

   MyWordDoc.MailMerge.DataSource.ActiveRecord = wdNextRecord   
Loop   



jemand eine idee ?


Ciao

Don Pasquale
« Letzte Änderung: 20.12.02 - 12:00:18 von Don Pasquale »

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Serienbriefe in Word
« Antwort #1 am: 18.12.02 - 15:02:13 »
... du beziehst dich mit While auf eine Bedingung, vielleicht ist die ja erfüllt...

ata
Grüßle Toni :)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Serienbriefe in Word
« Antwort #2 am: 19.12.02 - 10:16:33 »
Hi ata,
ich habe mich vielleicht ungeschickt ausgedrückt,

diese Beiden Zeilen scheinen ohne Funktion zu
sein:
MyWordDoc.MailMerge.DataSource.ActiveRecord = wdFirstRecord
MyWordDoc.MailMerge.DataSource.ActiveRecord = wdNextRecord
und folgendes :
Messagebox  ( Cint MyWordDoc2.MailMerge.DataSource.ActiveRecord)         )

ergibt ein Variant does not Contain Object.

Nun sind mir die Methoden der Word.Applikation
einfach nicht geläufig.

Was tun ?

ratlos

Don Pasquale

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Serienbriefe in Word
« Antwort #3 am: 19.12.02 - 10:26:39 »
... du arbeitest mit Word-Konstanten, sind die deklariert worden?...

ata
Grüßle Toni :)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Serienbriefe in Word
« Antwort #4 am: 19.12.02 - 12:41:24 »
So sieht das Skript bisher aus:

[
.
.
.
]
Code
Dim word As Variant    
Dim WordDoc1 As Variant      
Dim WordDoc2 As Variant   
Dim object As Variant
Dim WordObj As Variant
      
iAlterRecord = 0
iNeuerRecord = 10
      
Set  word = CreateObject("Word.Application") 'Create Word object 
Call word.documents.add(PFAD$,False)   
Set Worddoc2 = word.activedocument 'Get a handle for the active document 
WordDoc2.MailMerge.MainDocumentType = wdFormLetters
Call WordDoc2.MailMerge.OpenDataSource(DataSourcePfad)
WordDoc2.MailMerge.SuppressBlankLines = True
Call WordDoc2.MailMerge.Execute(True)
word.visible = True 'Comment this line if you don't want to show Word. 
'word.quit 'remove comment if you want to close rather than show Word.       
      
'Worddoc2.MailMerge.ViewMailMergeFieldCodes = wdToggle   
'      wohin kommt das und was bringt es ?
      
WordDoc2.MailMerge.DataSource.ActiveRecord = wdFirstRecord
      
Do While iAlterRecord <> iNeuerRecord
    'Warten, bis (evtl. aus dem Vorlauf noch vorhandene) Attribute.txt nicht mehr da ist ..
   iRepetition = 0
   iAlterRecord = iAlterRecord + 1
   word.ActivePrinter = "Print-2-Image"
   Call worddoc2.PrintOut(False, , , , , , , 1)
                  WordDoc2.saveas("c:\temp\test.doc") 'save the document with the filename of "user" 
         
         WordDoc2.MailMerge.DataSource.ActiveRecord = wdNextRecord   
Loop   

      
      

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Serienbriefe in Word
« Antwort #5 am: 19.12.02 - 12:44:34 »
... wdFirstRecord und wdNextRecord sind Konstanten, die ihren Wert in Notes per OLE/COM erst bekommen müssen. In Word sind die bereits global bekannt, in deiner Umgebung sehe ich die nicht...

ata
Grüßle Toni :)

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Serienbriefe in Word
« Antwort #6 am: 19.12.02 - 12:48:15 »
... ich habe die Werte gefunden...

wdFirstRecord = -4
wdNExtRecord = -2
wdFormLetters = 0

ata
« Letzte Änderung: 19.12.02 - 12:50:56 von ata »
Grüßle Toni :)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Serienbriefe in Word
« Antwort #7 am: 19.12.02 - 12:58:58 »
Hi ata,

kannst Du mir da noch ein bißchen dazu schreiben ?
Ich weiss leider noch nicht was ich nun zu tun habe.

Ich habe diese Zeilen jetzt einfach mal in meinen Code
übernommen und war der Ansicht, dass diese Zeile

WordDoc2.MailMerge.DataSource.ActiveRecord = wdNextRecord  

irgendwelche Zähler ändert.
Irre ich mich da ?

Ciao

Don Pasquale

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Serienbriefe in Word
« Antwort #8 am: 19.12.02 - 13:08:08 »
... in Word sind Konstanten eingebaut, die über deren Namen sprechen. "-4" sagt niemandem etwas, aber mit wdNextRecord kann man sich was vorstellen...

... du hast 2 Möglichkeiten:

Die Konstanten in der Deklaration übernehmen mit...
   
   Const wdFirstRecord = -4
   ... usw.

... oder eben anstelle der Konstanten direkt die Zahl verwenden...
... das wärs eigentlich schon... ;D

ata
Grüßle Toni :)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Serienbriefe in Word
« Antwort #9 am: 19.12.02 - 13:43:35 »
Oh, dann liegt der Fehler woanders.


Ich möchte nämlich Datensatz für Datensatz ausdrucken
und nahm an, mit wdnextrecords würde ich das erreichen.

vielleicht fehlt mir hier einer der vielen Parameter
Call worddoc2.PrintOut(False, , , , , , , 1)

jetzt bräuchte man eine Doku

ciao

Don Pasquale


Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Serienbriefe in Word
« Antwort #10 am: 19.12.02 - 13:47:06 »
... wenn du die Konstanten nicht zugewiesen hattest, konnte es auf keinen Fall funktionieren. Würde einer der Parameter fehlen, würdest du von Word eine Fehlermeldung erhalten...

ata

Nachtrag ... printOut reicht auch ohne Parameter...

ata
« Letzte Änderung: 19.12.02 - 13:48:53 von ata »
Grüßle Toni :)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Serienbriefe in Word
« Antwort #11 am: 19.12.02 - 14:17:25 »
Aber ich habe immer noch keinen Schimmer,
wie ich ihm sage, dass er nur den aktuellen
Datensatz drucken soll ?


Offline aba

  • Aktives Mitglied
  • ***
  • Beiträge: 228
  • i want to be a bigger tigger
Re:Serienbriefe in Word
« Antwort #12 am: 19.12.02 - 14:51:15 »
Hallo Don Pasquale,

ich kann Dir wahrscheinlich nicht helfen aber das Thema interessiert mich. Kannst Du mir evtl. in kurzen Worten den Anwendungsfall schildern und wie die Beziehung in dem Fall zwischen Word und Notes aussieht!!
Gruss Arnd

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Serienbriefe in Word
« Antwort #13 am: 19.12.02 - 15:06:08 »
Hallo aba,
den ersten teil der frage kann ich sicherlich beantworten.

Normalerweise druckt man einen Serienbrief am Stück ( und lässt die Marketingmitarbeiter selbst sortieren, wann der eine Brief fertig und der nächste anfängt.
Ich möchte aber jeden Brief einzeln gedruckt haben, deswegen muß ich recordweise durch die Steuerdatei.
Die Steuerdatei wird vorher erstellt, diese muss in der ersten Zeile den Namen der Felder haben, z.B.

Vorname,Name,Ort

und in den folgenden Zeilen die einzelnen Datensätze mit den Daten in genau dieser angegebenen Reihenfolge. Die Serienbrieffelder in Word müssen den gleichen Namen tragen.

Wie Du am Code siehst, erstelle ich ein Object "Word.Application"
und ab da an komme ich ins schwimmen, weil die folgenden
Methoden eben OLE-Word-Methoden sind.
Ich habe den Code teilweise aus Beispielen in der Sandbox und teilweise aus anderen Visual Basic Applikationen gemopst.

Gruß

Don Pasquale

Offline aba

  • Aktives Mitglied
  • ***
  • Beiträge: 228
  • i want to be a bigger tigger
Re:Serienbriefe in Word
« Antwort #14 am: 19.12.02 - 15:10:21 »
OK klar.

Das hört sich erstmal für mich noch zu schwierig an. Würde mich aber freuen wenn ich nochmal auf Dich zurückgreifen könnte wenn das hier ein Thema wird.

Vielen Dank
Gruss Arnd

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Serienbriefe in Word
« Antwort #15 am: 19.12.02 - 15:24:08 »
aba,
na klar,
entweder habe ich mir bis dahin die Kugel gegeben oder
bin zum profi geworden
ciao
don pasquale

Offline wflamme

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 690
  • Geschlecht: Männlich
  • Irgendwie geht das schon...
    • wflamme
Re:Serienbriefe in Word
« Antwort #16 am: 19.12.02 - 15:45:44 »
... ich habe die Werte gefunden...

wdFirstRecord = -4
wdNExtRecord = -2
wdFormLetters = 0

ata

Damit geht's einfacher:
http://www.sns1.de/partner/flamme/wflamme.nsf/Shortcut/DumpTypeLibInfo1
Grüße,
Wolfgang

"I love deadlines. I love the whooshing sound they make as they pass by..."
DOUGLAS ADAMS

wflamme@mainz-online.de
http://www.sns1.de/partner/flamme/wflamme.nsf

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Serienbriefe in Word
« Antwort #17 am: 19.12.02 - 15:53:44 »
@wfamme

... damit hat man schon mal alles was man braucht. Die Sache mit den externen Dateien, die eingebunden werden haben nur einen kleinen Nachteil - bei jeder Speicherung des Designelementes muss  vorhanden sein - darauf muss man achten, den sonst kennt die die Konstanten nicht. Wenn also der Kunde genau bei diesem Designelement was biegt und ddann speichert, und er hat die Datei nicht...

ata
Grüßle Toni :)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Serienbriefe in Word
« Antwort #18 am: 20.12.02 - 11:59:11 »
Liebe Freunde der Serienbrief-Schreiberei,

dank der freundlichen Hilfe dieses Forums ( insbesondere Anton a.k.a ata ) konnte ich endlich einen Serienbrief Datensatzweise drucken. Glaubt mir, das wird gewünscht.

Hier ist nun mein aktuelles Ergebnis
(aber, es ist noch nicht unter Last getestet)

PFAD$          = der Pfad zur Serienbriefformatvorlage
DataSource  = Pfad zur Serienbriefsteuerdatei

      
      
      Const wdFirstRecord = - 4
      Const wdNExtRecord = -2
      Const wdFormLetters = 0
      Const wdToggle = 0 ' diese Zahl ist vermutlich falsch, aber klappt trotzdem
      
      
      Dim WordDoc2 As Variant   
      Dim object As Variant
      Dim WordObj As Variant
      
      
      
   '***************
      Set  word = CreateObject("Word.Application") 'Create Word object
      Call word.documents.add(PFAD$)   
      Set Worddoc2 = word.activedocument 'Get a handle for the active document
      WordDoc2.MailMerge.MainDocumentType = wdFormLetters
      Call WordDoc2.MailMerge.OpenDataSource(DataSourcePfad)
      WordDoc2.MailMerge.SuppressBlankLines = True
      Call WordDoc2.MailMerge.Execute(True)
      word.visible = True 'Comment this line if you don't want to show Word.
'      word.ActivePrinter = "Print-2-Image"
      Call worddoc2.PrintOut
   ' ****************   
      WordDoc2.MailMerge.ViewMailMergeFieldCodes = wdToggle
      
      
  'Gehe durch alle Datensaetze zum Druck auf Papier
      
      iAlterRecord = 0
      iNeuerRecord = 1
      
      WordDoc2.MailMerge.DataSource.ActiveRecord = wdFirstRecord
      Do While iAlterRecord <> iNeuerRecord
    'Warten, bis (evtl. aus dem Vorlauf noch vorhandene) Attribute.txt nicht mehr da ist ..
      
         Call worddoc2.PrintOut(False, , , , , , , 1)
         iAlterRecord =iNeuerRecord
         WordDoc2.MailMerge.DataSource.ActiveRecord = wdNextRecord
         iNeuerRecord = Cint(WordDoc2.MailMerge.DataSource.ActiveRecord)
      Loop   
      
   End If   

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz