Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1272to1276
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Benötige Hilfe zum Starten eines Codes

Benötige Hilfe zum Starten eines Codes
Markus
Hallo an alle,
ich habe folgenden Code im Internet gefunden, mit dem man per VBA eine HTML-Email via Outlook versenden kann.
Leider bekomme ich den Code selbst nicht zum Laufen (er steht in einem Modul).
Kann mir jemand sagen, ob hier noch etwas fehlt oder was ich tun muss, damit die Email erstellt wird ?
Ziel ist es, nicht die ganze Tabelle, sondern nur bestimmte Informationen aus der Tabelle heraus zu versenden.

Option Explicit
Sub Mail_erstellen(strAdresse As String)
Dim strQuelle As String
Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Dim strSubject
strQuelle = "$B$1:$R$58"
strSubject = Range("B1")
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(olMailItem)
With OutMail
.To = strAdresse
.CC = ""
.BCC = ""
.Subject = strSubject
.HTMLBody = Uebersetzung(strQuelle)
'.Send
.Display
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
Public Function Uebersetzung(strQuelle As String)
Dim objFSO As Object
Dim objInhalt As Object
Dim strTempDatei As String
strTempDatei = "C:\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
With ActiveWorkbook.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=strTempDatei, _
Sheet:=ActiveSheet.Name, _
Source:=strQuelle, _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objInhalt = objFSO.GetFile(strTempDatei).OpenAsTextStream(1, -2)
Uebersetzung = objInhalt.ReadAll
objInhalt.Close
Set objInhalt = Nothing
Set objFSO = Nothing
Kill strTempDatei
End Function
Vielen Dank Euch im Voraus für jeden Tipp !
Viele Grüße,
Markus
AW: Benötige Hilfe zum Starten eines Codes
06.08.2012 11:38:49
Rudi
Hallo,
der Code braucht als Argument die Mailadresse.
Sub aaaa()
Mail_erstellen "markus@domain.de"
End Sub

Gruß
Rudi
AW: Benötige Hilfe zum Starten eines Codes
08.08.2012 20:29:05
Markus
Hallo Rudi,
vielen Dank für Deine Antwort und sorry, ich hatte erst jetzt Zeit, es zu testen.
Leider funktioniert der Code bei mir trotzdem nicht und der Debugger bleibt immer bei Outlook.Application stehen.
Kannst Du mir sagen, ob hier vielleicht noch ein anderer Fehler enthalten ist oder was ich machen muss, damit die Email korrekt erstellt wird ?
Das Erstellen der Email wäre mir sehr wichtig - ich hoffe, es kann mir hier jemand weiterhelfen !
VG und vielen Dank im Voraus,
Markus
Anzeige
AW: Benötige Hilfe zum Starten eines Codes
08.08.2012 21:27:40
Markus
Hallo Rudi,
ich habe jetzt einen anderen Code im Netz gefunden, der soweit super funktioniert.
Dazu noch eine Frage:
Kann mir jemand sagen, wie ich die Schriftart, -größe und -farbe für den Email-Body definiere ?
Z.B. Arial 11, dunkelblau.
Option Explicit
Sub Email()
Dim olApp As Object
Dim olOldBody As String
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
.GetInspector.Display
olOldBody = .htmlBody
.To = "email@company.com"
.Subject = "Feedback from user *" & Environ("Username") & "* - Items: "
.htmlBody = "Category1:
Category2:
Category3:
" & _ "Category4:
Category5:
Category6:
" & _ "Cateogry7:
Comments:
General Feedback:" & _ "
" & olOldBody End With End Sub
VG und nochmals vielen Dank im Voraus,
Markus
Anzeige
AW: Benötige Hilfe zum Starten eines Codes
10.08.2012 21:02:07
Josef

Hallo Markus,
Sub Email()
  Dim olApp As Object
  Dim olOldBody As String
  
  Set olApp = CreateObject("Outlook.Application")
  With olApp.CreateItem(0)
    .GetInspector.Display
    olOldBody = .htmlBody
    .To = "email@company.com"
    .Subject = "Feedback from user *" & Environ("Username") & "* - Items: "
    .htmlBody = "<span style='font-family: Arial, Helvetica, sans-serif; font-size:14pt; color:blue;'>" & _
      "Category1:<br>Category2:<br>Category3:<br>" & _
      "Category4:<br>Category5:<br>Category6:<br>" & _
      "Cateogry7:<br>Comments:<br>General Feedback:</span>" & olOldBody
    .Display
  End With
End Sub



« Gruß Sepp »

Anzeige
AW: Benötige Hilfe zum Starten eines Codes
10.08.2012 21:38:00
Markus
Hallo Sepp,
vielen Dank für Deine Antwort - das ist super so !
Ich habe noch 2 Fragen dazu und hoffe, Du kannst mir auch dabei helfen ?
1) In Deinem Code steht neben Arial noch Helvetica, sans-serif. Ist das nur als mögliche Alternative gedacht ?
2) Was genau ist das "GetInspector" ?
Viele Grüße und nochmals danke,
Markus
AW: Benötige Hilfe zum Starten eines Codes
10.08.2012 22:26:16
Josef

Hallo Markus,
zu 1: Ja, falls die gewünschte Schrift auf einem System nicht vorhanden ist.
Zu 2: Damit wird die Signatur angezeigt.

« Gruß Sepp »

Anzeige
AW: Benötige Hilfe zum Starten eines Codes
10.08.2012 22:35:12
Markus
Spitze - v.a. das mit der Signatur, das hatte ich aus lauter Verzweiflung schon ganz abgehakt. :-)
Vielen Dank nochmal dafür !
Eines ist mir gerade noch aufgefallen:
Wenn ich im Body den Text einer Zeile auf Leerzeichen enden lasse (z.B. "Text1: "), erscheint in der Email immer nur eins statt der von mir angegebenen 3 Leerzeichen.
Das gleiche passiert mir auch, wenn ich im Body nach dem letzten Text noch eine Leerzeile einfügen möchte - die erscheint dann auch nicht in der Email.
Das lässt sich vermutlich nicht verhindern, oder ?
VG,
Markus
AW: Benötige Hilfe zum Starten eines Codes
10.08.2012 22:53:48
Josef

Hallo Markus,
überflüssige Leerzeichen werden in HTML normalerweise nicht angezeigt, du kannst aber mit &nbsp; ein Leerzeichen erzwingen.
Leerzeilen kannst du mit mehreren Zeilenumbrüchen z. B. <br><br><br> erreichen.

« Gruß Sepp »

Anzeige
AW: Benötige Hilfe zum Starten eines Codes
10.08.2012 23:24:43
Markus
Hallo Sepp,
auch das klappt alles bestens !
Vielen vielen Dank dafür - ist eine riesen Hilfe !
VG und ein schönes Wochenende,
Markus
AW: Benötige Hilfe zum Starten eines Codes
12.08.2012 19:00:26
Markus
Hallo Sepp,
nochmals vielen Dank für Deine Hilfe mit diesem Problem - es klappt jetzt bestens ! :-)
Ich verwende nun folgenden Code und habe dazu noch eine Frage - vielleicht kannst Du mir dabei noch weiterhelfen ?
Wie kann ich im Body einer Email bestimmte Zellen aus einem Arbeitsblatt einfügen bzw. in der Email verschicken (in diesem Fall ohne den Text aus dem Code hier) ?
Ich würde gerne die Zellen C1 bis D5 aus Blatt 4 direkt in der Email verschicken.
Sub FeedbackSend()
Dim olApp As Object
Dim olOldBody As String
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
.GetInspector.Display
olOldBody = .HTMLBody
.Importance = 1  '2 = high, 1 = standard, 0 = low
.To = Worksheets(2).Range("I28")
.Cc = ""
.Bcc = ""
.Subject = "Feedback from " & Worksheets(2).Range("J16") & ":  " & Worksheets(7).Range(" _
E2")
.HTMLBody = "" & _
"Items: &nbsp" & "" & Worksheets(7).Range("E2") & "" & "
" & _ "Policy: &nbsp
" & _ "Action - off eBay: &nbsp
" & _ "Action - on eBay: &nbsp
" & _ "Applies to: &nbsp
" & _ "Exceptions: &nbsp
" & _ "SAR: &nbsp
" & _ "GAP: &nbsp
" & _ "Image: &nbsp
" & _ "Notes: &nbsp
" & _ "
" & _ "General Feedback: &nbsp
" & olOldBody 'oder: die aktive Exceldatei als Anhang mitsenden... '.Attachments.Add ThisWorkbook.FullName .Display End With End Sub
VG und nochmals danke,
Markus
Anzeige
AW: Benötige Hilfe zum Starten eines Codes
12.08.2012 19:19:50
Josef

Hallo Markus,
da gibt es mehrere Möglichkeiten.
Z.B.:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub FeedbackSend()
  Dim olApp As Object
  Dim olOldBody As String
  
  Set olApp = CreateObject("Outlook.Application")
  
  With olApp.CreateItem(0)
    .GetInspector.Display
    olOldBody = .HTMLBody
    .Importance = 1 '2 = high, 1 = standard, 0 = low
    .To = Worksheets(2).Range("I28")
    .Cc = ""
    .Bcc = ""
    .Subject = "Feedback from " & Worksheets(2).Range("J16") & ": " & Worksheets(7).Range("E2")
    .HTMLBody = RangeHTML(Worksheets(4).Range("C1:D5")) & olOldBody
    'oder: die aktive Exceldatei als Anhang mitsenden...
    '.Attachments.Add ThisWorkbook.FullName
    .Display
  End With
  
  Set olApp = Nothing
End Sub


Private Function RangeHTML(Source As Range) As String
  Dim rngRow As Range, rng As Range
  Dim strTmp As String, strText As String
  Dim vntRowColor As Variant
  
  strTmp = "<table border=0>"
  
  For Each rngRow In Source.Rows
    vntRowColor = rngRow.Font.Color
    If VarType(vntRowColor) = vbNull Then
      strTmp = strTmp & "<tr height=" & Fix(rngRow.RowHeight) & "px>"
    Else
      strTmp = strTmp & "<tr height=" & Fix(rngRow.RowHeight) & "px color=" & HTMLColor(vntRowColor) & ">"
    End If
    For Each rng In rngRow.Cells
      strText = Replace(rng.Text, vbLf, "<br>")
      strTmp = strTmp & "<td width=" & Fix(rng.Width) & "px>"
      If VarType(vntRowColor) = vbNull Then
        strTmp = strTmp & "<font color=" & HTMLColor(rng.Font.Color) & ">"
      End If
      If rng.Font.Bold Then
        strTmp = strTmp & "<b>" & strText & "</b>"
      Else
        strTmp = strTmp & strText
      End If
      If VarType(vntRowColor) = vbNull Then
        strTmp = strTmp & "</font>"
      End If
      strTmp = strTmp & "</td>"
    Next
    strTmp = strTmp & "</tr>"
  Next
  
  strTmp = strTmp & "</table>"
  
  RangeHTML = strTmp
End Function


Private Function HTMLColor(ByVal Color As Long) As String
  Dim R As Integer, G As Integer, B As Integer
  Dim strR As String * 2, strG As String * 2, strB As String * 2
  
  
  R = Color And 255
  G = (Color \ 256) And 255
  B = Color \ 65536
  
  strR = Hex(R) & "00"
  strG = Hex(G) & "00"
  strB = Hex(B) & "00"
  HTMLColor = "#" & strR & strG & strB
End Function



« Gruß Sepp »

Anzeige
AW: Benötige Hilfe zum Starten eines Codes
12.08.2012 20:12:22
Markus
Hallo Sepp,
vielen Dank für die schnelle Antwort und den tollen Code !
Das klappt super, allerdings wird hier nur der Text ohne Formatierungen kopiert.
Kann man die Zellen auch so einfügen, dass es wie eine Kopie aussieht, d.h. dass die Schrift- und Hintergrundfarben erhalten bleiben ?
VG,
Markus
AW: Benötige Hilfe zum Starten eines Codes
12.08.2012 21:25:48
Josef

Hallo Markus,
dann so.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub FeedbackSend()
  Dim olApp As Object
  Dim olOldBody As String
  
  Set olApp = CreateObject("Outlook.Application")
  
  With olApp.CreateItem(0)
    .GetInspector.Display
    olOldBody = .HTMLBody
    .Importance = 1 '2 = high, 1 = standard, 0 = low
    .To = Worksheets(2).Range("I28")
    .Cc = ""
    .Bcc = ""
    .Subject = "Feedback from " & Worksheets(2).Range("J16") & ": " & Worksheets(7).Range("E2")
    .HTMLBody = RangeToHTML(Worksheets(1), Range("A1:D5")) & olOldBody
    'oder: die aktive Exceldatei als Anhang mitsenden...
    '.Attachments.Add ThisWorkbook.FullName
    .Display
  End With
  
  Set olApp = Nothing
End Sub


Private Function RangeToHTML(objSheet As Worksheet, objRange As Range) As String
  Dim strFilename As String
  strFilename = Environ$("TEMP") & "/temp.htm"
  ActiveWorkbook.PublishObjects.Add( _
    SourceType:=xlSourceRange, _
    Filename:=strFilename, _
    Sheet:=objSheet.Name, _
    Source:=objRange.Address, _
    HtmlType:=xlHtmlStatic).Publish True
  RangeToHTML = CreateObject("Scripting.FileSystemObject"). _
    GetFile(strFilename).OpenAsTextStream(1, -2).ReadAll
  RangeToHTML = Replace(RangeToHTML, "align=center x:publishsource=", _
    "align=left x:publishsource=")
  
  Kill strFilename
End Function



« Gruß Sepp »

Anzeige
AW: Benötige Hilfe zum Starten eines Codes
13.08.2012 02:23:56
Markus
Hallo Sepp,
klappt einwandfrei, sogar in Kombination mit Anhang und Zellen - super !
Vielen vielen Dank dafür, ist eine riesen Hilfe !
VG,
Markus
AW: Benötige Hilfe zum Starten eines Codes
13.08.2012 21:53:44
Markus
Hallo Sepp,
ich verwende Deine Codes mittlerweile regelmäßig und bin echt begeistert davon - vielen Dank nochmal dafür !
Ich habe noch zwei kleine Fragen dazu - kannst Du mir damit vielleicht auch weiterhelfen ?
1) Was muss ich tun, damit HTML-Codeteile hier so angezeigt werden, wie bei Dir ? :)
2) Wenn man am Anfang des HTML-Bodys mit folgendem Code die Schriftfarbe definiert, gibt es dann noch eine Möglichkeit innerhalb des Bodys für bestimmte Teile eine andere Farbe zu verwenden, so wie man z.B. bestimmte Worte in fett schreiben kann etc. ?
Sub Email ()
' "span style='font-family: Arial, Helvetica, Sans-Serif; font-size:11pt; color: #00457c;'"
End Sub
VG,
Markus
Anzeige
AW: Benötige Hilfe zum Starten eines Codes
14.08.2012 14:23:19
Markus
Hallo Sepp,
ich hab die Lösung zu meiner letzten Frage rausgefunden - Problem behoben. :-)
VG und trotzdem danke,
Markus

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige