VBA Werte-Übergabe an Dateinamen

Hallo Allerseits,

Ich habe folgendes Problem:

Ich soll ein VBA-Skript erstellne, welches eine Word-Datei in ein PDF-Dokument umformatiert (Das habe ich schon geschafft) und das ganze als E-Mail an einen Empfänger schickt, dessen E-Mail-Adresse im Dokument steht. Hierbei handelt es sich um eine Rechnung. Die Datei soll als Rechnungsnummer.pdf abgespeichert werden.

Ich bin schon so weit, dass das ganze abgespeichert wird und versendet wird. Das ganze ist abgepinnt muss ich gestehen.
Nun muss noch der Rechnungsname in den Dokumentennamen und die Arrays müssen so gesetzt werden, dass die E-Mail-Adresse nicht zu beginn des Dokuments stehen müssen.

Hier „mein“ bisheriges Werk: Sub tt()
Dim appOut As Object, appMail As Object, Wort As Range, arrWort(1) As String
Dim Anz As Integer
For Each Wort In ActiveDocument.Words
If InStr(Wort, Chr(13)) = 0 Then
arrWort(Anz) = Wort
Anz = Anz + 1
If Anz = 2 Then Exit For
End If
Next Wort
ActiveDocument.ExportAsFixedFormat OutputFileName:=„C:\Users\giuliano\desktop(arrWort(2)).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 = „Rechnung / Anmeldebestätigung“
.Body = „Hiermit bestätigen wir Ihren Zahlungseingang.“
.Attachments.Add „C:\Users\giuliano\desktop\Rechnung.pdf“
.Display
.Send
End With
End Sub

Hallo Gugufe,

Ich bin schon so weit, dass das ganze abgespeichert wird und
versendet wird. Das ganze ist abgepinnt muss ich gestehen.
Nun muss noch der Rechnungsname in den Dokumentennamen

funtioniert denn dein Code ordnungsgemäß, ich glaub nich.
Teste mal den nachfolgenden Code und berichte bitte.

und die
Arrays müssen so gesetzt werden, dass die E-Mail-Adresse nicht
zu beginn des Dokuments stehen müssen.

Wie soll Vba erkennen wo denn die Adresse im Dokument steht?

Gruß
Reinhard

Option Explicit

Sub tt()
Dim appOut As Object, appMail As Object, Wort, arrWort(1) As String
Dim Anz As Integer
Const Pfad As String = "C:\Users\giuliano\desktop\"
For Each Wort In ActiveDocument.Words
 If InStr(Wort, Chr(13)) = 0 Then
 arrWort(Anz) = Left(Wort, Len(Wort) - 1)
 Anz = Anz + 1
 If Anz = 2 Then Exit For
 End If
Next Wort
ActiveDocument.ExportAsFixedFormat OutputFileName:=Pfad & arrWort(1) & ".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 = "Rechnung / Anmeldebestätigung"
 .Body = "Hiermit bestätigen wir Ihren Zahlungseingang."
 .Attachments.Add Pfad & arrWort(1) & ".pdf"
 .Display
 '.Send
End With
End Sub

Hallo Reinhard.

Ich bin inzwischen ein klein wenig weiter und die Aufgabenstellung hatte sich geändert.

Mit dem Array arrWort() hatte ich angegeben, welches Wort er als Wert übergeben soll. Das Problem hierbei ist, wenn die E-Mail-Adresse nach dem Adressblock steht und der Empfänger einen Doppelnamen oder ähnliches hat (ein Wort zum standard hinzu kommt), dann wird nicht mehr die E-Mail-Adresse sondern das Wort, welches vor der E-Mail-Adresse steht übernommen.

Nun überlege ich, ob ich nicht in die ersten Spalten die benötigten Infos schreibe und den Text dann Transparent machen soll. Ich weiß jedoch nicht, wie ich ein Array erstellen kann, welches Als arr(0)=Zeile 1, arr(1)=Zeile 2 usw übernimmt.

Da wir das Dokument noch über eine Datenbank erstellen, kann ich das ganze leider nicht in Form einer Tabelle im Word-Dokument lösen.

Das ganze sieht inzwischen so aus:

Sub tt()
Dim appOut As Object, appMail As Object, Wort As Range, arrWort(15) As String
Dim Anz As Integer
For Each Wort In ActiveDocument.Words
If InStr(Wort, Chr(13)) = 0 Then
arrWort(Anz) = Wort
Anz = Anz + 1
If Anz = 15 Then Exit For
End If
Next Wort
ActiveDocument.ExportAsFixedFormat OutputFileName:=„C:\Users\giuliano\desktop\RE-“ + arrWort(5) + „.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 = „Rechnung / Anmeldebestätigung“
.Body = „Hiermit bestätigen wir Ihren Zahlungseingang. Im Anhang befindet sich die Rechnung zu der Veranstaltung“ + arrWort(n) + „.“
.Attachments.Add „C:\Users\giuliano\desktop\RE-“ + arrWort(5) + „.pdf“
.Display
.Send
End With
End Sub

Aber wie gesagt: Es dürfen nun keine Doppelnamen, längere Straßennamen oder ähnliches vorkommen.

Nun überlege ich, ob ich nicht in die ersten Spalten die benötigten Infos schreibe und den Text dann Transparent machen soll. Ich weiß jedoch nicht, wie ich ein Array erstellen kann, welches Als arr(0)=Zeile 1, arr(1)=Zeile 2 usw übernimmt.

Vielen Dank schonmal.

Ach ja und ich brauch beim speichern noch eine Überprüfung, ob es den Daetinamen schon gibt. Falls mal eine Rechnungsnummer doppelt übergeben wird.

Aber wie gesagt: Es dürfen nun keine Doppelnamen, längere
Straßennamen oder ähnliches vorkommen.

Nun überlege ich, ob ich nicht in die ersten Spalten die
benötigten Infos schreibe und den Text dann Transparent machen
soll. Ich weiß jedoch nicht, wie ich ein Array erstellen kann,
welches Als arr(0)=Zeile 1, arr(1)=Zeile 2 usw übernimmt.

Hallo Gugufe,

ich habe bei arrWort hinten ein Zeichen entfernt, warum wohl?
Ich weiß noch nicht was du da mit transparent erreichen willst.

Lade mit dem obersten Hochladlink in FAQ:2606 ein Dokument hoch.
Anonymisieren kannste aber die Wort/Dokument - Struktur, -Anordnung
muß gleich bleiben.

Gruß
Reinhard

Lieber Reinhard,

leider kann ich keins der Dokumente hochladen.

Zur Dokumentstruktur:

RE-Nr.:xxxxxx
Name
e-Mail Adresse
Briefanrede (Bis hier ist alles Transparent, sodass man es im PDF-Dokument nicht sieht)

Name
Str
PLZ Ort
Land

Betreff

usw…

Das transparent Geschriebene soll mein Arraybereich werden, welches die Daten weitergibt.

Vielen Dank nochmal

Hallo Gugufe,

leider kann ich keins der Dokumente hochladen.

wer oder was soll(te) dich daran hindern?

Mir sind aufgrund deiner Anfrage noch zuviele Dinge ungeklärt
als daß ich mit der reinen Angabe deiner Dokumentstruktur zufrieden
bin. Ich will sie „sehen“, jedes Zeichen, Steuerzeichen wie Satzende
usw.

Du kannst doch wohl völlig erfunden oder aus anonymisierten
Originaldokumentkopfbereichen Kopfbereichen ein Dokument mit
k.A. 3-5 Seiten erstellen und uns hier zeigen/hochladen?

Das mit dem transparent habe ich jetzt verstanden. Okay,
zeige auch das im hochgeladenen Dokument bzw. dessen Seiten.

Gruß
Reinhard

Hallo Reinhardt,
entschuldige bitte, dass ich jetzt erst schreibe, aber ich brauch auch mal Urlaub.

Aslo ich versuchs jetzt doch anders und zwar will ich eine Tabelle nehmen und die Daten daraus verwenden.

Soll so aussehen, dass eine Tabelle mit Zelle(Anschrift), Rechnungsnummer, Veranstaltung und einer Zelle(E-mail) erstellet wird.
Wir haben nämlich doch eine möglichkeit gefunden, die Daten aus der Datenbank in eine Tabelle im Word Dokument zu bekommen. Ich weiß nur nicht, wie Ich die Daten aus der Tabelle ins Array bekomme. Suche schon seit gestern Mittag alles ab und versuche alles mögliche. Jedoch bisher ohne Erfolg. :frowning:

Hallo Gugufe,

Aslo ich versuchs jetzt doch anders und zwar will ich eine
Tabelle nehmen und die Daten daraus verwenden.

man kann auch sagen schon wieder anders wie du von
Beitrag zu Beitrag m.E. zeigst.
Macht mir echt keinen Bock mich jedesmal neu eindenken zu müssen.

Beispieldatei kannste nicht hochladen sagst du.
Warum, wird nicht verraten trotz meiner Nachfrage.
So wird das nix.

Gruß
Reinhard

So habe jetzt doch mal eine Datei hochgeladen:

In die oberste Tabelle (die eig Transparent ist) kom…

Word Tabelle in Array einlesen

In die oberste Tabelle (die eig Transparent ist) kommen aus
einem anderen Programm Werte. Diese sollen nun in ein Array
geschrieben werden, um mit Hilfe dieses Arrays das Dokument
unter der Rechnungsnummer abzuspeichern, eine E-Mail an den
Empfänger zu schicken, die im Body unter anderem die Anrede
und die Veranstalltung beinhaltet. Nun fehlt mir nur noch das
Array.

Hallo Giuliano,

probier mal nachstehende Funktion. Wenn sie bei dir klappt brauchste
nur die „fetten“ Dinge in deinen Hauptcode einbauen.

Gruß
Reinhard

Option Explicit

Sub Test()
**Dim arrWort** , N
**arrWort = LeseTab**
For N = 0 To 3
 MsgBox arrWort(N)
Next N
End Sub

Function LeseTab()
Dim Zei, arrZ(3)
With ActiveDocument.Tables(1) 'Documents("Dokument1").Tables(1)
 For Zei = 0 To 3
 arrZ(Zei) = Replace(Replace(.Cell(Zei + 1, 1).Range.Text, \_
 Chr(7), ""), Chr(13), "")
 Next Zei
End With
LeseTab = arrZ
End Function
1 Like

Jo Danke hat 1a dfunktioniert. Musste nur noch n bissl rumbasteln und ausprobieren aber dann hats letztendlich geklappt. :smile:

Function LeseTab()
Dim Zei, arrZ(3)
With ActiveDocument.Tables(1) 'Documents(„Dokument1“).Tables(1)
For Zei = 0 To 3
arrZ(Zei) = Replace(Replace(.Cell(Zei + 1, 1).Range.Text, _
Chr(7), „“), Chr(13), „“)
Next Zei
End With
LeseTab = arrZ
End Function

Sub tt()
Dim appOut As Object, appMail As Object
Dim Anz As Integer
Dim arrWort, N
arrWort = LeseTab

ActiveDocument.ExportAsFixedFormat OutputFileName:=„C:\Pfadname“ + arrWort(1) + „.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 = „Rechnung / Anmeldebestätigung“
.Body = arrWort(2) + „gewünschter Text „“ + arrWort(3) + „“.“
.Attachments.Add „C:\Dateipfad“ + arrWort(1) + „.pdf“
.Display
.Send
End With
Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentWithMarkup, Copies:=1, Pages:="", PageType:= _
wdPrintAllPages, Collate:=True, Background:=True, PrintToFile:=False, _
PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
PrintZoomPaperHeight:=0
End Sub

Zur Erklärung: man muss im Dokument eine Tabelle haben, die in der ersten Zeile die E-Mail-Adresse beinhaltet, in der 2. die Re-Nr, in der 3. die Briefanrede (Sehr geehrte/r Herr/Frau sowieso)und in der 4. Zeile muss noch die Veranstaltung stehen.

Habe noch als kleines feature ein Macrobutton in die Symbolleiste gepackt.

Bei Word 2010:
Optionen->Menüband anpassen
unter Befehle auswählen: „Makros“ ausgewählt
anschließend werden einem die eigenen Makros (globale) angezeigt
Dann noch unter der gewünschten Registerkarte eine neue Gruppe erstellt und das Makro hinzugefügt.

Vielen Dank hier noch einmal an Reinhard. 100 Sterne von mir.