mein Excel-Held Reinhard hat mir einmal ein super-tolles VBA-Makro erstellt, bei dem automatisch die erste Zeile eines Word-Dokumentes als E-Mail-Empfänger an Outlook ausgegeben wird und die zweite Zeile als erste Zeile im Outlook-Textfeld. Anschließend wurden diese beiden Zeilen automatisch gelöscht und das restliche Word-Dokument automatisch als PDF gespeichert und als Anlage in dieses Outlook-Mail eingefügt.
Jetzt würde ich gerne die 3. und 4. Zeile dieses Word-Dokumentes noch in die „.Body“-Zeile einfügen (und danach im Word-Text ebenfalls löschen lassen), aber ich weiss nicht wie …
Gibt es für weiteren normalen Text in dieser Zeile eine „Mengenbeschränkung“? Nachdem ich mehr Text dort eingegeben habe, kam eine Fehlermeldung.
Für eure Hilfe wäre ich euch sehr dankbar!!!
Liebe Grüße
Karin
Sub PDF()
Dim appOut As Object, appMail As Object, Wort As Range, arrWort(1) As String
Dim W As Integer
If InStr(ActiveDocument.Sentences(1), „@“) = 0 Then
MsgBox „in der ersten Zeile ist kein @“
Exit Sub
End If
For W = 0 To 1
arrWort(W) = Replace(ActiveDocument.Sentences(1), Chr(13), „“)
ActiveDocument.Sentences(1).Delete
Next W
ActiveDocument.ExportAsFixedFormat OutputFileName:=„e:\formular\pdf\angebot.pdf“ _
, ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
Set appOut = CreateObject(„Outlook.Application“)
Set appMail = appOut.CreateItem(0)
With appMail
.To = arrWort(0)
.CC = „“
.BCC = „“
.Subject = „Angebot/Reservierungsbestätigung“
.Body = arrWort(1) & vbLf & vbLf & „in der Anlage erhalten Sie das gewünschte Angebot bzw. Reservierungsbestätigung.“ & vbLf & vbLf & „Mit freundlichen Grüßen“ & vbLf & vbLf & „Ihr Hotel XY“
.Attachments.Add „e:\formular\pdf\angebot.pdf“
.Display
'.Send
End With
End Sub
VBA-Makro erstellt, bei dem automatisch die erste Zeile eines
Word-Dokumentes als E-Mail-Empfänger an Outlook ausgegeben
wird und die zweite Zeile als erste Zeile im Outlook-Textfeld.
Anschließend wurden diese beiden Zeilen automatisch gelöscht
und das restliche Word-Dokument automatisch als PDF
gespeichert und als Anlage in dieses Outlook-Mail eingefügt.
Jetzt würde ich gerne die 3. und 4. Zeile dieses
Word-Dokumentes noch in die „.Body“-Zeile einfügen (und danach
im Word-Text ebenfalls löschen lassen), aber ich weiss nicht
wie …
probier mal den nachstehenden ungetesteten Code.
Gibt es für weiteren normalen Text in dieser Zeile eine
„Mengenbeschränkung“? Nachdem ich mehr Text dort eingegeben
habe, kam eine Fehlermeldung.
nein bzw. wenn dann erst bei viel längeren Texten *rumrat*
Bei langem Text in einer Codezeile bricht man um. Das Umbrechungszeichen ist der Unterstrich.
Eingerahmt links und rechts von einem Leerzeichen und abgeschlossen mit „Enter“.
Im Code siehst du das ja bei
ActiveDocument.ExportAsFixedFormat …
Und bitte wenn möglich die Fehlermeldung nennen und die Codezeile.
Gruß
Reinhard
Option Explicit
Sub PDF()
Dim appOut As Object, appMail As Object, arrWort(6) As String
Dim W As Integer, Mailtext As String
If InStr(ActiveDocument.Sentences(1), "@") = 0 Then
MsgBox "in der ersten Zeile ist kein @"
Exit Sub
End If
For W = 0 To 3
arrWort(W) = Replace(ActiveDocument.Sentences(1), Chr(13), "")
ActiveDocument.Sentences(1).Delete
Next W
arrWort(4) = vbLf & "in der Anlage erhalten Sie das gewünschte Angebot bzw. Reservierungsbestätigung."
arrWort(5) = vbLf & vbLf & "Mit freundlichen Grüßen"
arrWort(6) = vbLf & vbLf & "Ihr Hotel XY"
For W = 1 To 6
Mailtext = Mailtext & vbLf & arrWort(W)
Next W
ActiveDocument.ExportAsFixedFormat OutputFileName:="e:\formular\pdf\angebot.pdf" \_
, ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= \_
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, \_
Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, \_
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, \_
BitmapMissingFonts:=True, UseISO19005\_1:=False
Set appOut = CreateObject("Outlook.Application")
Set appMail = appOut.CreateItem(0)
With appMail
.To = arrWort(0)
.CC = ""
.BCC = ""
.Subject = "Angebot/Reservierungsbestätigung"
.Body = Mailtext
.Attachments.Add "e:\formular\pdf\angebot.pdf"
.Display
'.Send
End With
End Sub
vielen Dank schon mal. Das Makro funktioniert. Könntest du mir noch verraten, wie ich die übernommenen Wörter aus der 3. und 4. Zeile in den Text bringe (3. Zeile ist das Anreisedatum, 4. Zeile ist der Name des Mitarbeiters)
arrWort(4) = vbLf & „in der Anlage erhalten Sie unsere Reservierungsbestätigung. Wir freuen uns, Sie am (Anreisetag) bei uns begrüßen zu dürfen.“
arrWort(5) = vbLf & vbLf & „Mit freundlichen Grüßen“ vbLf & vbLf & "(Name Mitarbeiter)
… immer wieder staunende Grüße, wie hilfsbereit und kompetent du bist!
vielen Dank schon mal. Das Makro funktioniert. Könntest du mir
noch verraten, wie ich die übernommenen Wörter aus der 3. und
4. Zeile in den Text bringe (3. Zeile ist das Anreisedatum, 4.
Zeile ist der Name des Mitarbeiters)
arrWort(4) = vbLf & „in der Anlage erhalten Sie unsere Reservierungsbestätigung. Wir freuen uns, Sie am (Anreisetag) bei uns begrüßen zu dürfen.“
arrWort(5) = vbLf & vbLf & „Mit freundlichen Grüßen“ vbLf & vbLf & "(Name Mitarbeiter)
Hallo Karin,
ich verstehe nicht, die müßten doch schon im Text stehen?
Ich deklariere arrWort(6), d.h. es sind 7 Elemente in ArrWort.
(Naja, arrSatz wäre eine bessere Bezeichnung gewesen, kann man jja leicht ändern durch Suchen—Ersetzen im Editor.
Diese 7 Elemente haben die Indices 0 - 6.
ArrWort(0) ist der erste satz, der mit der Mailadresse
ArrWort(1) bis arrWort(3) sind die nächsten 3 Sätze/Zeilen im Dokument.
Das alles wird ja in die Variable arrWort eingelen dann im Dokument gelöscht.
arrWort(4) bis arrWort(6) sind dann die drei Sätze wie oben sichtbar.
Unten im Code, da wo die Mail „befüllt“ wird wird arrWort(0) bei „To“ eingetragen also der Mailempfänger.
arrWort(1) bis arrWort(6) kommen dann in den eigentlichen Mailtext (Body)
vbLf entspricht LineFeed also Zeilenumbruch. Damit steuerst du die Zeilenumbrüche bzw ob eine Leerzeile oder zwei kommen soll oder nicht.
For W = 0 To 1
arrWort(W) = Replace(ActiveDocument.Sentences(1), Chr(13), „“)
ActiveDocument.Sentences(1).Delete
Next W
For W = 2 To 2
arrWort(W) = vbLf & „vielen Dank für Ihre Anfrage vom heutigen Tag.“ _
& vbLf & vbLf & „Gerne senden wir Ihnen als PDF-Datei unsere Reservierungsbestätigung zu.“ _
& vbLf & vbLf & „Wir freuen uns, Sie am " & Replace(ActiveDocument.Sentences(1), Chr(13), „“) & ActiveDocument.Sentences(1).Delete & _
" im Hotel XY begrüßen und verwöhnen zu dürfen und wünschen Ihnen schon jetzt eine angenehme Anreise und einen erholsamen Aufenthalt.“ & _
vbLf & „Bei Fragen stehen wir Ihnen gerne jederzeit zur Verfügung.“
Next W
For W = 3 To 3
arrWort(W) = vbLf & „Freundliche Grüße aus Z“ _
& vbLf & vbLf & Replace(ActiveDocument.Sentences(1), Chr(13), „“) & ActiveDocument.Sentences(1).Delete & vbLf & „-Reservierung-“ & vbLf & „Hotel XY“
Next W
Mein einziges Problem ist jetzt noch, dass nach dem Anreisedatum und dem Mitarbeiternamen eine „1“ angefügt wird. Warum? Wie kann ich das korrigieren?
du hast in deinen „Zeilen“
& ActiveDocument.Sentences(1).Delete &
drin. Delete ist die Anweisung im Dokument eine Zeile zu löschen.
Diese Anweisung liefert als Rückgabewert diese 1 zurück.
For W = 0 To 1
arrWort(W) = Trim(ActiveDocument.Sentences(1))
ActiveDocument.Sentences(1).Delete
Next W
For W = 2 To 2
arrWort(W) = vbLf & "vielen Dank für Ihre Anfrage vom heutigen Tag." \_
& vbLf & vbLf & "Gerne senden wir Ihnen als PDF-Datei unsere Reservierungsbestätigung zu." \_
& vbLf & vbLf & "Wir freuen uns, Sie am " & Trim(ActiveDocument.Sentences(1)) & \_
" im Hotel XY begrüßen und verwöhnen zu dürfen und wünschen Ihnen schon jetzt eine" \_
& " angenehme Anreise und einen erholsamen Aufenthalt." & \_
vbLf & "Bei Fragen stehen wir Ihnen gerne jederzeit zur Verfügung."
ActiveDocument.Sentences(1).Delete
Next W
For W = 3 To 3
arrWort(W) = vbLf & "Freundliche Grüße aus Z" \_
& vbLf & vbLf & Replace(ActiveDocument.Sentences(1), Chr(13), "") \_
& vbLf & "-Reservierung-" & vbLf & "Hotel XY"
ActiveDocument.Sentences(1).Delete
Next W