Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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工作表中的文本和图表复制到Outlook正文?_Excel_Vba_Charts_Outlook - Fatal编程技术网

如何将Excel工作表中的文本和图表复制到Outlook正文?

如何将Excel工作表中的文本和图表复制到Outlook正文?,excel,vba,charts,outlook,Excel,Vba,Charts,Outlook,我正在尝试将excel工作表中的文本(单元格的恒定范围)和图表复制到outlook正文中,但到目前为止,我只成功地复制了图表,而没有复制文本。我想知道将文本(在选定范围内)和图表从excel工作表复制到outlook邮件的最佳方法。下面是我现在使用的代码。此代码确实粘贴文本,但图表与文本重叠(当图表粘贴到电子邮件正文中时)。我想知道如何格式化outlook电子邮件并粘贴文本和图表而不重叠 Sub email_Charts(sFileName, Subject1) Dim r As Integer

我正在尝试将excel工作表中的文本(单元格的恒定范围)和图表复制到outlook正文中,但到目前为止,我只成功地复制了图表,而没有复制文本。我想知道将文本(在选定范围内)和图表从excel工作表复制到outlook邮件的最佳方法。下面是我现在使用的代码。此代码确实粘贴文本,但图表与文本重叠(当图表粘贴到电子邮件正文中时)。我想知道如何格式化outlook电子邮件并粘贴文本和图表而不重叠

Sub email_Charts(sFileName, Subject1)
Dim r As Integer
Dim o As Outlook.Application
Dim m As Outlook.MailItem
Dim wEditor As Word.Document
Set o = New Outlook.Application
Dim olTo As String

Windows("Daily_Status_Macro_Ver3.0.xlsm").Activate
Sheets("Main").Select
olTo = Worksheets("Main").Cells(3, 3).Value

Windows(sFileName).Activate

msg = "<HTML><font face = Calibri =2>"
msg = msg & "Hi All, <br><br>"
msg = msg & "Please find Daily Status Below "
msg = msg & "<b><font color=#0033CC>"
msg = msg & Sheets(1).Range("B2:B4")


    Set m = o.CreateItem(olMailItem)
    m.To = olTo

    m.Subject = Subject1
    m.BodyFormat = olFormatHTML
    m.HTMLBody = msg
    m.Display

 Windows(sFileName).Activate
 Sheets(1).Select
 ActiveSheet.DrawingObjects.Select
 Selection.Copy
 Set wEditor = o.ActiveInspector.wordeditor
 m.Body = msg
 wEditor.Application.Selection.Paste
 'm.send

    Workbooks(sFileName).Close SaveChanges:=False
End Sub
Sub-email\u图表(sFileName,Subject1)
作为整数的Dim r
Dim o作为Outlook.Application
将m设置为Outlook.MailItem
Dim wEditor作为Word.Document
Set o=新建Outlook.Application
作为字符串的Dim-olTo
Windows(“每日状态宏版本3.0.xlsm”)。激活
工作表(“主”)。选择
olTo=工作表(“主”)单元格(3,3).值
Windows(sFileName)。激活
msg=“”
msg=msg&“大家好,

” msg=msg&“请在下面查找每日状态” msg=msg&“ 味精=味精和纸张(1).范围(“B2:B4”) 设置m=o.CreateItem(olMailItem) m、 To=olTo m、 主题=主题1 m、 BodyFormat=olFormatHTML m、 HTMLBody=msg m、 展示 Windows(sFileName)。激活 第(1)页。选择 ActiveSheet.DrawingObjects.Select 选择,复制 设置wEditor=o.ActiveInspector.wordeditor m、 Body=msg wEditor.Application.Selection.Paste “m.send 工作簿(sFileName)。关闭保存更改:=False 端接头
可能是这样的:

Sub createJpg(Namesheet As String, nameRange As String, nameFile As String)
    ThisWorkbook.Activate
    Worksheets(Namesheet).Activate
    Set Plage = ThisWorkbook.Worksheets(Namesheet).Range(nameRange)
    Plage.CopyPicture
    With ThisWorkbook.Worksheets(Namesheet).ChartObjects.Add(Plage.Left, Plage.Top, Plage.Width, Plage.Height)
        .Activate
        .Chart.Paste
        .Chart.Export Environ$("temp") & "\" & nameFile & ".jpg", "JPG"
    End With
    Worksheets(Namesheet).ChartObjects(Worksheets(Namesheet).ChartObjects.Count).Delete
Set Plage = Nothing
End Sub
在您现有的代码中:

Set appOutlook = CreateObject("outlook.application")
'create a new message
Set Message = appOutlook.CreateItem(olMailItem)
With Message
    .HTMLBody = "Hello" ' and whatever else you need in the text body
    'first we create the image as a JPG file
    Call createJpg("Dashboard", "B8:H9", "DashboardFile")
    'we attached the embedded image with a Position at 0 (makes the attachment hidden)
    TempFilePath = Environ$("temp") & "\"
    .Attachments.Add TempFilePath & "DashboardFile.jpg", olByValue, 0

    'Then we add an html <img src=''> link to this image
    'Note than you can customize width and height - not mandatory

    .HTMLBody = .HTMLBody & "<br><B>WEEKLY REPPORT:</B><br>" _
        & "<img src='cid:DashboardFile.jpg'" & "width='814' height='33'><br>" _
        & "<br>Best Regards,<br>Ed</font></span>"

    .To = "contact1@email.com; contact2@email.com"
    .Cc = "contact3@email.com"

    .Display
    '.Send
End With
Set appOutlook=CreateObject(“outlook.application”)
'创建新消息
Set Message=appOutlook.CreateItem(olMailItem)
带着信息
.HTMLBody=“Hello”以及文本正文中需要的任何内容
'首先,我们将图像创建为JPG文件
调用createJpg(“仪表板”、“B8:H9”、“仪表板文件”)
'我们附加了位置为0的嵌入图像(使附件隐藏)
TempFilePath=Environ$(“temp”)和“\”
.Attachments.Add TempFilePath&“DashboardFile.jpg”,olByValue,0
'然后我们将一个html链接添加到此图像
'注意,您可以自定义宽度和高度-非强制性
.HTMLBody=.HTMLBody&“
每周报告:
”_ &“
”_ &“向您问好,
Ed” .To=”contact1@email.com; contact2@email.com" .Cc=”contact3@email.com" .展示 ’发送 以
Ron de Bruin拥有所有可能场景的代码。你的在这里:这是工作,它将粘贴选定的范围。我试图先粘贴范围,然后再粘贴图表。这个方法只是先粘贴文本,然后在上面复制我的图表。我需要给出一个必须粘贴图表的起始位置,以便粘贴的图表和粘贴的范围不会重叠。作为一种解决方法,我将范围转换为图片,但没有将其复制到临时工作表。这样我可以一次复制所有图表。