26.2k 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
TOP !!! 100%ig :-) VIELEN DANK !

Dies ist jetzt mein fertiger Code. Hatte noch 2 Sachen gelöscht.

Das mit den 2 Zellen als Namen abspeichern hab ich auch hin bekommen :-)


sPdfDateiF5 = "C:\RECHNUNGEN\" & Cells(5, "F") & Cells(13, "A").Value & ".PDF"


So meinte ich es. F5 ist die Rechnungsnummer und A13 der Name.
Kann ich nur die Sachen abspeichern die in einer Zelle stehen (als Dateinamen?)

Ich wollte eigentlich RE & Cells(5, "F") LEERTASTE & Cells(13, "A")

Wenn ich RE in die Formel schreibe, zeigt er es mir sofort als Fehler an. Wenn ich zwischen F5 und A13 Leertasten setze, macht er Sie sofort wieder weg.





Sub Makro8()

Dim sBlatt As String
Dim sPdfDateiF5 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") & 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


' 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

' ...und abschicken
OutMail.Send

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

End Sub




DANKE ! :o)

Wusste gar nicht das man so viel mit Excel machen kann..... Wie gesagt, ist alles Neuland für mich mit dem VBA.
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Leerzeichen fügst du genauso hinzu, wie du ".PDF" hinzufügst. Ein Leerzeichen im Code bewirkt natürlich gar nichts - das Leerzeichen muss im Text sein.
sPdfDateiF5 = "C:\RECHNUNGEN\" & Cells(5, "F").Value & " " & Cells(13, "A").Value & ".PDF"

Verstehst du?

sVariable = "Ich bin ein Text" ' komplett neuen Text zuweisen (und ggf. alten verwerfen)
sVariable = sVariable & " als Beispiel" ' Text an bestehenden Inhalt anfügen
sVariable = "Ich" & " " & "bin" & " " & "ein" & " " & "Text" ' macht dasselbe wie die erste Zeile
sVariable = Cells(5, "F").Value ' weist den Inhalt der Zelle F5 des aktuellen Arbeitsblattes zu


Das ".Value" wird oft großzügigerweise intern ergänzt - jedoch kann es manchmal auch fatal sein, wenn man es im Code immer weglässt.
0 Punkte
Beantwortet von
Ja, super hat geklappt.

Kann man die Nachricht von der e-Mail auch "Formatieren" ?

Also Return wäre nicht schlecht ?

Dachte ich kann einfach 2 Zellen untereinander machen und er schreibt es dann in der Mail auch untereinander.

Dem war aber leider nicht so :-P


OutMail.Body = Sheets(sBlatt).Range("I29") & Sheets(sBlatt).Range("I30")


gibt es für Return auch einen "Befehl" wie für das Leerzeichen ?
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Dachte ich kann einfach 2 Zellen untereinander machen und er schreibt es dann in der Mail auch untereinander.
Dann hast du nicht verstanden, was ich sagen wollte: Code ist etwas anderes als Text. Zwei Code-Zeilen untereinander hat nichts damit zu tun, wie der daraus resultierende Text später aussieht. Ich hoffe mal mit dem zusätzlichen Beispiel auch gleich eine möglicherweise nächste Frage zu beantworten (nämlich "wie füge ich Gänsefüßchen in einen Text ein, wenn Gänsefüßchen selbst ja Textbegrenzer sind"):
OutMail.Body = "Ich bin eine Zeile" & vbCrLf & "und ich die nächste mit ""Gänsefüßchen"" drin"
0 Punkte
Beantwortet von
Herzlichen Dank ! Hat wirklich alles genau so geklappt, wie du es gesagt hast ! Echt klasse !
...