Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在电子邮件正文中从Excel发送形状对象?_Excel_Image_Vba_Email_Outlook - Fatal编程技术网

如何在电子邮件正文中从Excel发送形状对象?

如何在电子邮件正文中从Excel发送形状对象?,excel,image,vba,email,outlook,Excel,Image,Vba,Email,Outlook,在我试图编写的宏中,我正在努力完成这一看似简单的步骤。我有一个Excel形状的对象,我正试图复制它,然后粘贴到outlook邮件项目中。形状对象实际上是使用Excel的摄影机工具的产品。我所做的是创建了一个图表,我需要翻转90度才能查看。相机工具使这变得简单。我现在唯一的问题是将此图片形状粘贴到outlook项目中。建议 以下是我目前的代码: Sub emailer() Dim wb As Workbook Dim ws As Worksheet Dim p As Shape Dim o As

在我试图编写的宏中,我正在努力完成这一看似简单的步骤。我有一个Excel形状的对象,我正试图复制它,然后粘贴到outlook邮件项目中。形状对象实际上是使用Excel的摄影机工具的产品。我所做的是创建了一个图表,我需要翻转90度才能查看。相机工具使这变得简单。我现在唯一的问题是将此图片形状粘贴到outlook项目中。建议

以下是我目前的代码:

Sub emailer()

Dim wb As Workbook
Dim ws As Worksheet
Dim p As Shape
Dim o As Outlook.Application
Dim om As Outlook.MailItem
Dim rec As Outlook.Recipient
Dim recs As Outlook.Recipients

'create the outlook session
Set o = CreateObject("Outlook.Application")
'create the message
Set om = o.CreateItem(olMailItem)
Set recs = om.Recipients
Set rec = recs.Add("email@email.com")
rec.Type = 1

Set wb = ActiveWorkbook
Set ws = ActiveWorkbook.Worksheets("Chart_Pic")

Set p = ws.Shapes("Picture 2")
p.CopyPicture


With om
.SentOnBehalfOfName = "email@email.com"
.Subject = "Subject"
.HTMLBody = "This is a test" & vbCrLf & vbCrLf & [where I want the shape to go]


For Each rec In om.Recipients
rec.Resolve
Next

om.Send

End With

Set o = Nothing

您可以使用剪贴板复制/粘贴图片。但为此,您需要一个Outlook邮件编辑器,它可以处理剪贴板。例如WordEditor

例如:

Sub emailer()

 Set oOlApp = CreateObject("Outlook.Application")

 Set oOlMItem = oOlApp.CreateItem(olMailItem)

 Set oWB = ActiveWorkbook
 Set oWS = ActiveWorkbook.Worksheets("Chart_Pic")

 Set oPic = oWS.Shapes("Picture 2")
 oPic.CopyPicture ' oPic is now in Clipboard


 With oOlMItem

  .Display

  .To = "email@email.com"
  .Subject = "Subject"

  Set oOlInsp = .GetInspector
  Set oWdDoc = oOlInsp.WordEditor ' get Word Document from the MailBody

  Set oWdContent = oWdDoc.Content
  oWdContent.InsertParagraphBefore
  Set oWdRng = oWdDoc.Paragraphs(1).Range
  oWdRng.InsertBefore "This is a test"
  oWdRng.InsertParagraphAfter
  oWdRng.InsertParagraphAfter

  Set oWdRng = oWdDoc.Paragraphs(3).Range
  oWdRng.Paste ' paste from oPic Clipboard

  olFormatHTML = 2
  .BodyFormat = olFormatHTML ' change to HTML


 End With

End Sub

实际上,将图像嵌入HTML邮件并不是那么简单。您可以将形状转换为图像并存储图像文件*.jpg、*.gif、*.png。。。在一些可公开访问的文件服务器上,将图像链接写入邮件。或者在Base64中转换图像文件并将其嵌入。细节很详细,我很感谢你的回复。但是,为什么手动Ctrl+C从excel工作簿复制图像并Ctrl+V将其粘贴到Outlook中的新邮件项目中如此简单呢?我不确定,但在幕后,该形状可能作为Windows图元文件WMF、EMF结构作为矢量图形复制到剪贴板。通过将其转换为像素图像和base64,将其粘贴到HTML邮件正文中,如我的评论中所述。尝试发送/接收邮件并分析包含的HTML文本以了解详细信息。