2017-11-20 2 views
0

Ich habe ein Makro, das eine Outlook-Vorlage laden soll, einen Excel-Bereich kopieren und dann als Bild in diese Vorlage einfügen.Excel-Bereich in Outlook einfügen Vorlage

In meinem Code wird das Bild jedoch über die E-Mail-Vorlage eingefügt. Daher habe ich nur das Bild, das die gesamte E-Mail überschreibt.

Wie kann ich das Bild nur zum E-Mail-Text hinzufügen, wenn sowohl die Vorlage als auch das Bild darin enthalten sind?

Hier ist mein Code:

Sub Update() 

Set otlApp = CreateObject("Outlook.Application") 
Set otlNewMail = otlApp.CreateItemFromTemplate("C:\Users\JohnDoe\Desktop\MyVBA\OutlookTemplate.oft") 
With otlNewMail 
vTemplateBody = otlNewMail.HTMLBody 
vTemplateSubject = "Daily Update" 
.Close 1 
End With 

'Creating the email from the template 
Set otlApp = CreateObject("Outlook.Application") 
Set otlNewMail = otlApp.CreateItem(0) 
With otlNewMail 
.Display 
.Bcc = vToList 
.Subject = vTemplateSubject 
.HTMLBody = vTemplateBody 
End With 

'Get Outlook's Word editor 
otlNewMail.Display 
Dim wordDoc As Word.Document 
Set wordDoc = otlNewMail.GetInspector.WordEditor 

'Defining the range to be pasted 
Set ws1 = wb.Worksheets("Table") 
ws1.Activate 
Range(ws1.Cells(1, 10), ws1.Cells(1, 15)).Copy 

'To paste as picture 
wordDoc.Range.PasteAndFormat wdChartPicture 

End Sub 

Antwort

0

Sie sollten wahrscheinlich Ihr Konzept neu denken und tun es so.

Sub Mail_Selection_Range_Outlook_Body() 
'For Tips see: http://www.rondebruin.nl/win/winmail/Outlook/tips.htm 
'Don't forget to copy the function RangetoHTML in the module. 
'Working in Excel 2000-2016 
    Dim rng As Range 
    Dim OutApp As Object 
    Dim OutMail As Object 

    Set rng = Nothing 
    On Error Resume Next 
    'Only the visible cells in the selection 
    Set rng = Selection.SpecialCells(xlCellTypeVisible) 
    'You can also use a fixed range if you want 
    'Set rng = Sheets("YourSheet").Range("D4:D12").SpecialCells(xlCellTypeVisible) 
    On Error GoTo 0 

    If rng Is Nothing Then 
     MsgBox "The selection is not a range or the sheet is protected" & _ 
       vbNewLine & "please correct and try again.", vbOKOnly 
     Exit Sub 
    End If 

    With Application 
     .EnableEvents = False 
     .ScreenUpdating = False 
    End With 

    Set OutApp = CreateObject("Outlook.Application") 
    Set OutMail = OutApp.CreateItem(0) 

    On Error Resume Next 
    With OutMail 
     .To = "[email protected]" 
     .CC = "" 
     .BCC = "" 
     .Subject = "This is the Subject line" 
     .HTMLBody = RangetoHTML(rng) 
     .Send 'or use .Display 
    End With 
    On Error GoTo 0 

    With Application 
     .EnableEvents = True 
     .ScreenUpdating = True 
    End With 

    Set OutMail = Nothing 
    Set OutApp = Nothing 
End Sub 


Function RangetoHTML(rng As Range) 
' Changed by Ron de Bruin 28-Oct-2006 
' Working in Office 2000-2016 
    Dim fso As Object 
    Dim ts As Object 
    Dim TempFile As String 
    Dim TempWB As Workbook 

    TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm" 

    'Copy the range and create a new workbook to past the data in 
    rng.Copy 
    Set TempWB = Workbooks.Add(1) 
    With TempWB.Sheets(1) 
     .Cells(1).PasteSpecial Paste:=8 
     .Cells(1).PasteSpecial xlPasteValues, , False, False 
     .Cells(1).PasteSpecial xlPasteFormats, , False, False 
     .Cells(1).Select 
     Application.CutCopyMode = False 
     On Error Resume Next 
     .DrawingObjects.Visible = True 
     .DrawingObjects.Delete 
     On Error GoTo 0 
    End With 

    'Publish the sheet to a htm file 
    With TempWB.PublishObjects.Add(_ 
     SourceType:=xlSourceRange, _ 
     Filename:=TempFile, _ 
     Sheet:=TempWB.Sheets(1).Name, _ 
     Source:=TempWB.Sheets(1).UsedRange.Address, _ 
     HtmlType:=xlHtmlStatic) 
     .Publish (True) 
    End With 

    'Read all data from the htm file into RangetoHTML 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2) 
    RangetoHTML = ts.readall 
    ts.Close 
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _ 
          "align=left x:publishsource=") 

    'Close TempWB 
    TempWB.Close savechanges:=False 

    'Delete the htm file we used in this function 
    Kill TempFile 

    Set ts = Nothing 
    Set fso = Nothing 
    Set TempWB = Nothing 
End Function 

https://www.rondebruin.nl/win/s1/outlook/bmail2.htm

Verwandte Themen