10.03.2024, 11:56
Hallo,
Ja... Was soll ich sagen? Entgegen meiner generellen Haltung gegenüber VBA möchte ich nun doch zumindest die Funktion "E-Mail versenden" mit VBA realisieren. Das wäre der erste Grund, die Datei als .xlsm zu speichern.
Nun habe ich mir aus dem Netz verschiedene Codes zusammengesammelt und irgendwie rausklambüsert, wie ich was anpasse, damit es mit meiner Verwendung passt, es bleiben aber immer noch sehr viele Fragen offen, deren Antworten ich nicht im Netz gefunden habe:
1. Wie bekomme ich es hin, dass keine leeren Spalten und Zeilen in die Email übernommen werden? Aktuell habe ich eine dynamische Tabelle, die bis Zeile 1000 reicht, aber manchmal nur 20 Zeilen gefüllt sind, manchmal auch 40... Dementsprechend wären in der Mail 960 bis 980 Zeilen leer und die Mail wird unnötig lang. Gibt es da eine Möglichkeit, die leeren Zeilen wegzulassen?
2. Ich stand am Anfang vor dem Problem, dass die Tabelle als ein Text in Outlook angezeigt wurde, statt als Tabelle. Das Problem ist an sich behoben (*Modul2), allerdings ist die Darstellung immer noch eine andere, als wenn ich die Tabelle händisch kopiere und einfüge (händisch ist es deutlich besser, da die Formatierungen übernommen werden, was aktuell mit dem Makro nicht der Fall ist). Ich hab gedacht, dass ich das irgendwie mit der Zwischenablage realisieren könnte (*Modul1), aber das funktioniert überhaupt nicht, dort wird gar kein Inhalt angezeigt.
Folgend die Bilder, wie es aktuell aussieht und wie es wunderschön aussehen sollte:
Aktuell:
Ziel:
Modul1 (funktioniert gar nicht - leere Email)
Modul2 (funktioniert mit falscher Darstellung und Anzeige leerer Zeilen):
Hier die Testdatei, welche ich aktuell verwende...
Test Mail.xlsm (Größe: 34,47 KB / Downloads: 6)
Vielen Dank schonmal!
Ja... Was soll ich sagen? Entgegen meiner generellen Haltung gegenüber VBA möchte ich nun doch zumindest die Funktion "E-Mail versenden" mit VBA realisieren. Das wäre der erste Grund, die Datei als .xlsm zu speichern.
Nun habe ich mir aus dem Netz verschiedene Codes zusammengesammelt und irgendwie rausklambüsert, wie ich was anpasse, damit es mit meiner Verwendung passt, es bleiben aber immer noch sehr viele Fragen offen, deren Antworten ich nicht im Netz gefunden habe:
1. Wie bekomme ich es hin, dass keine leeren Spalten und Zeilen in die Email übernommen werden? Aktuell habe ich eine dynamische Tabelle, die bis Zeile 1000 reicht, aber manchmal nur 20 Zeilen gefüllt sind, manchmal auch 40... Dementsprechend wären in der Mail 960 bis 980 Zeilen leer und die Mail wird unnötig lang. Gibt es da eine Möglichkeit, die leeren Zeilen wegzulassen?
2. Ich stand am Anfang vor dem Problem, dass die Tabelle als ein Text in Outlook angezeigt wurde, statt als Tabelle. Das Problem ist an sich behoben (*Modul2), allerdings ist die Darstellung immer noch eine andere, als wenn ich die Tabelle händisch kopiere und einfüge (händisch ist es deutlich besser, da die Formatierungen übernommen werden, was aktuell mit dem Makro nicht der Fall ist). Ich hab gedacht, dass ich das irgendwie mit der Zwischenablage realisieren könnte (*Modul1), aber das funktioniert überhaupt nicht, dort wird gar kein Inhalt angezeigt.
Folgend die Bilder, wie es aktuell aussieht und wie es wunderschön aussehen sollte:
Aktuell:
Ziel:
Modul1 (funktioniert gar nicht - leere Email)
Code:
Sub EMailVersendenModul1()
Dim rng As Range
Dim emailAdresse As String
Dim mailApp As Object
Dim mailItem As Object
' Definieren Sie den Bereich A1:F12 auf Tabellenblatt1
Set rng = ThisWorkbook.Sheets("Tabelle1").Range("A1:F20")
' Holen Sie die E-Mail-Adresse aus Zelle A1 auf Tabellenblatt2
emailAdresse = ThisWorkbook.Sheets("Daten").Range("B1").Value
' Kopieren Sie den Bereich in die Zwischenablage
rng.Copy
' Erstellen Sie eine neue E-Mail
Set mailApp = CreateObject("Outlook.Application")
Set mailItem = mailApp.CreateItem(0)
' Fügen Sie den kopierten Bereich als Text in den E-Mail-Body ein
mailItem.Body = "Hier ist der kopierte Bereich aus Tabellenblatt1:" & vbNewLine & vbNewLine & _
rng.Text
' Setzen Sie die E-Mail-Adresse und den Betreff
mailItem.To = emailAdresse
mailItem.Subject = ThisWorkbook.Sheets("Daten").Range("B2").Value
' Senden Sie die E-Mail
mailItem.Display
' Bereinigen
Set mailItem = Nothing
Set mailApp = Nothing
End Sub
Modul2 (funktioniert mit falscher Darstellung und Anzeige leerer Zeilen):
Code:
Sub EmailVersendenMitFormatierungModul2()
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim MailAdresse As String
Dim MailBetreff As String
Dim MailInhalt As String
Dim rng As Range
Dim ws As Worksheet
Dim i As Long, j As Long
' Arbeitsblatt mit den Daten
Set ws = ThisWorkbook.Sheets("Tabelle1")
' Inhalt der E-Mail (Tabelle A1:F12 mit HTML-Formatierung)
Set rng = ws.Range("A1:F20")
' E-Mail-Adresse aus Zelle Z10
MailAdresse = ThisWorkbook.Sheets("Daten").Range("B1").Value
' Betreff der E-Mail
MailBetreff = ThisWorkbook.Sheets("Daten").Range("B2").Value
' HTML-Tabelle erstellen
MailInhalt = "<table border='1' cellpadding='5'>"
For i = 1 To rng.Rows.Count
MailInhalt = MailInhalt & "<tr>"
For j = 1 To rng.Columns.Count
MailInhalt = MailInhalt & "<td>" & rng.Cells(i, j).Value & "</td>"
Next j
MailInhalt = MailInhalt & "</tr>"
Next i
MailInhalt = MailInhalt & "</table>"
' Outlook-Objekt erstellen
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = MailAdresse
.Subject = MailBetreff
.HTMLBody = "Liste aktueller Aufträge<br><br>" & MailInhalt
.Display ' Display Zum Anzeigen der E-Mail vor dem Senden
'.Send ' Zum direkten Senden der E-Mail
End With
' Objekte freigeben
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub
Hier die Testdatei, welche ich aktuell verwende...
Test Mail.xlsm (Größe: 34,47 KB / Downloads: 6)
Vielen Dank schonmal!