Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Range in Email Body einfuegen

Forumthread: Range in Email Body einfuegen

Range in Email Body einfuegen
03.07.2016 08:51:42
dave
Hallo VBA Freunde!
folgende Funktion bereitet mir Schwierigkeiten:
Public Sub Email(EmailAdresse As String)
Dim bereich As Range
Sheets("Pivot_Analysis").Activate
Set bereich = Sheets("Pivot_Analysis").Range(Cells(1, 1), Cells(1, 3).End(xlDown))
Set MyOutApp = CreateObject("Outlook.Application")
Set MyMessage = MyOutApp.CreateItem(0)
With MyMessage
.To = EmailAdresse
.Subject = "PHILOS OVERDUE OPPORTUNITIES"
.body = bereich
.Display
End With
Set MyOutApp = Nothing
Set MyMessage = Nothing
End Sub

Die Zeile
.body = bereich
verursacht einen Fehler: Array lower bound must be zero
Wie loese ich dieses problem?

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range in Email Body einfuegen
03.07.2016 10:23:11
Fennek
Hallo,
"Bereich" ist als Range definiert, an der Stelle .body= ist aber ein Text notwendig.
Versuche z.B. Inhalt einer Zelle: .body = cells(1,1), eine Spalte .body= join(worksheetfunction.transpose(Range("A1:A5"), ",")
In jedem Fall darf nur ein Text übergeben werden.
mfg
(ungeprüft)

Anzeige
AW: Range in Email Body einfuegen
03.07.2016 10:25:35
Matthias
Moin! Also mit .body gehen nur Variablen (bspw. Strings) oder einzelen Zellen aber keine Bereiche aus mehreren Zellen. Falls die so in die Mail sollen, dann in einem .htmlbody. Alternativ bei dir alle Zellen in einen String einlesen - wenn das so gewünscht ist. Viele Grüße

AW: Range in Email Body einfuegen
03.07.2016 10:27:31
Matthias
Moin! Also in .body gehen nur einzelne Zellen oder Variablen ( bspw. string). Bereiche aus mehreren Zellen können nur mit.htmlbody importiert werden (danggf. als Tabelle). Wenn du nur die Werte brauchst, dann ggf. alle Zellen aus deinem Bereich in einen String miteinander verketten. VG

Anzeige
AW: Range in Email Body einfuegen
03.07.2016 10:48:14
Nepumuk
Hallo,
teste mal:
Public Sub Email(EmailAdresse As String)
    
    Dim bereich As Range
    Sheets("Pivot_Analysis").Activate
    Set bereich = Sheets("Pivot_Analysis").Range(Cells(1, 1), Cells(1, 3).End(xlDown))
    
    Set MyOutApp = CreateObject("Outlook.Application")
    Set MyMessage = MyOutApp.CreateItem(0)
    With MyMessage
        .To = EmailAdresse
        .Subject = "PHILOS OVERDUE OPPORTUNITIES"
        .HTMLBody = RangeToHtml("Pivot_Analysis", bereich.Address)
        .Display
        
    End With
    
    Set MyOutApp = Nothing
    Set MyMessage = Nothing
    
End Sub

Private Function RangeToHtml( _
        ByVal pvstrWorksheetName As String, _
        ByVal pvstrRangeAddress As String) As String

    
    Dim objFilesytem As Object, objTextstream As Object
    Dim objPublishObject As PublishObject
    Dim strFilename As String, strTempText As String
    
    strFilename = Environ$("temp") & "\" & _
        Format(Now, "dd-mm-yy_hh-mm-ss") & ".htm"
    
    Set objPublishObject = ThisWorkbook.PublishObjects.Add( _
        SourceType:=xlSourceRange, _
        Filename:=strFilename, _
        Sheet:=pvstrWorksheetName, _
        Source:=pvstrRangeAddress, _
        HtmlType:=xlHtmlStatic)
    Call objPublishObject.Publish(Create:=True)
    
    Set objFilesytem = CreateObject("Scripting.FileSystemObject")
    Set objTextstream = objFilesytem.GetFile(strFilename).OpenAsTextStream(1, -2)
    
    strTempText = objTextstream.ReadAll
    Call objTextstream.Close
    
    RangeToHtml = Replace(strTempText, "align=center x:publishsource=", _
        "align=left x:publishsource=")
    
    Set objPublishObject = Nothing
    Set objTextstream = Nothing
    Set objFilesytem = Nothing
    
    Call Kill(PathName:=strFilename)
    
End Function

Gruß
Nepumuk

Anzeige
AW: Range in Email Body einfuegen
03.07.2016 10:59:22
dave
Danke leute :)
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Range in Email Body einfügen


Schritt-für-Schritt-Anleitung

Um einen Excel-Bereich in den Body einer E-Mail einzufügen, kannst Du folgenden VBA-Code verwenden. Dieser Code erstellt eine E-Mail in Outlook und fügt den gewünschten Bereich als HTML-Tabelle in den E-Mail-Body ein.

Public Sub Email(EmailAdresse As String)
    Dim bereich As Range
    Sheets("Pivot_Analysis").Activate
    Set bereich = Sheets("Pivot_Analysis").Range(Cells(1, 1), Cells(1, 3).End(xlDown))
    Set MyOutApp = CreateObject("Outlook.Application")
    Set MyMessage = MyOutApp.CreateItem(0)
    With MyMessage
        .To = EmailAdresse
        .Subject = "PHILOS OVERDUE OPPORTUNITIES"
        .HTMLBody = RangeToHtml("Pivot_Analysis", bereich.Address)
        .Display
    End With
    Set MyOutApp = Nothing
    Set MyMessage = Nothing
End Sub

Private Function RangeToHtml(ByVal pvstrWorksheetName As String, ByVal pvstrRangeAddress As String) As String
    Dim objFilesytem As Object, objTextstream As Object
    Dim objPublishObject As PublishObject
    Dim strFilename As String, strTempText As String

    strFilename = Environ$("temp") & "\" & Format(Now, "dd-mm-yy_hh-mm-ss") & ".htm"

    Set objPublishObject = ThisWorkbook.PublishObjects.Add( _
        SourceType:=xlSourceRange, _
        Filename:=strFilename, _
        Sheet:=pvstrWorksheetName, _
        Source:=pvstrRangeAddress, _
        HtmlType:=xlHtmlStatic)
    Call objPublishObject.Publish(Create:=True)

    Set objFilesytem = CreateObject("Scripting.FileSystemObject")
    Set objTextstream = objFilesytem.GetFile(strFilename).OpenAsTextStream(1, -2)

    strTempText = objTextstream.ReadAll
    Call objTextstream.Close

    RangeToHtml = Replace(strTempText, "align=center x:publishsource=", "align=left x:publishsource=")

    Set objPublishObject = Nothing
    Set objTextstream = Nothing
    Set objFilesytem = Nothing

    Call Kill(PathName:=strFilename)
End Function

Häufige Fehler und Lösungen

Ein häufiger Fehler, den Du möglicherweise erhältst, ist: "Array lower bound must be zero." Dieser Fehler tritt auf, weil der .Body-Parameter nur Text akzeptiert. Um einen Bereich aus mehreren Zellen in den E-Mail-Body einzufügen, musst Du die .HTMLBody-Eigenschaft verwenden.

Lösung: Verwende die Funktion RangeToHtml, um den Bereich in HTML zu konvertieren und ihn dann in den Body einzufügen.


Alternative Methoden

Wenn Du keine VBA-Programmierung verwenden möchtest, kannst Du auch den Bereich manuell kopieren und in die E-Mail einfügen. Hierzu:

  1. Markiere den gewünschten Bereich in Excel.
  2. Drücke Strg + C, um den Bereich zu kopieren.
  3. Öffne Outlook und erstelle eine neue E-Mail.
  4. Klicke in den E-Mail-Body und drücke Strg + V, um den Inhalt einzufügen.

Diese Methode ist zwar weniger automatisiert, funktioniert aber gut für einmalige Einsätze.


Praktische Beispiele

Hier sind einige Beispiele für die Verwendung des Codes:

  • Wenn Du eine Tabelle in den E-Mail-Body einfügen möchtest:

    • Stelle sicher, dass der Bereich korrekt definiert ist, z.B. Set bereich = Sheets("Pivot_Analysis").Range("A1:C10").
  • Wenn Du nur bestimmte Zellen einfügen möchtest, kannst Du den Bereich anpassen:

    Set bereich = Sheets("Pivot_Analysis").Range("A1:A5")

Tipps für Profis

  • Achte darauf, dass der Bereich, den Du in den E-Mail-Body einfügen möchtest, nicht zu groß ist, um Probleme mit der Darstellung in der E-Mail zu vermeiden.
  • Überlege, ob Du das E-Mail-Format auf HTML einstellen möchtest, um eine bessere Formatierung zu erhalten.
  • Nutze die Kill-Funktion, um temporäre Dateien nach dem Senden der E-Mail zu löschen und Speicherplatz zu sparen.

FAQ: Häufige Fragen

1. Frage: Kann ich auch Bilder oder Grafiken in den E-Mail-Body einfügen?
Antwort: Ja, Du kannst Bilder in den E-Mail-Body einfügen, indem Du die HTML-Tag <img> in der HTML-Body-Eigenschaft verwendest.

2. Frage: Welche Excel-Version benötige ich für diesen VBA-Code?
Antwort: Der Code sollte in Excel ab 2010 funktionieren, da er die Outlook-Objektbibliothek nutzt, die in diesen Versionen verfügbar ist.

3. Frage: Was ist der Unterschied zwischen .Body und .HTMLBody?
Antwort: .Body akzeptiert nur einfachen Text, während .HTMLBody HTML-Inhalt erlaubt, was bedeutet, dass Du formatierte Tabellen und andere HTML-Elemente einfügen kannst.

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