MS word Serienbrief mit mehreren Bedingungen

hallo lieber Forenfreunde,

mein problem sieht volgendermaßen aus. Ich möchte einen Serienbrief erstellen. Soweit komme ich ja noch klar. Aber da ich an Firmen ohne Ansrechpartner schreibe, an manchen mit Ansprechpartern habe ich Probleme mit der Anschrift und auch mit der Anrede.

Wie kann ich word Klarmachen wenn er in der Adresse Firma, Frau oder Herr zuschreiben hat. Bei der Anrede dann natürlich sehr geehrte Damen und Herrn, Sehr geehrte Frau oder natürlich seher geehrter Herr.

Zwei bedingung bekomme ich ja gerade noch hin, aber drei bedingungen ?

Hallo, ich bin nicht sicher, ob ich Dich richtig verstanden habe, aber ich versuch’s mal:

da ich an Firmen ohne Ansrechpartner schreibe, an manchen mit
Ansprechpartern habe ich Probleme mit der Anschrift und auch
mit der Anrede.

Ich würde in der Steuerdatei folgende Seriendruckfelder einrichten:
Firma1, Firma2, AnsprAnrede, AnsprVorname, AnsprName usw.
Dann im Adressfeld einfügen und auswählen: Leerzeilen auslassen (oder wie immer das heißt, wenn leere Zeilen nicht mitgedruckt werden sollen).
Bei der Anrede dann Sehr geehrte [Bedingungsfeld: Wenn AnsprAnrede=Herrn dann „r Herr“, wenn AnsprAnrede=Frau, dann " Frau", sonst " Damen und Herren"] [Seriendruckfeld: AnsprName] (dann das Komma)

Wie kann ich word Klarmachen wenn er in der Adresse Firma,
Frau oder Herr zuschreiben hat.

Also, im Adressfeld ist das nicht das große Problem; beim Ausfüllen der Steuerdatei musst Du allerdings alles reinschreiben, was Du hast - und die Felder ohne Text auch wirklich leer lassen, also keine Leerzeichen o. ä. einfügen.
Falls noch Probleme auftauchen, melde Dich nochmal, ansonsten viel Erfolg!
Verena

hallo

verstehe das problem nicht ganz:

Sehr geehrte{if {mergefield geschlecht} = „W“ " Frau "}{if {mergefield geschlecht} = „M“ "r Herr "}{if {mergefield geschlecht} = „F“ " Firma "} {mergefield titel \f " "}{mergefield vorname} {mergefield nachname}

klappt doch einwandfrei so, auch ohne mehrfachbedingungen. natürlich ist das beispiel schwachsinn (niemand schreibt „sehr geehrte firma“) aber das prinzip ist schon erkennbar oder?

lg
erwin

OT Word Vba Code für Serienbrief

klappt doch einwandfrei so, auch ohne mehrfachbedingungen.
natürlich ist das beispiel schwachsinn (niemand schreibt „sehr
geehrte firma“) aber das prinzip ist schon erkennbar oder?

Sehr geehrte Firma Erwin, *gg*

hast du zufällig Vba-Code der in Word einen Serienbrief aufgrund bzw. mit den Adressdaten einer Exceldatei erstellt?
Den müßte ich zwar noch umbauen um ihn aus Excel heraus starten zu können, aber er würde mir schon viel Arbeit ersparen weil ich in Word-Vba null fit bin.
Die in der Brettbeschreibung angegebene bluewin-Seite, da schaue ich heute/morgen auch nach, aber könnte ja sein daß du Codeschnipsel griffbereit hast.

Und, was ich schon lange wissen will, wenn ich in einem Word-Dokument wissen will, welches Wort auf der 3ten Seite im 5ten Satz als 4tes Wort steht, wie kriege ich das raus, geht das überhaupt, und wenn ja, wie?

Danke ^ Gruß
Reinhard

hallo reinhard

also, code für das automatisch erzeugen von serienbriefen habe ich massenweise, nur keinen davon darf ich dir weitergeben (firmeninterner code). da was passendes für dich zusammenzustellen ist etwas aufwand und so nebenbei nicht so leicht. wird ev. etwas dauern.

das mit dem bestimmten wort auf der xten seite ist gar nicht so leicht: seiten sind im word keine eigenständige einheit. wäre auch sinnlos, da bereits das wechseln des druckertreibers möglicherweise auswirkungen auf die seitenumbrüche hat. ausserdem gibt es etliche andere gründe, warum der seitenumbruch sich einfach so ändert, obwohl man nichts am text verändert hat.

word geht generell so vor: es gibt ein range-objekt, dass einen bestimmten textbereich markiert (mit beginn- und endposition). range-objekte können durchaus geschachtelt bzw. überlappend sein. etliche relevante range-objekte erkennt word automatisch und bietet diese komfortable an.

beispiel: den bereich des gesammten dokuments bekommst du mit
activedocument.range

automatisch untergliedert word das dokument in abschnitte (sections), abstätze (paragraphs), wörter (words) und Zeichen (characters). jedes dokument hat mindestens einen abschnitt und mindestens einen absatz. ein absatz ist definiert als bereich zwischen zwei absatzzeichen (ausnahme: der erste absatz des dokuments liegt zwischen dokumentbeginn und ersten absatzzeichen).

du kannst also so das 5. wort des 7. absatzes des dokuments holen:

set Wort = Activedocument.range.paragraphs(7).range.words(5)

„Wort“ ist dabei selbst wieder ein Range-Objekt. An den Text des Range-Objekts kommst du mit der .Text-Eingenschaft ran (also Wort.Text).

das 17 Wort des 2. Abschnittes bekommst du z.b. über

set Wort = ActiveDocument.range.Sections(2).range.words(17)

du musst dich also nicht entlang der „granularität“ der range-objekte entlanghanteln sondern nimmst je den bereich, der dich interessiert.

leider kommt man an seiten nicht so leicht ran. da ist etwas tricksen angesagt:

’ Die Range des Beginns der 4. Seite holen
Set SeiteStart = ActiveDocument.Range.GoTo(what:=wdGoToPage, Name:=„4“)
’ Den Range der aktuellen Seite zum vorigen Range holen
Set Seite = SeiteStart.GoTo(what:=wdGoToBookmark, Name:="\page")
’ das 4. Wort des 2. Absatzes der markierten Seite holen
Set Wort = Seite.Paragraphs(2).Range.Words(4)

msgbox "das wort ist " & Wort.Text

Das Problem dabei: als 1. Absatz einer Seite gilt der erste VOLLSTÄNDIGE Absatz! wenn also ein absatz über drei seiten geht, dann hat die zweite seite technisch keinen absatz (der gehört ja zur ersten seite). der obige code liefert also ev. nicht ganz das ergebnis, dass du dir erwartest.

um es halbwegs sauber hinzubekommen, musst du vergleichen, ob der beginn des ersten absatzes der beginn der ersten seite ist. wenn nicht, musst du die „differenz“ zwischen beginn der seite und beginn des ersten absatzes als „absatz ehrenhalber“ heranziehen. wird eine ganz schöne bastelei.

und vor allem: kaum nimmst du einen anderen druckertreiber oder ein spezielles absatzformat (zeilen zusammenhalte, absatzkontrolle etc.) schaut es komplett anders aus, ohne auch nur einen strich am dokument geändert zu haben.

wenn du also tatsächlich die (harte) forderung hast, das xte wort der xten seite ermitteln zu müssen und diese information irgendeine wichtigere relevanz hat, so musst du sicherstellen, dass alle beteiligten, die das word-dokument öffnen wollen, den selben druckertreiber verwenden und die selben formatvorlagen in den dokumentvorlagen drinnen haben. nebenbei sollte word noch absolut identisch konfiguriert sein. mit einem wort: sinnlos!

bleibt dir nur, an den anforderungen zu schrauben (das xte wort nach einer klar definierten marke im dokument oder so).

lg
erwin

ps: wie dringend ist dir der code für die serienbrieferstellung bzw. wie detailliert soll es sein? das simpleste ist ja, einfach die erstellung eines serienbriefes mit dem makrorekorder aufzuzeichen - das ist meist durchaus brauchbar.

1 „Gefällt mir“

Hallo Erwin,

mannomann ist das kompliziert in Word. Ich danke dir sehr für die reichlichen Informationen, muß mir das mal ausdrucken und dann nachlesen.

Ps: abgesehen von der bluewin-seite wäre bzw. ist mein zweiter Schritt der Makrorekorder, aber ich kenne es von Excel her, da ist dann die Masse des Codes an sich völlig unbrauchbar im Sinnne einer gezielten Programmierung.

Dankeschön
Gruß
Reinhard

Hi Erwin,

mir geht es wie Reinhard: mit Excel-VBA bin ich ganz fit, aber wenn ich in Word-VBA etwas programmieren möchte, dann muß ich mir erst mal 1 oder 2 Tage lang Grundlagen aneignen.

Ich finde Deine Word-VBA-Kurzeinweisung SEHR interessant. M.E. wäre das einen Eintrag in der FAQ wert.

Vielen Dank (+ Sternchen)
Martin

Tja, so Ganz komme ich nicht ganz klar :frowning:

Bei Privatpersonen soll die Anschrift ja so aussehen

Herrn /Frau
vorname Nachname
Straße
Plz ort

Sehr geehrte Frau /Herr,

Bei Firmen so.

Firma
xyz
Herrn, Frau (bzw ohne Ansprechpartner)
Straße
Plz Ort

sehr geehrte Damen und Herren,

In meiner testdatenqualle habe ich stehen

Anrede, Vorname, Name, Firma, Straße, PLZ und Ort.

Mein dokument ist derzeit so aufgebaut.

anschrift:
«Anrede»
«Firma»
Frau «Vorname» «Name»
«Adresse2»
«Postleitzahl» «Ort»

die anrede:
{if {Mergefiled Anrede}= „Herr“ „Sehr geehrter Herr“ „Frau“ Sehr geehrte Frau" „Firma“ „sehr geehrte Damen und Herren“}

Tja so ganz geht das noch leider noch nicht.

@ erwin, dein Voschalg hat mir auch sehr gut gefallen, allerdings bin ich damit auch nicht zurecht gekommen. habe zwar damit lange rumgebastelt, aber wenn ein Ansprchpartner und eine Firma zusammenvielen, hatte ich mit der Anschrift leider ein kleines probelm.

HerrnFirma
Müller Ohg
Herrn Maier

tja dafür fand ich dann keine Lösung. leider

Bei Privatpersonen soll die Anschrift ja so aussehen
Herrn /Frau
vorname Nachname
Sehr geehrte Frau /Herr,

Bei Firmen so.
Firma
xyz
Herrn, Frau (bzw ohne Ansprechpartner)
sehr geehrte Damen und Herren,

In meiner testdatenqualle habe ich stehen
Anrede, Vorname, Name, Firma, Straße, PLZ und Ort.

Und in Anrede steht dann entweder Herrn, Frau oder Firma? Dann so:
«Firma»
«Anrede»
«Vorname» «Name»
usw., dann wird doch die Zeile Firma weggelassen, wenn das Feld leer ist?
Irgendwie krieg ich das Gefühl, ich sollte mir die Steuerdatei mal näher ansehen … kannst sie ja Deine Testdateien beide mal schicken.
Gruß Verena

Bei Privatpersonen soll die Anschrift ja so aussehen
Herrn /Frau
vorname Nachname
Sehr geehrte Frau /Herr,

Bei Firmen so.
Firma
xyz
Herrn, Frau (bzw ohne Ansprechpartner)
sehr geehrte Damen und Herren,

In meiner testdatenqualle habe ich stehen
Anrede, Vorname, Name, Firma, Straße, PLZ und Ort.

Und in Anrede steht dann entweder Herrn, Frau oder Firma? Dann
so:
«Firma»
«Anrede»
«Vorname» «Name»
usw., dann wird doch die Zeile Firma weggelassen, wenn das
Feld leer ist?

So änlichhabe ich es mir auch erst gedacht. Allerdings ist das nicht sehr schön, wenn man bei der Firma einen ansprchpartner hat.
Würde ja dann so aussehen
Firma
Müller OHG
Frau
Lischen Maier
Nixstraße
12345 Irgendwo

Irgendwie krieg ich das Gefühl, ich sollte mir die Steuerdatei
mal näher ansehen … kannst sie ja Deine Testdateien beide
mal schicken.
Gruß Verena

Danke für das angeboht, aber achtung, sie sind ein bischen verschandelt durch das ausprobieren. Kann ich dier hier etwas über das forum schicken, habe soetwas noch nie gemacht.

So änlichhabe ich es mir auch erst gedacht. Allerdings ist das
nicht sehr schön, wenn man bei der Firma einen ansprchpartner
hat.
Würde ja dann so aussehen
Firma
Müller OHG
Frau
Lischen Maier
Nixstraße
12345 Irgendwo

Ich persönlich würde ja einfach das Wort Firma weglassen, das ist doch nicht unbedingt nötig. Zu dieser Option liegt bereits eine Vorlage in Deinem eMail-Postfach :smile:) Guck sie Dir mal an, ob das für Dich so okay ist.

… kannst sie ja Deine Testdateien beide mal schicken.

Kann ich dier hier etwas
über das forum schicken, habe soetwas noch nie gemacht.

Ja: entweder rechts neben meinem Artikel anklicken „E-mail an den Autor schicken“ oder neben meinem Namen auf die eMail-Adresse klicken oder diese abschreiben und mir eine mail schicken. In letzterem Fall bitte im Betreff wer-weiss-was angeben, da sie sonst in den Müll fliecht :smile:)
Gruß Verena

hi Reinhard

komme endlich wieder zum antworten…

habe es eben etwas ausprobiert: im fall der serienbrieferstellung ist der vom makrorekorder aufgezeichnete code sogar überaus brauchbar - im sinne von: hätte ich händisch nicht viel besser machen können. das aufgezeichnete ist mit etwas vba-erfahrung ziemlich selbsterklärend. das parametrisieren und von excel aus aufrufen sollte wenig stress verursachen.

ach ja, fernsteuern von word aus einem excel-makro heraus:

zuerst über extras->verwiese die „microsoft word 11.0 Object library“ einbinden (oder halt die von dir verwendete version.

dann folgender beispielcode:

Sub wordtest()
Dim Word As Word.Application
Dim Dokument As Word.Document

Set Word = GetObject(class:=„word.application“)

Set Dokument = Word.ActiveDocument

msgbox dokument.range.words(1).text

end sub

dieses makro holt dir das erste wort aus dem aktuell offenen dokument im word. ist word nicht offen oder kein dokument geöffnet, bekommst du fehlermeldungen - soweit habe ich das makro nicht abgesichert. aber das prinzip ist dir jetzt klar, oder?

im prinzip kannst du ab dem „set word = getobject…“ einfach den aufgezeichneten code aus dem word-vba-editor reinkopieren. ev. musst du vor allen objektreferenzen nun die referenz auf word voranstellen (also statt nur activedocument halt word.activedocument). der änderungsaufwand sollte aber minimal sein.

lg
erwin