Discussion:
Inhalt eines Seriendruck Feldes auslesen für Speicherung als Dateiname
(zu alt für eine Antwort)
Erik
2003-09-30 13:02:38 UTC
Permalink
Hallo VBA-Gruppe

ich versuche verzweifelt, den Inhalt eines Serienbrieffeldes
auszulesen um dieses später als Dateinamen zu verwenden

Hintergrund:

Mit Hilfe einer Serienbriefvorlage sollen alle Adressdaten in die
Vorlage gezogen werden. Da alle Briefe jedoch manuell nachbearbeitet
werden sollen, sollen die einzelnen Datensätze unter Angabe der
Kontonummer (=Seriendruckfeld) gespeichert werden. Der bisherige Code
kann leider nur die Counternummer speichern.

Auch klappt es nicht, die Schleife bis zum letzten Record-Eintrag
laufen zu lassen. Für Testzwecke habe ich den letzten Eintrag auf 10
gesetzt.

Wer kann helfen ?
Vielen Dank im voraus

Erik

VBA-Code
-------------------------------------------------------------------------------
i = 1
LetzterEintrag = 10

For i = 1 To LetzterEintrag

With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True
With .DataSource
.FirstRecord = i
.LastRecord = i
End With
.Execute Pause:=True
End With

ChangeFileOpenDirectory _
"\\HVBANK1001\VOL3\BANK\KREDIT\PERSABL\Philipp\Zf-ler\ZF-2003-10\"
ActiveDocument.SaveAs FileName:="FZ-" & i,
FileFormat:=wdFormatDocument, _
LockComments:=False, Password:="", AddToRecentFiles:=True,
WritePassword _
:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False,
saveAsAOCELetter:= _
False

ActiveDocument.Close

Next

End Sub
Helmut Weber
2003-09-30 13:54:22 UTC
Permalink
Hallo Erik,
den Inhalt eines Seriendruckfeldes könnte man so
bekommen, wobei ich das jetzt nicht testen kann:
With Documents(ActiveDocument.Name).MailMerge
.DataSource.ActiveRecord = l
.DataSource.FirstRecord = l
.DataSource.LastRecord = l
With .DataSource
msgbox .DataFields("Kontonummer")
End With
End With
DataSource.LastRecord liefert bei mir immer -16.
Könnte man eventuell abfangen, mit Einsetzen einer
zu großen Zahl für den Loop und dann "on error ...".
Auch andere Workarounds sind denkbar.
Siehe auch:
http://www.google.de/groups?hl=de&lr=&ie=UTF-
8&threadm=0dbb01c360c9%2490062280%24a301280a%
40phx.gbl&rnum=83&prev=/groups%3Fq%
3Dgroup:microsoft.public.de.word.vba%2Bauthor:Helmut%
2Bauthor:Weber%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26start%3D80%
26sa%3DN
Gruss
Helmut Weber
"red.sys" & chr$(64) & "t-online.de"
Word 97, NT4.0
Erik
2003-10-01 12:11:00 UTC
Permalink
Hallo Helmut

danke erst mal für den ersten Hinweis

Da ich das Auslesen der Daten innerhalb einer for next Schleife habe,
habe, ich Active Record, first record und last record jeweils auf den
Counter i gesetzt und bekomme den Feldinhalt somit auch in der
Messagebox ausgegeben. Ich brauche diesen jedoch als Variable zum
Abspeichern für den Dateinamen.

Wie kann ich das dann übergeben ?

habe es mal so probiert, klappt aber leider nicht
------------------------------------------------------------------------
For i = 1 To LetzterEintrag

With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True
With .DataSource
.FirstRecord = i
.LastRecord = i
End With

With Documents(ActiveDocument.Name).MailMerge
.DataSource.ActiveRecord = i
.DataSource.FirstRecord = i
.DataSource.LastRecord = i
With .DataSource
.DataFields("KONTONR") = y
End With
End With
.Execute Pause:=True
End With


ChangeFileOpenDirectory _
"\\HVBANK1001\VOL3\BANK\KREDIT\PERSABL\Philipp\Zf-ler\ZF-2003-10\"
ActiveDocument.SaveAs FileName:="FZ-" & y,
FileFormat:=wdFormatDocument, _
LockComments:=False, Password:="", AddToRecentFiles:=True,
WritePassword _
:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False,
saveAsAOCELetter:= _
False
------------------------------------------------------------------------
Post by Helmut Weber
Hallo Erik,
den Inhalt eines Seriendruckfeldes k nnte man so
With Documents(ActiveDocument.Name).MailMerge
.DataSource.ActiveRecord = l
.DataSource.FirstRecord = l
.DataSource.LastRecord = l
With .DataSource
msgbox .DataFields("Kontonummer")
End With
End With
DataSource.LastRecord liefert bei mir immer -16.
K nnte man eventuell abfangen, mit Einsetzen einer
zu gro en Zahl f r den Loop und dann "on error ...".
Auch andere Workarounds sind denkbar.
http://www.google.de/groups?hl=de&lr=&ie=UTF-
8&threadm=0dbb01c360c9%2490062280%24a301280a%
40phx.gbl&rnum=83&prev=/groups%3Fq%
3Dgroup:microsoft.public.de.word.vba%2Bauthor:Helmut%
2Bauthor:Weber%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26start%3D80%
26sa%3DN
Gruss
Helmut Weber
"red.sys" & chr$(64) & "t-online.de"
Word 97, NT4.0
Helmut Weber
2003-10-01 12:26:03 UTC
Permalink
Hallo Erik,
Anfängerfehler, andersrum!
Post by Erik
With .DataSource
.DataFields("KONTONR") = y
End With
...
y = .DataFields("KONTONR") ' <<
Viel Spass!
Helmut Weber
"red.sys" & chr$(64) & "t-online.de"
Word 97, W98

Loading...