Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1260to1264
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Scripte zusammenfassen, pers. Anrede 3 Sprachen

Scripte zusammenfassen, pers. Anrede 3 Sprachen
Squishy
Hallo zusammen
gibt es eine Möglichkeit diese beiden Scripte (welche funktionieren) zusammenzufassen, sodass beide bzw. ein Script aus dem Word gestartet werden kann?
Grundsätzlich wird ein Serienbrief einzeln als .pdf abgespeichert und danach als Anhang per Mail versendet.
Zudem wäre ich froh wenn mir jemand bei der persönlichen Anrede in 3 Sprachen helfen kann. Gedacht wäre es so, wenn in Zelle Sprache "Deutsch" und in Zelle Anrede "Herr" dann "Sehr geehrter Herr" sonst "Sehr geehrte Frau" danach weiter mit Sprache "Französisch" und zum Schluss noch "Italienisch".
Danke für eure Hilfe.
Private Const Verzeichnis = "C:\TEST" 'Pfad im den die Dateien abgespeichert werden
Private Const Praefix = "" 'Optional eine Zeichenfolge davor
Private Const Schluessel = "Datei" 'Feldname des Felds, welches den Speichername enthält
Sub Serienbrief_pro_Empfänger_abspeichern()
Application.ScreenUpdating = False
With ActiveDocument.MailMerge
If .MainDocumentType = wdNotAMergeDocument Then
MsgBox "Das aktive Dokument ist kein Seriendruckhauptdokument."
Exit Sub
End If
.DataSource.ActiveRecord = wdLastRecord
Anzahl = .DataSource.ActiveRecord
If Anzahl = 0 Then
MsgBox "Es wurden keine Datensätze gefunden."
Exit Sub
End If
flag = False
For Each x In .DataSource.DataFields
If x.Name = Schluessel Then
flag = True
Exit For
End If
Next
If flag = False Then
Q = Chr(34)
MsgBox "Das nominierte Feld " & Q & Schluessel & Q & _
" existiert nicht in der Datenquelle."
Exit Sub
End If
.Destination = wdSendToNewDocument
For i = 1 To Anzahl
.DataSource.ActiveRecord = i
dsname = Verzeichnis & "\" & Praefix & _
.DataSource.DataFields(Schluessel).Value & ".pdf"
.DataSource.FirstRecord = i
.DataSource.LastRecord = i
.Execute
ActiveDocument.Range.Find.Execute FindText:="^b", ReplaceWith:=""
ActiveDocument.SaveAs FileName:=dsname, FileFormat:=wdFormatPDF, AddToRecentFiles:=False
ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
Next i
.DataSource.FirstRecord = 1 'be smart
Application.ScreenUpdating = True
End With
End Sub

Sub Serienmails_erstellen()
Dim MyOutApp As Object, MyMessage As Object
Dim Zeile As Long, LetzteZeile As Long
Dim Sicherheit As String, Anhang As String
Sicherheit = MsgBox("Sind Sie sicher, dass Sie das Serienmail-Makro starten wollen?", vbYesNo, " _
Sind Sie sicher?") ' Sicherheitsfrage um Marko abzubrechen
If Sicherheit = vbNo Then Exit Sub
LetzteZeile = Range("A65536").End(xlUp).Row 'Ermittelt letzte Zeile
For Zeile = 2 To LetzteZeile 'Erste Daten in der Zeile 2
Anhang = "C:\TEST\" & Cells(Zeile, 14) & ".pdf" 'Pfad der gespeicherten Dateien und Name der  _
Datei in Spalte N
If Cells(Zeile, 13).Value = "" Then GoTo Sprungmarke 'Wenn keine E-Mail Addresse in Spalte M  _
vorliegt, nächste Zeile
Set MyOutApp = CreateObject("Outlook.Application")
Set MyMessage = MyOutApp.CreateItem(0)
With MyMessage
.To = Cells(Zeile, 13) 'E-Mail Adresse in Spalte M
.Subject = "Betreff" 'Betreff
.Body = "Bla Bla"
.Attachments.Add Anhang 'Beilage
.Display 'Mail wird angezeigt
'.Send Mail wird versendet
End With
Set MyOutApp = Nothing
Set MyMessage = Nothing
Application.Wait (Now + TimeValue("0:00:05"))
Sprungmarke:
Next Zeile
End Sub

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Scripte zusammenfassen, pers. Anrede 3 Sprachen
10.05.2012 01:41:11
fcs
Hallo Squishy,
grundsätzlich kann man die Makros zusammenführen.
Die große Lösung wäre, dass in Word jeweils nach dem Erstellen der PDF-Datei der Serienbrief gestartet wird.
Die entsprechenden Informationen, die in der E-mail benötigt werden, müssen dann aus den Seriendruck-Datenfeldern des jeweils aktiven Datensatzes der in Word verarbeitet wird ausgelesen und als Parameter an den E-Mail-part übergeben werden.
Das ist aber einiges an Programmieraufwand.
Die kleine Lösung:
Am Ende des Wordmakros wird die E-Mailerstellung gestartet. Dazu muss dann zu Beginn der Prozedur der Zugriff von Word auf die Exceldatei programmiert werden. Dabei könnte es ein Problem sein, dass die Datei in Word die Datenquelle (und somit geöfffnet ist). Das müßte man aber umschiffen können, indem man den Zugriff auf die Exceldatei schreibgeschützt ausführt.
Drei-sprachige Anrede: Soll diese im Serienbrief erscheinen oder/und in der E-mail?
Serienbrief:
Der einfachste Weg: Du erstellst in der Exceldatei die Anrede per Formel in einer zusätzlichen Spalte und verwendest diese als Seriendruckfeld.
Mühseliger, aber auch möglich. Du baust in die Seriendruckfelder in Word entsprechende Logik-Prüfungen ein für Sprache und Männlein/Weiblein.
E-Mail:
Auch hier wäre eine zusätzliche Spalte mit der Anrede in der Exceltabelle hilfreich.
Man kann aber mit etwa gleichem Aufwand die entsprechende Texte auch per Makro zusammenfügen.
Schema:
  Dim strAnrede As String
Select Case LCase(Zelle_Sprache)
Case "deutsch"
If Zelle_Anrede = "Herr" Then
strAnrede = "Sehr geehrter Herr "
Else
strAnrede = "Sehr geehrte Frau "
End If
Case "italienisch"
If Zelle_Anrede = "Herr" Then
strAnrede = "... "
Else
strAnrede = "... "
End If
Case "französich"
If Zelle_Anrede = "Herr" Then
strAnrede = "... "
Else
strAnrede = "... "
End If
End Select
strAnrede = strAnrede & Zelle_Name & ","
In der hochgeladenne Datei findest du ein Wordserienbrief-Dokument mit 3-sprachigen Seriendruck-Feldern inkl. der Exceldatei als Datenquelle.
Gruß
Franz
https://www.herber.de/bbs/user/80092.zip
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige