manfredwerner
Goto Top

Einzelnes Tabellenblatt als E-Mailanhang mit Outlook versenden

Hallo Forum,
In einer Excel Tabelle habe ich mehrere Tabellenblätter welche automatisch mit Inhalten aus einer Eingabemaske im ersten Tabellenblatt befüllt werden.
Zum Ausdrucken habe ich einen Steuerelemente Button mit einem Makro Verknüpft.
Sub Print()

If Range("d33") = "p" Then  
    Sheets("Tabellenblatt2").Select  
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Sheets("Grundmaske").Select  
  End If
If Range("d34") = "p" Then  
    Sheets("Tabellenblatt3).Select  
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Sheets("Grundmaske").Select  
  End If

End Sub
Wenn hier in Zelle d33 ein "p" eingegeben wird, wird das Tabellenblatt2 gedruck. steht zuätzlich ein "p" in d34 wird auch noch das Tabellenblatt3 mit ausgegeben.
Das funktioniert auch schon alles .

Nun zu meiner eigentlichen Frage:
ich möchte eine Steuerelemet einfügen bei dem via Makro eine E-Mail mit den entsprechend ausgewählten Tabellenblättern erzeugt wird.
Eine Mail je Range ist Ok, weil es unterschiedliche Empfänger sein werden.
Mein Lösungsansatz sieht so aus. Aber wie belomme ich die entsprechenden Tabellenbätter als PDF in den Anhang?
Von der Theorie her muss ja dann das jeweilige Tabellenblatt mit der Dateiendung PDF gespeichert, und dann als Anhang in eine Mail gepackt werden.

Sub Mail()

If Range("d32") = "m" Then  
    Sheets("Tabellenblatt2").Select  

Wer kann mir hier ein bisschen unter die Arme greifen..

Manferd
        Set objOutlook = CreateObject("Outlook.Application")  
        Set objMail = objOutlook.CreateItem(0)
        With objMail
            .To = ""  
            .Subject = ""  
            .Body = Sheets("Tabellenblatt2").Select  
            'Nachricht zur Kontrolle anzeigen  
            .Display        
        End With
    Sheets("Grundmaske").Select  
  End If

  If Range("d33") = "m" Then  
    Sheets("Tabellenblatt3").Select  
        Set objOutlook = CreateObject("Outlook.Application")  
        Set objMail = objOutlook.CreateItem(0)
        With objMail
            .To = ""  
            .Subject = ""  
            .Body = Sheets("Tabellenblatt3").Select  
            .Display
        End With
    Sheets("Grundmaske").Select  
  End If

End Sub

Content-ID: 327249

Url: https://administrator.de/contentid/327249

Ausgedruckt am: 23.11.2024 um 05:11 Uhr

131381
Lösung 131381 23.01.2017 aktualisiert um 14:23:27 Uhr
Goto Top
'Belegter Bereich des Tabellenblattes in die Zwischenablage kopieren  
Sheets("Tabellenblatt3").UsedRange.Copy  
With objMail 
    '....  
    ' und in die Mail einfügen  
   .GetInspector.WordEditor.Range.Paste
   .Display
End with
Gruß mik
manfredwerner
manfredwerner 23.01.2017 um 14:28:28 Uhr
Goto Top
Danke Mik
es sieht jetzt so aus:
If Range("d32") = "m" Then  
    Sheets("Tabellenblatt2").UsedRange.Copy  
        Set objOutlook = CreateObject("Outlook.Application")  
        Set objMail = objOutlook.CreateItem(0)
        With objMail
            .To = ""  
            .Subject = ""  
            .Body = txt
            .GetInspector.WordEditor.Range.Paste
            'Nachricht zur Kontrolle anzeigen  
            .Display
        End With
    Sheets("Grundmaske").Select  
  End If
Allerdings bekomme einen Laufzeitfehler Objektwariable oder With-Blockvariable nicht festgelegt

Gruß Manfred
131381
Lösung 131381 23.01.2017 aktualisiert um 14:32:50 Uhr
Goto Top
.Body = txt
Was soll das ?? Die Variable ist doch nirgendwo definiert?! Und das Copy von oben hast du auch nicht drin ...
Du brauchst den Body nicht festzulegen das macht das paste schon.
manfredwerner
manfredwerner 23.01.2017 um 14:45:51 Uhr
Goto Top
Sorry, hab s geändert,
aber was meintest Du damit den Body von oben. das Copy ist doch da oder muss ich da noch was anpassen.
If Range("d32") = "m" Then  
        Sheets("Tabellenblatt3").UsedRange.Copy  
        Set objOutlook = CreateObject("Outlook.Application")  
        Set objMail = objOutlook.CreateItem(0)
        With objMail
            .To = ""  
            .Subject = ""  
            .GetInspector.WordEditor.Range.Paste
            .Display
        End With
    Sheets("Grundmaske").Select  
  End If
manfredwerner
manfredwerner 23.01.2017 um 15:28:49 Uhr
Goto Top
Ok habe die Lösung jetzt etwas ander als zuerst geplant, aber so gefällt es mir besser...
If Range("d32") = "m" Then  
    Sheets("Tabellenblatt2").ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\temp\Tabellenblatt2.pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False  
        Set objOutlook = CreateObject("Outlook.Application")  
        Set objMail = objOutlook.CreateItem(0)
        With objMail
            .To = ""  
            .Subject = ""  
            .Attachments.Add "c:\temp\Tabellenblatt2.pdf"  
            .Display
        End With
    Kill "c:\temp\Tabellenblatt2.pdf"  
    Sheets("Grundmaske").Select  
  End If
Hier wird das Tebellenblatt zuerst in eine PDF umgewandelt, im Tempverzeichnis zwischengespeichert und als Anhang an eine Mail gepackt.
Im Anschluss wird die Dateie im Tempwerzeichnis gelöscht.

Danke für die Hilfe

Manfred