Serienbrief Word 2003

14/08/2009 - 09:44 von Irene | Report spam
Guten Tag,
ich habe einen Serienbrief mit einer Datenquelle aus Access. Der Serienbrief
wird auch problemlos verbunden. Nun möchte ich gerne nach bestimmten
Kriterien suchen. Habe dazu folgendes Makro benutzt, gelange aber zu keinem
Ergebnis. Zudem habe ich nach Ablauf des Makros noch das Problem, dass die
Serienbrieffelder sich nicht mehr veràndern beim weiterblàttern.

Vielleicht gibt es hier Hilfe.

Danke.

Sub GoDB()
'
' SuchDB Makro
' Makro erstellt am 13.08.2009 von cbarth
'
Dim recnum As Integer

ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord

If ActiveDocument.MailMerge.DataSource.FindRecord(FindText:="Mustermann",
Field:="Hersteller") = True Then
recnum = ActiveDocument.MailMerge.DataSource.ActiveRecord
MsgBox (recnum)
Else
MsgBox ("nicht gefunden")
recnum = ActiveDocument.MailMerge.DataSource.ActiveRecord
MsgBox (recnum)
End If


End Sub
 

Lesen sie die antworten

#1 Cindy M.
14/08/2009 - 18:06 | Warnen spam
Hi Irene,

ich habe einen Serienbrief mit einer Datenquelle aus Access. Der Serienbrief
wird auch problemlos verbunden. Nun möchte ich gerne nach bestimmten
Kriterien suchen. Habe dazu folgendes Makro benutzt, gelange aber zu keinem
Ergebnis. Zudem habe ich nach Ablauf des Makros noch das Problem, dass die
Serienbrieffelder sich nicht mehr veràndern beim weiterblàttern.




Das Problem ist, dass diese Funktionalitàt im Objektmodell "kaputt" ist. Früher
war es auch in der Benutzerschnittstelle unbrauchbar (Word 97-200); im
Objectmodell gab es eine Möglichkeit, mit Umwegen. Das Problem in der
Benutzerschnittstelle in Word 2002 behoben, und dabei die Funktionalitàt im
Objektmodell völlig unnutz gemacht.

Nunmehr geht es nur, wenn Du die alte Funktion - FindRecord2000, statt
FindRecord einsetzest. Nur ist der alte Befehl immer noch mit dem alten Problem
behaftet. Das heisst, gibt es einen Treffer, geht im Dokument plötzlich nichts
mehr. Nach dem Treffer muss der Code nach etwas suchen, das NICHT vorhanden
ist. Damit wird die Benutzerschnittstelle wieder freigegeben.

Dabei ist es wichtig zu berücksichtigen, dass die Funktion keinen booleaschen
Wert, sondern die Nummer des Datensatzes zurückgibt. Du sollst sie also NICHT
in der IF-Prüfung verwenden, sondern eher so vorgehen:

Dim lDS as Long

lDS = ActiveDocument.MailMerge.DataSource.FindRecord200(_
FindText:="Mustermann", Field:="Hersteller")

If lDS <> 0 Then

Sub GoDB()
'
' SuchDB Makro
' Makro erstellt am 13.08.2009 von cbarth
'
Dim recnum As Integer

ActiveDocument.MailMerge.DataSource.ActiveRecord = wdFirstRecord

If ActiveDocument.MailMerge.DataSource.FindRecord(FindText:="Mustermann",
Field:="Hersteller") = True Then
recnum = ActiveDocument.MailMerge.DataSource.ActiveRecord
MsgBox (recnum)
Else
MsgBox ("nicht gefunden")
recnum = ActiveDocument.MailMerge.DataSource.ActiveRecord
MsgBox (recnum)
End If


End Sub




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