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

Forumthread: Schriftart .htmlBody / "Kettenbrief"

Schriftart .htmlBody / "Kettenbrief"
20.02.2020 14:31:57
Mike
Hallo Zusammen
Ich habe mir einmal ein nettes Makro erstellt, damit ich aus einer Excel Tabelle heraus, E-Mails versenden kann.
Bin schon ziemlich weit gekommen, aber zwei Sachen funktioniere nicht, oder ich bekomme es einfach nicht hin.
Erstens:
Wie kann ich in dem Code die Schriftart auf Arial 10 ändern?
Ich habe bereits alles mit usw. ausprobiert, aber ich bekomme immer wieder Fehlermeldungen.
Hier der Code:
Option Explicit

Public Sub EmailMitSignatur()
Dim olApp       As Object
Dim olMail      As Object
Dim strOldBody  As String
Set olApp = CreateObject("Outlook.Application")
Set olMail = olApp.Createitem(0)
With olMail
.GetInspector.Display
strOldBody = .htmlBody
.To = Sheets("Tabelle1").Range("K2")
.Subject = "Fehlende Auftragsbestätigung Bestellung " & Sheets("Tabelle1").Range("A2")
.htmlBody = "Guten Tag
" & _ "Wir haben leider bis heute keine Auftragsbestätigung zu unserer _ Bestellung (Tabelle1, FeldA2) erhalten.
" & _ "Könnten Sie uns diese bitte baldmöglichst zukommen lassen.
" & _ strOldBody End With End Sub

Zweitens
Die Excel Tabelle hat mehrere Zeilen und ich möchte, dass es mir jeweils, sobald ich das Makro aktiviere, aus jeder Zeile welche Daten in Spalte A hat, eine Mail generiert.
Bis jetzt habe ich das Makro aktiviert, eine Mail anhand der Daten aus Zeile 2 wurde erstellt, die Zeile 2 wieder gelöscht und das Makro wieder aktiviert, usw.. Halt alles "umständlich".
Besteht die Möglichkeit, dies irgendwie zu "automatisieren" ?
Besten Dank für Eure Hilfe.
M
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schriftart .htmlBody / "Kettenbrief"
20.02.2020 14:36:26
Mike
Ganz vergessen:
Drittens
Wie kann ich in der Zeile: Wir haben leider bis heute keine Auftragsbestätigung zu unserer Bestellung (Tabelle1, FeldA2) erhalten, die Daten aus Feld A2 nehmen?
Wenn ich das so lösen: "Wir haben leider bis heute keine Auftragsbestätigung zu unserer Bestellung " & Sheets("Tabelle1").Range("A2")"erhalten.
" & _
Kommt Fehler beim Kompilieren, Erwartet Anweisungsende...
Danke
M
Anzeige
AW: Schriftart .htmlBody / "Kettenbrief"
20.02.2020 15:35:32
volti
Hallo,
zu 1.:
Am einfachsten so:
.Subject = "Fehlende Auftragsbestätigung Bestellung "<span style='font-family:Arial;font-size:10pt;'>" & Sheets("Tabelle1").Range("A2") & "</span>"
Oder Du benutzt u.a. Makro, dass die Formatierung direkt aus der Excelzelle übernimmt:
.Subject = "Fehlende Auftragsbestätigung Bestellung " & GetHTML(Sheets("Tabelle1").Range("A2"))
Function GetHTML(obj As Range, Optional bHG As Boolean) As String
'Funktion setzt die Formatierung einer Zelle in HTML um
 Dim i As Integer, sTxt As String, iCol As Variant, f() As String
 f = Split("&LT;span style=',,,,,&LT;span&GT;,&LT;strong&GT;,&LT;i&GT;,&LT;u&GT;,&LT;/span&GT;,&LT;/strong&GT;,&LT;/i&GT;,&LT;/u&GT;,&LT;br&GT;,*Fett*,*Kursiv*, ", ",")
 With obj.Font
  sTxt = f(0) & "font-size:" & .Size & "pt;font-family:""" & .Name & """;"
  iCol = .Color
  If IsNull(iCol) Then iCol = 0 Else sTxt = sTxt & GetHexColor(.Color)
  If obj.Interior.ColorIndex &LT;&GT; xlNone And bHG Then _
     sTxt = sTxt & ";background-" & GetHexColor(obj.Interior.Color)
  sTxt = sTxt & "'&GT;"
  For i = 1 To Len(obj.value)
   With obj.Characters(i, 1).Font
    If .Color &LT;&GT; iCol And f(1) = "" Then
      iCol = .Color: f(1) = f(5)
      sTxt = sTxt & f(0) & GetHexColor(.Color) & "'&GT;"
    End If
    If .FontStyle Like f(14) And f(2) = "" Then sTxt = sTxt & f(6):       f(2) = f(10)
    If .FontStyle Like f(15) And f(3) = "" Then sTxt = sTxt & f(7):       f(3) = f(11)
    If .Underline &LT;&GT; xlNone And f(4) = "" Then sTxt = sTxt & f(8):        f(4) = f(12)
    If .Underline = xlNone And f(4) &LT;&GT; "" Then sTxt = sTxt & f(12):       f(4) = ""
    If Not .FontStyle Like f(15) And f(3) &LT;&GT; "" Then sTxt = sTxt & f(11): f(3) = ""
    If Not .FontStyle Like f(14) And f(2) &LT;&GT; "" Then sTxt = sTxt & f(10): f(2) = ""
    sTxt = sTxt & Replace(Mid$(obj.value, i, 1), vbLf, f(13))
    If .Color &LT;&GT; iCol And f(1) &LT;&GT; "" Then iCol = .Color: f(1) = "": sTxt = sTxt & f(9)
   End With
  Next i
  GetHTML = Replace(sTxt & f(4) & f(3) & f(2) & f(1) & f(9), "  ", f(16) & f(16))
 End With
End Function
Function GetHexColor(oCol As Variant) As String
  GetHexColor = "color:#" _
  & Right("00" & Hex(oCol And vbRed), 2) _
  & Right("00" & Hex((oCol And vbGreen) \ &H100), 2) _
  & Right("00" & Hex((oCol And vbBlue) \ &H10000), 2)
End Function
viele Grüße
Karl-Heinz

Anzeige
AW: Schriftart .htmlBody / "Kettenbrief"
20.02.2020 15:54:33
Mike
Hallo
Es geht um den .htmlBody, nicht um .Subject.
Oder kann ich das auch da umsetzen?
Danke
AW: Schriftart .htmlBody / "Kettenbrief"
20.02.2020 16:08:02
volti
Sorry,
na klar. Habe ich mich vertan. Im Subject macht das keinen Sinn.
Aber auf den HTMLbody kannst Du es ja genauso anwenden. Den gewünschten Text in den Span-Tag einbetten, ohne den strOldBody, der ja die Signatur enthält.
"<span style='font-family:Arial;font-size:10pt;'>Guten Tag
" & _
"Wir haben leider bis heute keine Auftragsbestätigung zu unserer _
Bestellung (Tabelle1, FeldA2) erhalten.
" & _
"Könnten Sie uns diese bitte baldmöglichst zukommen lassen.</span>
" & _
strOldBody
Und die GetHTML-Form gilt nur für Excel-Zellen...
Anzeige
AW: Schriftart .htmlBody / "Kettenbrief"
20.02.2020 16:44:32
Mike
Das funktioniert einwandfrei.
Besten Dank
Nun noch eine Frage:
Die Excel Tabelle hat mehrere Zeilen und ich möchte, dass es mir jeweils, sobald ich das Makro aktiviere, aus jeder Zeile welche Daten in Spalte A hat, eine Mail generiert.
Bis jetzt habe ich das Makro aktiviert, eine Mail anhand der Daten aus Zeile 2 wurde erstellt, die Zeile 2 wieder gelöscht und das Makro wieder aktiviert, usw.. Halt alles "umständlich".
Besteht die Möglichkeit, dies irgendwie zu "automatisieren" ?
Hier der neue Code:
Option Explicit
Public Sub EmailMitSignatur()
Dim olApp       As Object
Dim olMail      As Object
Dim strOldBody  As String
Dim probleme    As Variant
probleme = Sheets("Tabelle1").Range("A2").Value
Set olApp = CreateObject("Outlook.Application")
Set olMail = olApp.Createitem(0)
With olMail
.GetInspector.Display
strOldBody = .htmlBody
.To = Sheets("Tabelle1").Range("K2")
.Subject = "Fehlende Auftragsbestätigung Bestellung " & Sheets("Tabelle1").Range("A2")
.htmlBody = "Guten Tag
" & _ "Wir haben leider bis heute keine Auftragsbestätigung zu unserer _ Bestellung " & probleme & " erhalten.
" & _ "Könnten Sie uns diese bitte baldmöglichst zukommen lassen.
" _ & _ strOldBody End With End Sub

Anzeige
AW: Schriftart .htmlBody / "Kettenbrief"
20.02.2020 19:37:23
volti
Hallo Mike,
schau mal ob dieses hier passt (ungetestet)
Option Explicit
Public Sub EmailMitSignatur()
  Dim WSh As Worksheet, iZeile As Long
  Dim olApp       As Object
  Dim olMail      As Object
  Dim strOldBody  As String
  Set WSh = ThisWorkbook.Sheets("Tabelle2")
  Set olApp = CreateObject("Outlook.Application")
 
  For iZeile = 2 To WSh.UsedRange.Rows.Count
   If WSh.Cells(iZeile, "A").value &LT;&GT; "" Then
    Set olMail = olApp.Createitem(0)
    With olMail
      .GetInspector.display
      strOldBody = .HTMLBody
      .to = WSh.Range("K" & iZeile)
      .Subject = "Fehlende Auftragsbestätigung Bestellung " & WSh.Range("A" & iZeile)
      .HTMLBody "&LT;span style='font-family:Arial;font-size:10pt;'&GT;Guten Tag&LT;br&GT;" _
       & "Wir haben leider bis heute keine Auftragsbestätigung zu unserer Bestellung " _
       & WSh.Range("A" & iZeile).value & " erhalten.&LT;br&GT;" _
       & "Könnten Sie uns diese bitte baldmöglichst zukommen lassen.&LT;/span&GT;" _
       & strOldBody
       .display
      '.send
    End With
    Set olMail = Nothing
   End If
  Next iZeile
End Sub
viele Grüße
Karl-Heinz

Anzeige
AW: Schriftart .htmlBody / "Kettenbrief"
21.02.2020 11:19:42
Mike
Funktioniert einwandfrei.
Besteht die Möglichkeit, nicht die Standard Signatur zu nehmen sondern eine spezifische?
Die Nachricht wendet sich auch an Englisch sprechende und da brauch ich eine andere Signatur.
Geht das?
Besten Dank jetzt schon für deine riesen Hilfe.
Gruss
M
Anzeige
AW: Schriftart .htmlBody / "Kettenbrief"
21.02.2020 11:34:16
volti
Hallo Mike,
das weiß ich leider nicht.
Wenn ich das brauchen würde, würde ich mir selbst einfach eine programmieren. (in HTML)
Übrigens relativ einfach auch über o.a. GetHTML() möglich. Indem Du das einfach in ein/zwei Zellen schreibst und dort per Excel formatiert.
Falls Du das so machen möchtest und auch Bilder brauchen solltest, melde Dich hier nochmal. Es gibt auch noch Range2HTML...
viele Grüße
Karl-Heinz
Anzeige
AW: Schriftart .htmlBody / "Kettenbrief"
21.02.2020 13:28:48
Mike
Danke fürs Helfen.
Könnte ich die Signatur also einfach ins Makro reinpacken?
Wäre natürlich auch eine Idee, wenn das geht.
Gruss
M
AW: Schriftart .htmlBody / "Kettenbrief"
21.02.2020 14:47:31
volti
Hallo Mike,
Du kannst eine Signatur direkt in HTML in VBA dazupacken. Siehe auch den Span-Tag.
Dafür brauchst Du HTML-Kenntnisse.
Hier ein Beispiel wie eine einfache Signatur (ohne Bild) via GetHTML gehen könnte:
EMail-Signaturbeispiel.xlsb
viele Grüße
Karl-Heinz
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Schriftart im .htmlBody ändern und Excel-Kettenbriefe erstellen


Schritt-für-Schritt-Anleitung

Um die Schriftart in einer E-Mail, die über Excel VBA versendet wird, zu ändern, kannst du den folgenden Code verwenden. Er zeigt, wie die Schriftart im .htmlBody auf Arial 10 gesetzt wird.

Option Explicit
Public Sub EmailMitSignatur()
    Dim olApp As Object
    Dim olMail As Object
    Dim strOldBody As String
    Set olApp = CreateObject("Outlook.Application")
    Set olMail = olApp.Createitem(0)
    With olMail
        .GetInspector.Display
        strOldBody = .htmlBody
        .To = Sheets("Tabelle1").Range("K2")
        .Subject = "Fehlende Auftragsbestätigung Bestellung " & Sheets("Tabelle1").Range("A2")
        .htmlBody = "<span style='font-family:Arial;font-size:10pt;'>Guten Tag<br>" & _
                     "Wir haben leider bis heute keine Auftragsbestätigung zu unserer Bestellung " & _
                     Sheets("Tabelle1").Range("A2") & " erhalten.<br>" & _
                     "Könnten Sie uns diese bitte baldmöglichst zukommen lassen.<br>" & _
                     "</span>" & strOldBody
    End With
End Sub

Dieser Code stellt sicher, dass der Text in der E-Mail die gewünschte Schriftart und -größe hat. Du kannst .htmlbody vba verwenden, um HTML-formatierten Text in Outlook zu versenden.


Häufige Fehler und Lösungen

  1. Fehlermeldungen bei Schriftartänderungen: Wenn du beim Ändern der Schriftart auf Probleme stößt, stelle sicher, dass du den richtigen HTML-Code verwendest. Verwende <span style='font-family:Arial;font-size:10pt;'> für die Schriftart und -größe.

  2. Automatisierung von E-Mails aus mehreren Zeilen: Um E-Mails aus mehreren Zeilen zu generieren, kannst du eine Schleife verwenden. Hier ein Beispiel:

Dim iZeile As Long
For iZeile = 2 To Sheets("Tabelle1").UsedRange.Rows.Count
    ' Code zum Versenden der E-Mail hier einfügen
Next iZeile

Alternative Methoden

Falls du eine spezifische Signatur in deiner E-Mail benötigst, kannst du diese direkt im HTML-Code einfügen. Eine einfache Signatur kann so aussehen:

.htmlBody = "<span style='font-family:Arial;font-size:10pt;'>Dein Text hier<br>Deine Signatur<br></span>" & strOldBody

Zusätzlich kannst du die Funktion GetHTML() verwenden, um die Formatierung direkt aus einer Excel-Zelle zu übernehmen. Diese Methode ist besonders nützlich, wenn du komplexere Formatierungen benötigst.


Praktische Beispiele

Hier ist ein Beispiel für einen automatisierten Kettenbrief in Excel:

Public Sub Kettenbrief()
    Dim olApp As Object
    Dim olMail As Object
    Dim WSh As Worksheet
    Set WSh = ThisWorkbook.Sheets("Tabelle1")
    Set olApp = CreateObject("Outlook.Application")

    Dim iZeile As Long
    For iZeile = 2 To WSh.UsedRange.Rows.Count
        If WSh.Cells(iZeile, "A").Value <> "" Then
            Set olMail = olApp.Createitem(0)
            With olMail
                .GetInspector.Display
                .To = WSh.Cells(iZeile, "K").Value
                .Subject = "Fehlende Auftragsbestätigung Bestellung " & WSh.Cells(iZeile, "A").Value
                .HTMLBody = "<span style='font-family:Arial;font-size:10pt;'>Guten Tag,<br>Wir haben leider bis heute keine Auftragsbestätigung zu unserer Bestellung " & WSh.Cells(iZeile, "A").Value & " erhalten.<br>Könnten Sie uns diese bitte baldmöglichst zukommen lassen.<br></span>" & strOldBody
                .Display ' Zum Testen, um die E-Mail anzuzeigen
                '.Send ' Zum Versenden der E-Mail
            End With
        End If
    Next iZeile
End Sub

Tipps für Profis

  • Nutze die Möglichkeit, die Schriftfarbe direkt über HTML zu ändern. Beispiel: style='color:#ff0000;' für rote Schrift.
  • Du kannst auch die Schriftgröße in HTML festlegen, z.B. font-size:11pt;, um die Lesbarkeit zu verbessern.
  • Bei umfangreichen E-Mails kann es hilfreich sein, die Signatur in einer separaten Zelle in Excel zu speichern und sie dann in den .htmlbody zu integrieren.

FAQ: Häufige Fragen

1. Wie kann ich die Schriftart in Outlook VBA ändern?
Du kannst die Schriftart im .htmlBody ändern, indem du HTML-Tags wie <span> mit den entsprechenden Styles verwendest.

2. Welche Schriftarten kann ich verwenden?
Die gängigsten Schriftarten wie Arial, Times New Roman und Verdana sind in Outlook verfügbar.

3. Wie kann ich eine spezifische Signatur in meine E-Mails einfügen?
Du kannst die Signatur als HTML-Code direkt in den .htmlBody der E-Mail einfügen.

4. Ist es möglich, Bilder in .htmlbody E-Mails einzufügen?
Ja, du kannst Bilder einfügen, indem du den entsprechenden HTML-Code verwendest. Stelle sicher, dass die Bilder online verfügbar sind oder im E-Mail-Client eingebettet werden.

5. Wie automatisiere ich das Versenden von E-Mails für mehrere Zeilen?
Verwende eine Schleife, um durch die Zeilen zu iterieren und eine E-Mail für jede Zeile zu erstellen, in der Daten vorhanden sind.

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