使用Outlook VBA将电子邮件复制到剪贴板

Arl*_*ler 6 clipboard vba excel-vba outlook-vba outlook-2007

如何将电子邮件复制到剪贴板,然后将其粘贴到excel中,表格完好无损?

我正在使用Outlook 2007,我想做相同的

"Click on email > Select All > Copy > Switch to Excel > Select Cell > Paste". 
Run Code Online (Sandbox Code Playgroud)

我已经很好地弄清楚了Excel对象模型,但除了以下代码之外没有 Outlook的经验.

Dim mapi As NameSpace
Dim msg As Outlook.MailItem
Set mapi = Outlook.Application.GetNamespace("MAPI")
Set msg = mapi.Folders.Item(1).Folders.Item("Posteingang").Folders.Item(1).Folders.Item(7).Items.Item(526)
Run Code Online (Sandbox Code Playgroud)

Mik*_*keD 7

我必须承认我在Outlook 2003中使用它,但请查看它是否也适用于2007:

您可以使用MSForms.DataObject与剪贴板交换数据.在Outlook VBA中,创建对" Microsoft Forms 2.0对象库 " 的引用,并尝试此代码(您当然可以将Sub()附加到按钮等):

Sub Test()
Dim M As MailItem, Buf As MSForms.DataObject

    Set M = ActiveExplorer().Selection.Item(1)
    Set Buf = New MSForms.DataObject
    Buf.SetText M.HTMLBody
    Buf.PutInClipboard

End Sub
Run Code Online (Sandbox Code Playgroud)

之后,切换到Excel并按Ctrl-V - 我们去!如果您还想查找当前正在运行的Excel应用程序并自动执行此操作,请告诉我们.

即使邮件是以纯文本或RTF格式发送的,也总是有效的HTMLBody,Excel将显示HTMLBody中传送的所有文本属性.列,颜色,字体,超链接,缩进等.但是,不会复制嵌入的图像.

此代码演示了基本要素,但不检查是否真的选择了MailItem.如果您想使其适用于日历条目,联系人等,则需要更多编码.

如果您在列表视图中选择了邮件就足够了,您甚至不需要打开它.

  • 如果您"浏览"参考,请在...\system32目录中查找"fm20.dll" (2认同)