将Excel范围作为图片复制到Outlook

时间:2018-02-21 00:41:20

标签: excel vba outlook outlook-vba

如何使用命令" Paste Special - As Picture"您从右键单击菜单访问Excel?

我查看了各种帖子,但在使用Excel 2016时它们似乎已经过时了。看来它必须在本节中,

With TempWB.Sheets(1)
    .Cells(1).PasteSpecial Paste:=8
    .Cells(1).PasteSpecial xlPasteValues, , False, False
    .Cells(1).PasteSpecial xlPasteFormats, , False, False
    .Cells(1).Select

如何更改以允许复制和粘贴为图片?

使用下面的原始代码时,我会丢失电子邮件正文中的所有列和行大小。

Dim rng As Range
Dim OutApp As Object
Dim outMail As Object

Set rng = Nothing
' Only send the visible cells in the selection.

Set rng = Sheets("Dashboard").Range("B4:L17").SpecialCells(xlCellTypeVisible)

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

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

With outMail
    .To = ""
    .CC = ""
    .BCC = ""
    .Subject = ""
    .HTMLBody = RangetoHTML(rng)
    .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)
' By Ron de Bruin.
    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

3 个答案:

答案 0 :(得分:3)

要在Outlook上获得更好的图片,请使用Word object model with MailItem.GetInspector Property (Outlook)

实施例

attachment.content = str(encoded)

答案 1 :(得分:1)

这样的事情应该有效:

Dim ol As Object 'Outlook.Application
Dim olEmail As Object 'Outlook.MailItem
Dim olInsp As Object 'Outlook.Inspector
Dim wd As Object 'Word.Document

Sheets("Dashboard").Range("B4:L17").SpecialCells(xlCellTypeVisible).Copy

Set ol = GetObject(, "Outlook.Application") '/* if outlook is running, create otherwise */
Set olEmail = ol.CreateItem(0) 'olMailItem

With olEmail
    Set olInsp = .GetInspector
    If olInsp.EditorType = 4 Then 'olEditorWord
        Set wd = olInsp.WordEditor
        wd.Range.PasteAndFormat 13 'wdChartPicture
    End If
    .Display
End With

如果您确定您的Outlook版本使用Word编辑器,则可以执行以下操作:

With olEmail
    .GetInspector.WordEditor.Range.PasteAndFormat 13
    .Display
End With

答案 2 :(得分:0)

如果要添加文本,请使用此代码。

Dim ol As Object 'Outlook.Application
Dim olEmail As Object 'Outlook.MailItem
Dim olInsp As Object 'Outlook.Inspector
Dim wd As Object 'Word.Document

Sheets("Dashboard").Range("B4:L17").SpecialCells(xlCellTypeVisible).Copy

Set ol = GetObject(, "Outlook.Application") '/* if outlook is running, create otherwise */
Set olEmail = ol.CreateItem(0) 'olMailItem

With olEmail
    Set olInsp = .GetInspector
    If olInsp.EditorType = 4 Then 'olEditorWord
        Set wd = olInsp.WordEditor
        wd.Range.PasteAndFormat 13 'wdChartPicture
    End If

    wd.Paragraphs(1).Range.InsertAfter "Hi, There" & Chr(10)

    Sheets("chart").Range("B4:L17").SpecialCells(xlCellTypeVisible).Copy
    wd.Paragraphs(wd.Paragraphs.Count).Range.Characters.First.PasteAndFormat 13
    wd.Paragraphs.Add

    Sheets("chart").Range("B4:L17").SpecialCells(xlCellTypeVisible).Copy
    wd.Paragraphs(wd.Paragraphs.Count).Range.Characters.First.PasteAndFormat 13
    wd.Paragraphs.Add

    wd.Paragraphs(wd.Paragraphs.Count).Range.InsertAfter Chr(10) & Chr(10) & "BR"

    .Display
End With