Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bereich aus Excel per Mail versenden

Bereich aus Excel per Mail versenden
05.07.2023 10:50:01
Lilli

Hallo Zusammen,

ich habe hier im Archiv gesucht und bin zum Teil und zum Glück fündig geworden.
Ich suche bitte eine Lösung, wo ich einen Bereich in Excel per Outlook versenden kann.

Den Code, den ich im Archiv gefunden habe:

Sub Excel_FixRange_via_Outlook_Senden()
    Dim OutApp As Object, Mail As Object, i
    Dim Nachricht
    'Verweis auf "Microsoft Forms 2.0 Object Library" aktivieren !!
    'sonst geht es nicht
    'Dataobject wird gebraucht wegen der Zwischenablage
    Dim ClpObj As DataObject
    Set ClpObj = New DataObject
    Set OutApp = CreateObject("Outlook.Application")
    Set Nachricht = OutApp.CreateItem(0)
    'Excelbereich der versendet werden soll
    'Bereich wird in die Zwischenablage kopiert
    Range("A1:A5").Copy
    For i = 1 To 3
    With Nachricht
        .Subject = "Betreffzeile Header"
        'Zwischenablage wird eingefügt
        ClpObj.GetFromClipboard
        .Body = ClpObj.GetText(1)
        .To = "irgendwer@irgendein-provider.de"
        'Hier wird die Mail angezeigt
        .Display
        'Hier wird die Mail gleich in den Postausgang gelegt
        .Send
    End With
    Next i
    Set OutApp = Nothing
    Set Nachricht = Nothing
End Sub


Ich bräuchte bitte einige Ergänzungen.
a) Der Betreff soll aus der Zelle G3 bzw. ich habe es betreff.zelle genannt.
b) mit dem Code bekomme ich nur den Inhalt, leider nur als Text. Aber ich möchte gerne, dass die Tabelle so wie sie ist mit all die Formatierung übertragen wird.
c) ich möchte in Zelle H3 bzw. die benannte Zelle sende.termin Datum und Uhrzeit schreiben, wann es versendet werden soll.
d) Der Empfänger soll bitte auch aus eine Zelle kommen. I3 bzw. ziel.adresse

Vielen lieben Dank für die Hilfe und für die Mühe im Voraus.

Liebe Grüße,
Lilli

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereich aus Excel per Mail versenden
05.07.2023 11:35:44
volti
Hallo Lilli,

ich würde Dir eine HTML-Mail dafür empfehlen.
Grundsätzlich gibt es mehrere Möglichkeiten Bilder oder Tabellen in eine Mail zu bekommen.
Mit dem u.a. Codebeispiel wird ein Tabellenbereich als Tabelle eingefügt. Ginge natürlich auch als Bild usw.
Besonderheit hier: als Platzhalter für den Zeilenumbruch habe ich das Zeichen 182 verwendet, welches später durch den HMTL-Tag <br> ersetzt wird.

In diesem Thread hier wird auch noch mal eine Möglichkeit via Range2HTML aufgezeigt.
https://www.herber.de/forum/cgi-bin/call_thread.pl?index=1932621

Code:


Sub Mail_erstellen() Dim sMailtext As String, WSh As Worksheet Set WSh = ActiveSheet ' ThisWorkbook.Sheets("balaba") With CreateObject("Outlook.Application").CreateItem(0) .BodyFormat = 2 ' HTML-Format .To = WSh.Range("I3").Value ' Empfänger .CC = "" .Subject = WSh.Range("G3").Value ' Betreff .Getinspector.Display ' Hole Signatur sMailtext = "Hallo,¶¶" _ & "anbei sende ich Ihnen die Daten:¶" .htmlbody = Replace(sMailtext, "", "<br>") & "<br>" & .htmlbody WSh.Range("A1:A5").Copy ' Bereich kopieren, ggf. Tabelle anpassen With .Getinspector.WordEditor.Application.Selection .Start = (Len(sMailtext) - 1) ' Grafik Einfügestelle, ggf. mit Position spielen .Paste ' Bereich in Mail einfügen End With WSh.Range("H3").Value = Now() & " Uhr" End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz



Anzeige
AW: Bereich aus Excel per Mail versenden
05.07.2023 14:05:49
Lilli
Hallo Karl-Heinz,

vielen Dank für den Code. Bei mir kommt die Fehlermeldung: Microsoft Visual Basic for Application X 400,
was ich leider nichts darunter vorstellen kann.

Ich versuche gleich den Link, den Du mir zugemailt hast zu probieren.

Was muss ich an dem Teil ändern, damit das Makro der kopierte Inhalt nicht nur als Text einfügt?

   .Body = ClpObj.GetText(1)
Vielen Dank für Deine Mühe im Voraus.

Liebe Grüße,
Lilli


Anzeige
AW: Bereich aus Excel per Mail versenden
05.07.2023 14:47:04
volti
Hallo Lilli,

---Was muss ich an dem Teil ändern, damit das Makro der kopierte Inhalt nicht nur als Text einfügt?---
Dim ClpObj As DataObject
Set ClpObj = New DataObject
ClpObj.GetFromClipboard
.body = ClpObj.GetText(0)


Für Dein Anliegen diesen code entfernen, er funktioniert nur für Text.

Ggf. durch diesen code ersetzen (ungetestet)...
     .Display
     With .Getinspector.WordEditor.Range
          .Collapse (1)
          .Paste
     End With
Gruß Karl-Heinz


Anzeige
AW: Bereich aus Excel per Mail versenden
06.07.2023 10:55:02
Lilli
Hallo Karl-Heinz,

ich habe von Deine Seite bzw. von den Link, was Du gepostet hast folgenden Code genommen und es hat super funktioniert.

Sub MailErstellen()
' Sendet Mail mit integriertem Bereich als Bereich mit Signatur
  Dim WSh As Worksheet
  Dim sMailtext As String
  Dim sBer As String
  
  sBer = "mail.druck.bereich"                       ' Kopierbereich
  Set WSh = ThisWorkbook.Sheets("MailVersand")        ' Blatt mit Maildaten
  
  WSh.Range(sBer).Copy                              ' Bereich kopieren
  
  With CreateObject("Outlook.Application").CreateItem(0)
      .BodyFormat = 2                               ' 2=HTML-Format, 3=Richtext
      .Subject = WSh.Range("betreff.zelle")         ' Betreff
      .To = "ziel.adresse" ' Empfänger
      .CC = "ziel.adresse.2" ' Kopie CC
'      sMailtext = "Hallo,¶Ihre Daten:¶¶"             ' Mailbodytext
'      sMailtext = Replace(sMailtext, "¶", vbLf)     ' Umbrüche einfügen
      .Getinspector                                 ' Signatur holen
      .htmlbody = Replace(sMailtext, vbLf, "
") & .htmlbody .Display With .Getinspector.WordEditor.Application.Selection .Start = Len(sMailtext): .Paste ' Grafik in Mail einfügen End With End With End Sub
zwei Sachen funktionieren noch nicht so ganz ist:
Die Empfängeradresse möchte ich gerne aus eine Zelle entnehmen: aus G5 oder ziel.adresse
und die CC Empfängeradresse soll auch aus eine Zelle sein: aus G6 oder ziel.adresse.2

was für mich noch wichtig wäre, dass der Absendezeit aus eine Zelle ist: G8 oder sende.termin

Vielen Dank für Deine Mühe im Voraus.

liebe Grüße,
Lilli :)


Anzeige
AW: Bereich aus Excel per Mail versenden
06.07.2023 11:27:15
Lilli
Besteht vielleicht auch die Möglichkeit einen Sendedatum und Uhrzeit automatisch einzutragen, wenn eine Mail gesendet wurde?

in der Spalte AA10 bis AA210 stehen die Positionen von den Eintragung. in der Spalte AZ soll das Datum eingetragen werden, wenn eine Mail gesendet worden ist.

In der Mailversand Tabelle ziehe ich die Daten aus der Daten-Tabelle, damit ich die Daten untereinander habe. Das heißt, dass die Position von der Zeile ist schon durch die Spalte AA10 ... angegeben.
Das Makro soll nach dem Versand in der Spalte AZ Datum und Uhrzeit eingetragen werden.

Ich kann die Tabelle nicht mehr posten, weil so viele Daten darin sind. Notfalls muss ich die Tabelle neu erstellen.

Vielen Dank noch für die Mühe im Voraus.

Liebe Grüße
Lilli


Anzeige
AW: Bereich aus Excel per Mail versenden
06.07.2023 14:36:36
volti
Hallo Lilli,

die Empfänger kannst Du doch genauso eintragen, wie Du es beim Betreff gemacht hast, mit Range()
Das Beispiel mit dem Eintrag der Versendezeit hatte ich ja schon mal gezeigt. Jetzt ist es noch mal drin.
Allerdings kann ich in Spalte "AZ" nichts eintragen, es muss schon eine Zelle sein. Deine weiteren Ausführungen habe ich nicht verstanden.

Code:


Sub MailErstellen() ' Sendet Mail mit integriertem Bereich als Bereich mit Signatur Dim WSh As Worksheet Dim sMailtext As String Set WSh = ThisWorkbook.Sheets("MailVersand") ' Blatt mit Maildaten If CDate(WSh.Range("sende.termin").Value) >= Now() Then Exit Sub WSh.Range("mail.druck.bereich").Copy ' Bereich kopieren With CreateObject("Outlook.Application").CreateItem(0) .BodyFormat = 2 ' 2=HTML-Format, 3=Richtext .Subject = WSh.Range("betreff.zelle").Value ' Betreff .To = WSh.Range("ziel.adresse").Value ' Empfänger .CC = WSh.Range("ziel.adresse.2").Value ' Kopie CC ' sMailtext = "Hallo,¶Ihre Daten:¶¶" ' Mailbodytext ' sMailtext = Replace(sMailtext, "¶", vbLf) ' Umbrüche einfügen .Getinspector.Display ' Signatur holen .htmlbody = Replace(sMailtext, vbLf, "") & .htmlbody With .Getinspector.WordEditor.Application.Selection .Start = Len(sMailtext): .Paste ' Grafik in Mail einfügen End With WSh.Range("AZ10").Value = Now() & " Uhr" ' Sendeuhrzeit eintragen End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz



Anzeige
AW: Bereich aus Excel per Mail versenden
07.07.2023 17:17:26
Lilli
Hallo Karl-Heinz,

ich habe Dein Code kopiert und genau so eingefügt. Bevor der Makro startet bekomme ich die Fehlermeldung:
microsoft visual basic for applications 400 X
ich weiß nicht, was ich da falsch gemacht habe, dass so ein Fehler entsteht.

Liebe Grüße,
Lilli


Anzeige
AW: Bereich aus Excel per Mail versenden
07.07.2023 20:54:19
Volti
Hallo Lilli,
Zu dem Fehler kann ich leider ohne Datei nichts sagen.
Kenn ich nicht und kommt bei mir nicht vor.

Gruß KH


Anzeige
AW: Bereich aus Excel per Mail versenden
05.07.2023 11:58:05
volti
Hallo Lilli,

vielleicht noch eine Erklärung zu Deinem Code....
'Zwischenablage wird eingefügt
ClpObj.GetFromClipboard
.Body = ClpObj.GetText(1)


GetText(1) holt Daten aus der Zwischenablage, wobei die 1 = CF_TEXT für nur Text steht.
Es gibt noch andere Formate, die mir aber noch nie erfolgreich geglückt sind.

Gruß KH

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Bereich aus Excel per Mail versenden


Schritt-für-Schritt-Anleitung

  1. Vorbereitung: Stelle sicher, dass du die "Microsoft Forms 2.0 Object Library" in den Verweisen von VBA aktiviert hast. Dies ist notwendig, um die Zwischenablage zu nutzen.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  3. Neues Modul erstellen: Klicke mit der rechten Maustaste auf VBAProject (DeineDatei.xlsx) > Einfügen > Modul.

  4. Code einfügen: Verwende den folgenden VBA-Code, um einen Bereich aus Excel per Outlook zu versenden:

    Sub MailErstellen()
       Dim WSh As Worksheet
       Set WSh = ThisWorkbook.Sheets("MailVersand") ' Blatt mit Maildaten
    
       ' Bereich kopieren
       WSh.Range("mail.druck.bereich").Copy
    
       With CreateObject("Outlook.Application").CreateItem(0)
           .BodyFormat = 2 ' HTML-Format
           .Subject = WSh.Range("betreff.zelle").Value ' Betreff
           .To = WSh.Range("ziel.adresse").Value ' Empfänger
           .CC = WSh.Range("ziel.adresse.2").Value ' CC Empfänger
           .Getinspector.Display ' Signatur holen
    
           With .Getinspector.WordEditor.Application.Selection
               .Start = Len("Hallo, Ihre Daten:") ' Einfügestelle
               .Paste ' Bereich einfügen
           End With
    
           WSh.Range("AZ10").Value = Now() & " Uhr" ' Sendezeit eintragen
       End With
    End Sub
  5. Code anpassen: Ändere die Zellenbezüge ("mail.druck.bereich", "betreff.zelle", "ziel.adresse", etc.), um sie an deine Bedürfnisse anzupassen.

  6. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle dein Makro aus und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler 400: Dieser Fehler kann auftreten, wenn das Makro auf ein nicht vorhandenes Blatt oder eine nicht existierende Zelle zugreift. Überprüfe die Zellbezüge und stelle sicher, dass alle erforderlichen Zellen vorhanden sind.

  • Inhalt wird nur als Text eingefügt: Stelle sicher, dass du .BodyFormat = 2 (HTML-Format) verwendest. Wenn du den Inhalt als Tabelle versenden möchtest, benutze .Getinspector.WordEditor.Application.Selection.Paste.


Alternative Methoden

  • HTML-Mails: Verwende HTML-Format in der Mail, um Tabellen und Bilder korrekt darzustellen. Im Code kannst du .BodyFormat = 2 verwenden, um das HTML-Format zu aktivieren.

  • Range2HTML: Eine weitere Methode zur Übertragung von Excel-Daten in E-Mails ist das Nutzen von Range2HTML, das den Excel-Bereich in ein HTML-Format umwandelt.


Praktische Beispiele

Hier sind einige Anpassungen, die du in deinen Code integrieren kannst:

  1. Betreff aus Zelle:

    .Subject = WSh.Range("G3").Value ' Betreff aus Zelle G3
  2. Empfänger aus Zelle:

    .To = WSh.Range("I3").Value ' Empfänger aus Zelle I3
  3. Versandzeit:

    WSh.Range("H3").Value = Now() ' Versandzeit in Zelle H3 eintragen

Tipps für Profis

  • Automatisierung: Du kannst das Makro so einstellen, dass es zu einem bestimmten Zeitpunkt automatisch ausgeführt wird, indem du die OnTime-Methode von VBA verwendest.

  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen in deinem VBA-Code, um unerwartete Fehler abzufangen und zu behandeln.

  • Sicherheitswarnungen: Achte darauf, dass Excel und Outlook so konfiguriert sind, dass sie Makros zulassen. Andernfalls kann es zu Sicherheitswarnungen kommen.


FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um mehrere Empfänger hinzuzufügen? Du kannst die Empfängeradressen durch Kommas trennen:

.To = WSh.Range("I3").Value & "; andereadresse@beispiel.de"

2. Welche Excel-Version benötige ich für diese VBA-Skripte? Die Skripte sind in Excel 2010 und späteren Versionen getestet. Stelle sicher, dass du über die notwendigen Berechtigungen verfügst, um Makros auszuführen.

3. Kann ich die E-Mails auch im Entwurf speichern, anstatt sie sofort zu senden? Ja, ersetze .Send durch .Display, um die E-Mail im Entwurf zu speichern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige