Ich habe folgendes Problem ich habe einen Serienbrief erstellt und möchte dass Word (2003) erst die Datenliste für den Serienbreif öffnet und dann danach ein Makro automatisch direkt danach ausführt.
Danke für Eure hilfe.
Mit freundlichen Nils
Ich habe folgendes Problem ich habe einen Serienbrief erstellt und möchte dass Word (2003) erst die Datenliste für den Serienbreif öffnet und dann danach ein Makro automatisch direkt danach ausführt.
Danke für Eure hilfe.
Mit freundlichen Nils
Ich habe folgendes Problem ich habe einen Serienbrief erstellt
und möchte dass Word (2003) erst die Datenliste für den
Serienbreif öffnet und dann danach ein Makro automatisch
direkt danach ausführt.
Hallo Nils,
beschreib das bitte genauer.
Automatische Makros brauchen eines von den von Word festgelegten
Ereignissen um automatisch zu starten.
Als ein Beispiel ist das Open-Ereignis festgelgt, es wird
ausgelöst wenn du die Dok öffnest.
Schreib mal in das Modul „ThisDocument“ den Code
Private Sub Document_Open()
msgbox „huhu“
End Sub
Die MsgBox kommt jedesmal wenn du die Dok öffnest, also
brauchst du nur Code der automatisch ablaufen soll in die obige
Prozedur schreiben.
Du möchtest aber prinzipiell so einen Prozedurkopf:
Private Sub MailMergeDataSource_Open()
und den gibt es nicht in Word. Öffnen der Datendatei löst kein
auswertbares Ereignis in Vba aus.
Über Umwege, anderes Vorgehen kann man aber ähnliches erreichen.
a) du könntest das "Zusammenführen" des Serienbriefes mit Vba
machen und nicht mit Klick(s) "oben" in Word. Entsprechender
Vba-Code ist nachstehend.
In der Codezeile unter .Execute... kannst du mit Call...
dein Makro starten oder den Makrocode da reinschreiben.
(.Execute öffnet die Excelmappe falls Excel die datenquelle.
b) Wenn man wie ich bei meinen Kurztests ausgewählt hat daß
alle Serienbriefe dann in einem Dokument stehen dann
wird dieses Dokument zum ActiveDocument.
Dieser Dokumentswechsel ruft in dem Klassenmodul von mir
automatisch die Prozedur:
Private Sub App\_DocumentChange()
MsgBox "bin in Dokument: " & ActiveDocument.Name
End Sub
auf. Da kannste auch deinen Code reinknallen.
c) Da gab's noch 'ne Möglichkeit, grad vergessen :smile:
Lass dich nicht erschrecken von Klassenmodul o.ä., du mußt es ja
nur anwenden.
Und frag gezielt nach und wie gesagt plauder mal wie du dir da den
Ablauf genau vorstellst. Welcher Art deine Datenquelle ist, usw.
Gruß
Reinhard
Sub tt()
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=True
End With
End Sub