25.6k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,

ich hoffe mir kann vielleicht jemand helfen.

Ich versuche gerade schon seit Tagen mir eine Excel Datei mit VBA aufzubauen und bin jetzt fast am Ende (aber nun scheitere ich)

:-(

Ich schreibe meine Rechnungen mit Excel und möchte das nur dieses Tabellenblatt unter PDF abgespeichert wird (Rechnungsnummer Feld F5 und Name A13)

Nun sollte die Datei z.B. in Ordner C:\Rechnungen gespeichert sein unter der Rechnungsnummer und dem Namen.

Nun sollte die Rechnung automatisch verschickt werden. Die e-Mail Adresse steht ein Tabellenblatt weiter unter Kunden. Wenn es einfacher wäre, könnte ich die e-Mail Adresse sonst auch in der Rechnung irgendwo "reinquetschen"

Hat vielleicht jemand eine Idee wie ich es machen kann ?


Ich habe hier 2 Codes die vielleicht jemand etwas anpassen kann.... ?

Dieser ist zum verschicken:

Sub Makro6()
'
' Makro6 Makro
'

'
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\RECHNUNGEN\Falsch.pdf", Quality:=xlQualityStandard _
, IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish _
:=False
Application.Dialogs(xlDialogSendMail).Show
End Sub


allerdings speichert er dies ja jetzt noch als Excel ab und nicht als PDF.

Es soll nur das Tabellenblatt abgespeichert werden, wo das VBA ist.

Hier hatte ich noch einen Code zum speichern als PDF:

Sub Makro7()
'
' Makro7 Makro
'

'
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\RECHNUNGEN\Falsch.pdf", Quality:=xlQualityStandard, IncludeDocProperties _
:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub


Aber er speichert es halt immer als "Falsch" und nicht unter der Rechnungsnummer und dem Namen.

Am besten wäre es natürlich wenn ich auch einen Text in der e-Mail beifügen kann. Also ein Feld auswählen wo ich einen Text reinschreibe und er dies in der Mail übernimmt.

DANKE IM VORAUS !!!! :o)

25 Antworten

0 Punkte
Beantwortet von
Weil dies leider nicht geklappt hat.
Wenn ich die zeile so einfüge: .Attachments.Add "C:\RECHNUNGEN\ " & Cells(6, 1).Value

wo sonst auch .Attachments.Add ist, dann geht es nicht. Bekomme nen Laufzeitfehler und es ist wieder die normale Exceldatei mit dem falschen Namen im Outlook :-(

Hats du vielleicht noch eine Idee oder sonst jemand ?

Es ist dann ja eine PDF Datei. Oder müsste das da auch noch beim Einfügen in die Formel ?

Ich kenne mich leider mit VBA nicht aus :-(
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Das war zu unüberlegt von mir kopiert und nicht nochmal geprüft; das "A1" ist fehl am Platze und beim anderen findet er natürlich keine Datei, weil das ".PDF" am Ende fehlt. Alles nur Flüchtigkeitsfehler.

Berichtigt sieht das ganze so aus:

Beim speichern als PDF sagst du doch auch schon
Filename:="C:\RECHNUNGEN\" & Cells(6, 1).Value & ".PDF "

Also warum nicht auch beim hinzufügen als Attachment so?
.Attachments.Add "C:\RECHNUNGEN\ " & Cells(6, 1).Value & ".PDF "


(Kann es nicht lokal testen.) Im übrigen wär es sehr hilfreich für die folgenden Male auch die exakten Fehlermeldungen zu benennen, sowie die Stelle im Code, an der der Interpreter stehenbleibt (gelb hinterlegte Zeile). Das gibt es nämlich alles nicht umsonst.
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo NRW oder auch M O,

schon mal etwas von Crossposting gehört? Dann ließ Dir mal das hier durch. Du solltest nicht ziemlich zeitgleich hier und in Herbers-Forum ein und die gleiche Frage stellen. Da arbeitet nun in jedem Forum die Leute vor sich hin, ohne voneinander zu wissen.
Das macht man nicht, nur um schneller zum Ziel zu kommen.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von
@son_quatsch SUPER DANKE !!!

Also es klappt auf jeden Fall. Allerdings öffnet sich immer zuerst das Outlookfenster wo dann die Datei im Excel Format ist und unter dem normalen Dateinamen.

Wenn ich das schließe und nichts mit mache, versendet er es automatisch und auch genau so wie ich es haben wollte.

Aber wieso öffnet er erst das Fenster vorher und hat im Anhang eine Excel Datei mit dem Falschen Namen ?

Habe ich da vielleicht eine Zeile zu viel drin ?

Hier die Formel:
Sub Makro8()
'
' Makro8 Makro
' Speichern und verschicken PDF
'

'
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\RECHNUNGEN\" & A1 & ".PDF ", Quality:=xlQualityStandard, IncludeDocProperties _
:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\RECHNUNGEN\" & A1 & ".PDF ", Quality:=xlQualityStandard _
, IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish _
:=False
Application.Dialogs(xlDialogSendMail).Show

Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = Sheets("Tabelle1").Range("D16")
.CC = ""
.BCC = ""
.Subject = Sheets("Tabelle1").Range("D3")
.Body = Sheets("Tabelle1").Range("A3")
.Attachments.Add "C:\RECHNUNGEN\ " & Cells(6, 1).Value & ".PDF "
.Send
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub


Also es funktioniert im 2. Schritt alles genau so wie ich es haben wollte (DANKE NOCHMAL !!!) Aber wieso öffnet er zuerst das Outlookfenster mit einer Exceldatei (und nicht PDF) und mit dem Falschen Namen ?

@Coros dies war keine Böse Absicht. Ich hatte es vorher schon einmal in einem Forum gepostet und da stand es 4 Tage ohne eine Antwort und hatte nur 3 Klicks (Forum war also wohl nicht mehr aktiv)

Nach einer Woche habe ich es dann erst Vormittags hier gepostet und Am Abend noch bei Herbers. Hatte dies Forum noch beim googeln gefunden.

Wie gesagt, war keine böse Absicht.

Vielleicht hat ja noch jemand eine Idee wieso er erst ein Outlook Fenster mit der Exceldatei öffnet ????

DANKE !!!
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Ich vermute wegen
Application.Dialogs(xlDialogSendMail).Show
- versuch das ohne diese Zeile.
0 Punkte
Beantwortet von
@Coros dies war keine Böse Absicht. Ich hatte es vorher schon einmal in einem Forum gepostet und da stand es 4 Tage ohne eine Antwort und hatte nur 3 Klicks (Forum war also wohl nicht mehr aktiv)

Nach einer Woche habe ich es dann erst Vormittags hier gepostet und Am Abend noch bei Herbers. Hatte dies Forum noch beim googeln gefunden.

Wie gesagt, war keine böse Absicht.

und warum setzt du nicht wenigstens jetzt nen link bei herber??????.
0 Punkte
Beantwortet von
Wie manche VBA als Hobby haben können....

Funktionierte alles so wunderschön.

Jetzt habe ich die Formeln auf meine richtige Datei übertragen:

Sub Makro8()
'
' Makro8 Makro
' Speichern und verschicken PDF
'

'
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\RECHNUNGEN\" & F5 & ".PDF ", Quality:=xlQualityStandard, IncludeDocProperties _
:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\RECHNUNGEN\" & F5 & ".PDF ", Quality:=xlQualityStandard _
, IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish _
:=False
Application.Dialogs(xlDialogSendMail).Show

Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = Sheets("Rechnung").Range("I2")
.CC = ""
.BCC = ""
.Subject = Sheets("Rechnung").Range("I30")
.Body = Sheets("Rechnung").Range("I29")
.Attachments.Add "C:\RECHNUNGEN\ " & Cells(6, 1).Value & ".PDF "
.Send
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub


Hier die Fehler "linie"
.Attachments.Add "C:\RECHNUNGEN\ " & Cells(6, 1).Value & ".PDF "

Liegt es an dem F5 ? Habe Cells(6, 5) und Cells(5, 6) probiert. Wie benennt man denn in Zahlen sonst F5 ?

Wenn ich Application.Dialogs(xlDialogSendMail).Show weglasse, geht es so wie ich es mir vorgestellt habe. Allerdings bisher nur in der "Testdatei" und noch nicht in der Originaldatei.

Da scheitert es wie gesagt an dem Attachements.Add ? 6, 1

Hast mich echt heute schon viel weiter gebracht !!! HERZLICHEN DANK ! Zum Glück muss ich diese Mappe nur einmal machen.....
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Wenn ich Application.Dialogs(xlDialogSendMail).Show weglasse, geht es so wie ich es mir vorgestellt habe. Allerdings bisher nur in der "Testdatei" und noch nicht in der Originaldatei.
In deinem Kopf klingt das sicher einleuchtend... doch ich sitz hier draußen!

Jetzt das ganze mal strukturiert und kommentiert - vielleicht regt das mehr an zum verstehen:
Sub Makro8()

Dim sBlatt As String
Dim sPdfDatei As String
Dim OutApp As Object
Dim OutMail As Object

' auf welches Tabellenblatt greifen wir später zu, um E-Mail, Betreff und Inhalt auszulesen?
sBlatt= "Rechnung"

' unter welchem Namen soll die PDF-Datei abgespeichert werden?
sPdfDatei = "C:\RECHNUNGEN\" & Cells(6, 1).Value & ".PDF"

' speichern als PDF
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=sPdfDatei, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

' huch - nochmal? Wohlgemerkt: wir speichern wieder unter demselben Ziel ab - überschreiben also die Datei vom Kommando zuvor!
ActiveWorkbook.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=sPdfDatei, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=False, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

' das lassen wir aus welchem Grund nochmal drin? Ich denke: auskommentieren!
Application.Dialogs(xlDialogSendMail).Show

' Bezug zu Outlook herstellen...
Set OutApp = CreateObject("Outlook.Application")

' ...damit wir eine neue E-Mail erzeugen können
Set OutMail = OutApp.CreateItem(0)

' Werte den Eigenschaften zuweisen...
OutMail.To = Sheets(sBlatt).Range("I2")
OutMail.CC = ""
OutMail.BCC = ""
OutMail.Subject = Sheets(sBlatt).Range("I30")
OutMail.Body = Sheets(sBlatt).Range("I29")

' Anhang hinzufügen
OutMail.Attachments.Add sPdfDatei

' ...und abschicken
OutMail.Send

' Objekte sauber auflösen
Set OutMail = Nothing
Set OutApp = Nothing

End Sub
0 Punkte
Beantwortet von
Hi,

danke.

gespeichert werden soll unter F5 und A13. Bedeutet das 6,1 A6 ? Wieso wird das diesmal so geschrieben ?

Und beim PDF abspeichern speichert er jetzt leider ALLE Blätter aus der Datei ab. Nicht das eigentliche wo auch das Makro ist (also brauch nur Blatt "Rechnung" speichern)





Sub Makro8()

Dim sBlatt As String
Dim sPdfDatei As String
Dim OutApp As Object
Dim OutMail As Object

' auf welches Tabellenblatt greifen wir später zu, um E-Mail, Betreff und Inhalt auszulesen?
sBlatt = "Rechnung"

' unter welchem Namen soll die PDF-Datei abgespeichert werden? //// Unter Zelle F5 und A13 (6,1 bedeutet A6 ????)
sPdfDatei = "C:\RECHNUNGEN\" & Cells(6, 1).Value & ".PDF"

' speichern als PDF ///// Jetzt speichert er ALLE Tabellenblätter ab ??? Er brauch nur Blatt "Rechnungen" speichern. (Was muss ich dafür eintragen?)
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=sPdfDatei, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

' huch - nochmal? Wohlgemerkt: wir speichern wieder unter demselben Ziel ab - überschreiben also die Datei vom Kommando zuvor!
ActiveWorkbook.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=sPdfDatei, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=False, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

' das lassen wir aus welchem Grund nochmal drin? Ich denke: auskommentieren! //// ENTFERNT


' Bezug zu Outlook herstellen...
Set OutApp = CreateObject("Outlook.Application")

' ...damit wir eine neue E-Mail erzeugen können
Set OutMail = OutApp.CreateItem(0)

' Werte den Eigenschaften zuweisen...
OutMail.To = Sheets(sBlatt).Range("I2")
OutMail.CC = ""
OutMail.BCC = ""
OutMail.Subject = Sheets(sBlatt).Range("I30")
OutMail.Body = Sheets(sBlatt).Range("I29")

' Anhang hinzufügen
OutMail.Attachments.Add sPdfDatei

' ...und abschicken
OutMail.Send

' Objekte sauber auflösen
Set OutMail = Nothing
Set OutApp = Nothing

End Sub







danke :-)
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Wenn du nochmal Code postest, dann benutz bitte auch den Button "Code" - so wie ich das ja auch mache.

gespeichert werden soll unter F5 und A13
Versteh ich nicht - deswegen geh ich jetzt davon aus, dass in beiden Zellen ein Zieldateiname stehen soll...

Bedeutet das 6,1 A6 ? Wieso wird das diesmal so geschrieben ?
Ja - in .Cells(y, x) wird immer zuerst die Zeile und dann die Spalte angegeben. Die Spalte kann auch in Buchstaben stehen.

Und beim PDF abspeichern speichert er jetzt leider ALLE Blätter aus der Datei ab. Nicht das eigentliche wo auch das Makro ist (also brauch nur Blatt "Rechnung" speichern)
Deswegen auch mein Kommentar "huch - nochmal? Wohlgemerkt: wir speichern wieder unter demselben Ziel ab - überschreiben also die Datei vom Kommando zuvor!"

Sub Makro8()

Dim sBlatt As String
Dim sPdfDateiF5 As String
Dim sPdfDateiA13 As String
Dim OutApp As Object
Dim OutMail As Object

' auf welches Tabellenblatt greifen wir später zu, um E-Mail, Betreff und Inhalt auszulesen?
sBlatt= "Rechnung"

' unter welchem Namen sollen die PDF-Dateien abgespeichert werden?
sPdfDateiF5 = "C:\RECHNUNGEN\" & Cells(5, "F").Value & ".PDF"
sPdfDateiA13 = "C:\RECHNUNGEN\" & Cells(13, "A").Value & ".PDF"

' speichert das aktuelle Blatt (=ActiveSheet) als PDF
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=sPdfDateiF5, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

' speichert die aktuelle Excelmappe (=ActiveWorkbook) als PDF
ActiveWorkbook.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=sPdfDateiA13, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=False, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

' Bezug zu Outlook herstellen...
Set OutApp = CreateObject("Outlook.Application")

' ...damit wir eine neue E-Mail erzeugen können
Set OutMail = OutApp.CreateItem(0)

' Werte den Eigenschaften zuweisen...
OutMail.To = Sheets(sBlatt).Range("I2")
OutMail.CC = ""
OutMail.BCC = ""
OutMail.Subject = Sheets(sBlatt).Range("I30")
OutMail.Body = Sheets(sBlatt).Range("I29")

' Anhang hinzufügen: ja welchen denn? Dann also beide Dateien???
OutMail.Attachments.Add sPdfDateiF5
OutMail.Attachments.Add sPdfDateiA13

' ...und abschicken
OutMail.Send

' Objekte sauber auflösen
Set OutMail = Nothing
Set OutApp = Nothing

End Sub
...