使用VBA从Excel到Outlook并使用CID将多个图像嵌入到电子邮件中
我正在尝试将几个图形(如PNG)从Excel VBA宏嵌入Outlook。 图像嵌入然而,它不是全部8个图像,而是第一个重复8次使用VBA从Excel到Outlook并使用CID将多个图像嵌入到电子邮件中,vba,outlook,Vba,Outlook,我正在尝试将几个图形(如PNG)从Excel VBA宏嵌入Outlook。 图像嵌入然而,它不是全部8个图像,而是第一个重复8次 Sub Test() Dim sheetNumber, size, i As Integer Dim chartNames(), FNames() As String Dim objChrt As ChartObject Dim myChart As Chart 'Activate Charts Sheet Shee
Sub Test()
Dim sheetNumber, size, i As Integer
Dim chartNames(), FNames() As String
Dim objChrt As ChartObject
Dim myChart As Chart
'Activate Charts Sheet
Sheets("GRAFICAS").Activate
'Calculate Number of Charts in Sheet
chartNumber = ActiveSheet.ChartObjects.Count
'Redimension Arrays to fit all Chart Export Names
ReDim chartNames(chartNumber)
ReDim FNames(chartNumber)
'Loops through all the charts in the GRAFICAS sheet
For i = 1 To chartNumber
'Select chart with index i
Set objChrt = ActiveSheet.ChartObjects(i)
Set myChart = objChrt.Chart
'Generate a name for the chart
chartNames(i) = "myChart" & i & ".png"
On Error Resume Next
Kill ThisWorkbook.Path & "\" & chartNames(i)
On Error GoTo 0
'Export Chart
myChart.Export Filename:=Environ$("TEMP") & "\" & chartNames(i), Filtername:="PNG"
'Save path to exported chart
FNames(i) = Environ$("TEMP") & "\" & chartNames(i)
Next i
'Declare the Object variables for Outlook.
Dim objOutlook As Object
'Verify Outlook is open.
On Error Resume Next
Set objOutlook = GetObject(, "Outlook.Application")
'If Outlook is not open, end the Sub.
If objOutlook Is Nothing Then
Err.Clear
MsgBox _
"Cannot continue, Outlook is not open.", , _
"Please open Outlook and try again."
Exit Sub
'Outlook is determined to be open, so OK to proceed.
Else
'Establish an Object variable for a mailitem.
Dim objMailItem As Object
Set objMailItem = objOutlook.CreateItem(0)
'Build the mailitem.
Dim NewBody As String
On Error Resume Next
With objMailItem
.To = "dummy@test.com"
.Subject = "Testing Lesson 31 email code"
.Importance = 1 'Sets it as Normal importance (Low = 0 and High = 2)
'Change the Display command to Send without reviewing the email.
' .Display
End With
For i = 1 To chartNumber
objMailItem.Attachments.Add FNames(i)
'Put together the HTML to embed
NewBody = NewBody + HTMLcode & "<div align=center>" & "<IMG src=cid: myChart" & i & ".png></img>" & "</div>"
Next
MsgBox NewBody
'Set the HTML body
objMailItem.HTMLBody = NewBody
'Display email before sending
objMailItem.Display
'Close the If block.
End If
Kill Fname
End Sub
子测试()
尺寸表编号、尺寸、i为整数
Dim chartNames(),FNames()作为字符串
作为图表对象的Dim objChrt
将我的图表变暗为图表
'激活图表页
工作表(“GRAFICAS”)。激活
'计算工作表中的图表数
chartNumber=ActiveSheet.ChartObjects.Count
'重新确定数组的尺寸以适合所有图表导出名称
ReDim图表名称(图表编号)
ReDim FNames(图表编号)
'循环浏览GRAFICAS表中的所有图表
对于i=1到图表编号
'选择索引为i的图表
Set objChrt=ActiveSheet.ChartObjects(i)
设置myChart=objChrt.Chart
'为图表生成名称
图表名称(i)=“myChart”&i&“.png”
出错时继续下一步
终止此工作簿。路径和图表名(i)
错误转到0
"出口图表"
myChart.Export文件名:=environo$(“TEMP”)和“\”&图表名(i),过滤器名:=“PNG”
'将路径保存到导出的图表
FNames(i)=环境$(“临时”)和“\”&图表名称(i)
接下来我
'声明Outlook的对象变量。
将对象视为对象
'验证Outlook是否已打开。
出错时继续下一步
Set objOutlook=GetObject(,“Outlook.Application”)
'如果Outlook未打开,请结束Sub。
如果objOutlook什么都不是,那么
呃,明白了
MsgBox_
“无法继续,Outlook未打开。”_
“请打开Outlook并重试。”
出口接头
'Outlook已确定为打开状态,请单击“确定”继续。
其他的
'为邮件项建立对象变量。
Dim objMailItem作为对象
设置objMailItem=objOutlook.CreateItem(0)
'生成邮件项。
像弦一样暗淡的新手
出错时继续下一步
带有objMailItem
.To=”dummy@test.com"
.Subject=“测试第31课电子邮件代码”
.Importance=1'将其设置为正常重要性(低=0,高=2)
'将显示命令更改为发送而不查看电子邮件。
"展示,
以
对于i=1到图表编号
objMailItem.Attachments.Add FNames(i)
'将要嵌入的HTML放在一起
NewBody=NewBody+HTMLcode&&&
下一个
MsgBox新车身
'设置HTML正文
objMailItem.HTMLBody=新车身
'发送前显示电子邮件
objMailItem.Display
'关闭If块。
如果结束
杀死Fname
端接头
MsgBox新车身输出:
最后一封电子邮件如下所示:
它应该显示所有图表,一个在另一个下面,但是它只需要myChart1.png并重复8次,尽管输出了NewBody
我做错了什么?我正在使用Outlook 2013和Excel 2013
更新:我添加了另一个图像,在本例中,它似乎重复了我添加的最后一个图像9次(与附加图像的数量相同)。我猜这是cid的问题,也许ID不是唯一的 必须在附件上适当设置PR_ATTACH_CONTENT_ID属性,以匹配cid属性的值:
Set attach = objMailItem.Attachments.Add(FNames(i))
'Put together the HTML to embed
Dim cid
cid = "myChart" & i & ".png"
NewBody = NewBody + HTMLcode & "<div align=center>" & "<IMG src=cid:" & cid & "</img>" & "</div><br><br>"
Call attach.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", cid)
Set attach=objMailItem.Attachments.Add(FNames(i))
'将要嵌入的HTML放在一起
暗淡cid
cid=“myChart”&i&“.png”
NewBody=NewBody+HTMLcode&“和”&“
”
调用attach.PropertyAccessor.SetProperty(“http://schemas.microsoft.com/mapi/proptag/0x3712001F“,cid)