Vba Email aus Excel HTML Größe einstellen

Hallo zusammen,

ich habe ein VBA Programm geschrieben, welches mir Daten in einer Tabelle mit mehreren Spalten aufbereitet. Diese Daten möchte ich dann per Mail (Outlook 2007) versenden.

Das Makro läuft alles wunderbar, allerdings ist die Tabelle so groß, dass man sie nicht auf DinA4 ausdrucken kann. Sie ist einfach zu lang.

Gibt es eine Möglichkeit die Größe zu beeinflussen?

Das Makro besteht aus 2 Sub’s. Die erste generiert die Mail, die 2.Sub markiert den gewünschten Bereich der Tabelle in Excel und wandelt diese in HTML um. Der HTML teil wird dann in der 1.Sub im Body der Email eingefügt.

Falls ihr den Code sehen wollt, einfach sagen, dann poste ich den hier, ansonsten wirds hier zu lang.
Die Sub, die die Tabelle in HTML umwandelt hab ich hier gefunden:
http://www.ms-office-forum.net/forum/showthread.php?..

Mein Code sieht ähnlich aus, wurde halt nur auf meine Bedürfnisse angepasst.

Wäre super, wenn mir da jemand helfen könnte. Vielleicht gibts auch ne andere Lösung. Ich möchte nur nicht, dass die Tabelle im Anhang gesendet wird. Sie sollte schon in der Email selbst drin sein, also im Body.

Gruß Markus

Keine Ahnung, verstehe das Problem nicht so ganz, warum soll es auf eine DIN A4 Seite passen? Sollte die Größe nicht durch die Seitenumbrüche eingestellt sein? Was ist es für ein Ausgabeformat (PDF,Excel,…)?

Gruß

Vielleicht kannst du ja den markierten Bereich als Druckbereich festlegen, dann per VBA das Dokument als PDF drucken und dann an die Mail anhängen.

Liebe Grüße

OVM

Gerade das will ich ja vermeiden, es soll kein Anhang generiert werden, sondern die Tabelle wird direkt in der Email dargestellt:

Text Text Text
Tabelle
Text Text Text

Die Größe der Tabelle kann ich in Excel nicht beeinflussen (Seitenumbrüche oder Druckbereich). Das müsste durch HTML wahrscheinlich geschehen.

In erster Linie soll die Email mehrere Angaben zu einem Projekt übermitteln. Dem Empfänger soll es möglich sein, die Daten direkt zu sehen. Er soll aber auch die Möglichkeit haben die Email, bei mehreren Positionen, auszudrucken, damit er nicht immer zwischen Emailprogramm und SAP umschalten muss.

Hallo coolcarver,

warum wandelst du eine Exceldatei in HTLM-Code um?

Transferiere doch einfach die Excel-Tabelle nach Outlook mit nachfolgendem Code. Dann kannst Du die Excel-Datei per e-Mail versenden etc…

Die Excel-Datei kann dann der Empfänger normal öffnen und über die Druckoptionen seinen Bedürfnissen anpassen.

Option Explicit

’ eMail versenden
Sub BereichAlsEMailVersenden()
Dim fRow As Long
Dim Empfänger As String
Dim Bereich As Range
’ 1 =
Application.SheetsInNewWorkbook = 1
Empfänger = „e-Mail-Adresse(n) de(s)r Empfänger(s) eingeben !“

’ Zellen nachbearbeiten - Beginn
’ ------------------------------
’ Letzte- belegte Zeile feststellen
fRow = Cells(Rows.Count, 1).End(xlUp).Row
’ Bereich selektieren (Datumsformat)
Range(Cells(3, 8), Cells(fRow, 8)).Select
Selection.NumberFormat = „m/d/yyyy“
’ Bereich selektieren (Spaltenbreite)
Range(Cells(2, 1), Cells(fRow, 11)).Select
Selection.Columns.AutoFit
’ Zellen nachbearbeiten - Ende
’ ----------------------------
’ Bereich selektieren (Spaltenbreite) + kopieren
Range(Cells(2, 1), Cells(fRow, 11)).Select
Selection.Copy
’ Neue Arbeitsmappe anlegen
Workbooks.Add
’ Datei neu angelegt (Public-Variable)
Dateineu = 1
ActiveSheet.Paste

’ Felder in formatieren - Beginn
’ ---------------------------------------------------
’ Letzte- belegte Zeile feststellen
Dim eRow As Long
eRow = Cells(Rows.Count, 1).End(xlUp).Row
Call Rahmen_setzen_eMail(eRow)
’ Bereich selektieren und formatieren
Range(Cells(1, 1), Cells(eRow, 11)).Select
Selection.Columns.AutoFit
Cells(1, 1).Select
’ Felder in formatieren - Ende
’ -------------------------------------------------

’ Bei Fehler zu springen
On Error GoTo weiter
’ Nach übertragen
ActiveWorkbook.SaveAs „Transfer.xls“
Application.Dialogs(xlDialogSendMail).Show _
Empfänger, "Meine Excel-Liste am: " _
& Date & „, durch:“ & Application.UserName
’ schließen
Windows(„Transfer.xls“).Activate

’ Hier gehts nach einem Fehler weiter
weiter:

’ schließe Übermittlungsdatei(an Outlook)
ActiveWindow.Close
’ Cursor in neu setzen
Cells(2, 1).Select
End Sub

Viel Spaß damit, hoffe, dass es funktioniert.

mfg
Softoldi

Hallo Markus,

so ganz verstehe ich das Problem nicht. Wenn eine Tabelle zu lang ist dann ist sie halt zu lang. Bei geringen Überschreitungen der Seitengröße kann man in Excel angeben, dass beim Druck auf eine Seite scaliert wird, aber hier werden ja die Daten aus Excel extrahiert und wohl in einem Mail im HTML-Format verschickt. Wieso spielt hier die Seitenlänge eine Rolle? Und wie macht man in HTML eine Seitensteuerung (m.W. gar nicht, das widerspricht HTML)? Auch wenn Dir das nicht gefällt, ich würde die Tabelle als Anhang im PDF-Format versenden, da kann man Schriftgröße und Seitenvorschübe beliebig steuern.
Es gibt bei Deiner Vorgehensweise noch ein Problem: HTML-Mails unterstützt nicht jeder Server, was machen die Empfänger, sie erhalten ja reinen ASCII-Code?
Tut mir leid, eine bessere Lösung habe ich nicht.
Rainer

Grüezi Markus

Wenn die Tabelle länger ist als eine Seite kann das IMO nur durch 2 Massnahmen verändert werden:

Weniger Inhalt in die Tabelle packen

Schriftgrösse verkleinern.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo CoolCarver,

mit html kenne ich mich leider nicht so aus.

Was würdest Du in Excel tun, wenn Du die Tabelle auf einer Seite ausdrucken wolltest? Vermutlich über Datei // Seite einrichten den Druckbereich anpassen.

Keine Ahnung ob das auf dem Weg nach html auch möglich ist, oder in html angepasst werden kann.

Viel Erfolg und viele Grüße MwieMichel

Hallo,

ist Dein Excel-Ausdruck zu groß oder Dein E-Mail-Ausdruck?
Für Excel kann man die Seite einrichten -> Anpassen auf 1 Seiten hoch und 1 Seiten breit. Oder den Druckbereich festlegen. Dies birgt jedoch die Gefahr, dass die Daten sehr klein werden und damit unleserlich. Ggf. muss das Papierformat auf A3 geändert werden (Ist die Tabelle nur „ein bißchen zu groß“ oder deutlich zu groß?). Dies kann man alles auch per VBA einstellen.

Im E-Mail Body müsste man sonst das eingebettete Objekt (Bild?) zu fassen bekommen und es dann skalieren. Weiß ich aber nicht, ob dies so geht.
Sollte die Tabelle durch die Funktion RangeToHTML tatsächlich als HTML-Tabelle dargestellt werden, muss man diese Optimieren - wahrscheinlich in oder nach der OpenTextStream-Methode.
Damit kenne ich mich aber leider nicht aus.

Hallo,
vielen Dank für die rege Beteiligung!

Also,
einen Dateianhang in Form von Excel oder PDF will ich eigentlich vermeiden.

Meine Tabelle lässt sich in Excel natürlich so scalieren, dass ich alle Daten im Querformat auf eine Seitenbreite bekomme. Das geht über die Druckoptionen.
Die Daten sind dann auch noch gut lesbar.

Mein Problem ist, dass die Tabelle aus Excel in HTML umgewandelt wird und dann ja in den Body der Email kommt. Dort aber logischerweise in Originalgröße (also nicht fit to page).

Meine Frage ist, ob es möglich ist die Breite der einzelnen Spalten der HTML Tabelle zu beeinflussen. In HTML ist es ja möglich die Schriftgröße und die Breite der Tabelle über fontsize und width zu beeinflussen, allerdings ist das mit der Function Rangetohtml wohl nicht möglich.

Falls nicht gerade jemand ne neue Function hat, die genau das kann, muss ich wohl damit leben, dass ich die Tabelle in Excel etwas kleiner mache. Allerdings passt das immer noch nicht ganz.

Es sollte auch keine Probleme mit der Kompatibilität untereinander geben, da das Programm Werksintern läuft, also gleiches Excel und gleiches Outlook bei allen.

Gruß Markus

Hallo,

tut mir leid, da kann ich nicht weiterhelfen.

schönen Gruß
Stefan

trotzdem danke!

Hallo Markus!
Mit Sicherheit gibt es Möglichkeiten, die Größe zu beeinflussen:

  • Du kannst die Zeilenhöhe ändern, ehe du die Tabelle einsetzt
  • Du kannst den Zoom der Tabelle ändern, die Du eingesetzt hast
  • Du kannst den Zoom der Mail vor dem ausdrucken ändern.

Wenn du z.b. eine Tabelle kopierst und in eine leere Mail einfügst, bekommst Du am unteren rechten Rand der Tabelle ein kleines Kästchen, mit dem du Die Tabelle graß und klein ziehen kannst. Das gleiche muß mit makro auch gehen.

Sorry, ich habe in dem Bereich noch nicht gearbeitet, und müßte selbst erst ausprobieren, wie genau. und dazu habe ich im moment leider keine Zeit. Aber wenn du weißt, wie das Objekt heißt, kannst du ja über den Object-Explorer dir die Eigenschaften ansehen, und dann findest ddu sicherlich die richtigen Angfaben.

Gruß
Wolfram

Danke Wolfram!

Hab mal die Größen der Tabelle in Excel selbst etwas kleiner gemacht, also bevor der Export in die Mail gestartet wird. Passt jetzt etwas besser. Denke, dass das so momentan reicht.

moin markus,

komme gerade von einer reise zurück und hoffe, daß deine frage zu deiner zufriedenheit beantwortet ist.

viel erfolg, ascan

Sorry, aber mehr kenne ich Outlook auch nicht, als den vorherigen Tipp mit (sofern überhaupt möglich) Austausch des HTML-Codes im Nachgang der Erzeugung der Outlook Nachricht. So müsste man wahrscheinlich den Body-Code der E-Mail Nachricht ersetzen, ähnlich der Replace-Anweisung in Excel: Replace

Hallo Ascan,

ja, denke mit der Lösung kann ich leben.

Danke!