Textmarke in Serienbrief

16/10/2008 - 09:38 von Torsten Völz | Report spam
Hallo liebe NG,

ich habe einen Serienbrief in dem sich ein Seriendruckfeld und eine
Textmarke befinden. Das Seriendruckfeld enthàlt Informationen wie diese "1x
ABC, 1x XYZ". Ich lese nun per VBA den Inhalt des Feldes aus und ersetze das
Komma durch CRLF und "1x" durch "". Das Ganze habe ich an das Ereignis
MailMergeBeforeMerge gehàngt.
Nun möchte ich den verànderten Inhalt des Seriendruckfeldes in eine
Textmarke schreiben. Leider besteht das Problem darun, dass dies nur für zwei
Datensàtze durchgeführt wird und nicht auch für den Rest.
Ich verwende folgenden Code:
Private Sub APP_MailMergeBeforeRecordMerge(ByVal Doc As Document, Cancel As
Boolean)

Dim bm As Bookmark
Dim rng As Range
Dim Katname As String

Katname =
ActiveDocument.MailMerge.DataSource.DataFields("Catalog_Name3").Value

Katname = Replace(Katname, "1x ", "")
Katname = Replace(Katname, ", ", vbCr)

If ActiveDocument.Bookmarks.Exists("Katalogname") Then
Set bm = ActiveDocument.Bookmarks("Katalogname")
Set rng = bm.Range
rng.Text = Katname
ActiveDocument.Bookmarks.Add Name:="Katalogname", Range:=rng
End If

Katname = ""

End Sub

Wenn ich mir den Inhalt der Variablen "Katname" jeweils mit einer MsgBox
anzeigen (mit auskommentierter If-Schleife), dann werden alle Datensàtze
durchlaufen. Sowie ich aber die If-Schleife aktiviere werden nur die ersten
zwei Datensàtze gedruckt.

Ich verwende Word 2003.

Was mache ich falsch?

Danke und Gruß
Torsten
 

Lesen sie die antworten

#1 Cindy M.
23/10/2008 - 18:27 | Warnen spam
Hi Torsten,

Dieses Ereignis ist leider nicht zuverlàssig. Wir (Word MVPs) schàtzen, das
Problem hat mit System-Ressourcen zu tun. Bei mir laufen die meisten Sachen, bei
anderen nicht. Auch Microsoft kann diese Fehler nicht reproduzieren. Sie treten
aber bei vielen Leuten auf, sobald der Code in Ereignis-Prozedur "etwas lànger
dauert".

Etwas, was Du probieren könntest, wàre, ActiveDocument durch das vom Ereignis zur
Verfügung gestellten Doc-Objekt zu ersetzen. Damit müssste Word nicht stàndig
kalkulieren, was mit "ActiveDocument" gemeint ist.

Ich habe einen Serienbrief in dem sich ein Seriendruckfeld und eine
Textmarke befinden. Das Seriendruckfeld enthà€lt Informationen wie diese "1x
ABC, 1x XYZ". Ich lese nun per VBA den Inhalt des Feldes aus und ersetze das
Komma durch CRLF und "1x" durch "". Das Ganze habe ich an das Ereignis
MailMergeBeforeMerge gehà€ngt.
Nun möchte ich den verà€nderten Inhalt des Seriendruckfeldes in eine
Textmarke schreiben. Leider besteht das Problem darun, dass dies nur fàŒr zwei
Datensà€tze durchgefàŒhrt wird und nicht auch fàŒr den Rest.
Ich verwende folgenden Code:
Private Sub APP_MailMergeBeforeRecordMerge(ByVal Doc As Document, Cancel As
Boolean)

Dim bm As Bookmark
Dim rng As Range
Dim Katname As String

Katname =
ActiveDocument.MailMerge.DataSource.DataFields("Catalog_Name3").Value

Katname = Replace(Katname, "1x ", "")
Katname = Replace(Katname, ", ", vbCr)

If ActiveDocument.Bookmarks.Exists("Katalogname") Then
Set bm = ActiveDocument.Bookmarks("Katalogname")
Set rng = bm.Range
rng.Text = Katname
ActiveDocument.Bookmarks.Add Name:="Katalogname", Range:=rng
End If

Katname = ""

End Sub

Wenn ich mir den Inhalt der Variablen "Katname" jeweils mit einer MsgBox
anzeigen (mit auskommentierter If-Schleife), dann werden alle Datensà€tze
durchlaufen. Sowie ich aber die If-Schleife aktiviere werden nur die ersten
zwei Datensà€tze gedruckt.

Ich verwende Word 2003.




Cindy Meister
Co-Autor von »Microsoft Word-Programmierung Das Handbuch« (MS Press)
http://www.word.mvps.org
http://homepage.swissonline.ch/cindymeister

Rückfragen & Antworten nur in der Newsgroup, bitte!

Ähnliche fragen