首页 文章

VBA从电子邮件下载excel附件,编辑它,并在outlook中的附件上发送/运行宏? [关闭]

提问于
浏览
0

我有一份报告,格式如下:

r1 Col1 Clmn2 Col3 Col4
r2 itm1 name1 itm1 itm1
r3 itm2 name2 itm2 itm2
r4 itm3 name3 itm3 itm3
r5 itm4 name1 itm4 itm4

我想用它做两件事 .

第1部分

该报告将发送给多个人(他们将在Outlook中运行一个脚本作为事件处理程序) . 该脚本将执行以下操作:

  • 它将侦听具有特定主题行和附件计数的电子邮件(即主题:"Report";附件计数:1) .

  • 收到包含该报告的电子邮件后,它将通过保存附件,重新格式化该附件以及将与该人员相关的行复制并粘贴到电子邮件中来处理该电子邮件 .

这是一个情境示例:

我(name1)收到附有报告的电子邮件 . 我的脚本会自动处理电子邮件,这样当我打开它时,我会看到一封带有附件的电子邮件,该附件只有第1,2和5行(格式正确) . 电子邮件还将在电子邮件的实际正文中包含表格(仅包含行1,2和5) .

这是我到目前为止的脚本:

Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
Dim objNS As Outlook.NameSpace
Dim X As Integer

Set objNS = GetNamespace("MAPI")
Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
end Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
Dim objNS As Outlook.NameSpace
Set objNS = GetNamespace("MAPI")

If TypeOf Item Is Outlook.MailItem Then
  Dim Msg As Outlook.MailItem
  Set Msg = Item

 If (Msg.Subject = "Report") And _
 (Msg.Attachments.Count = 1) Then

    ' open wkbk and run import macro
    Dim olDestFldr As Outlook.MAPIFolder
    Dim myAttachments As Outlook.Attachments
    Dim XLApp As Object ' Excel.Application
    Dim XlWK As Object ' Excel.Workbook
    Dim Att As String

    Const attPath As String = "C:\Users\username\Documents\Reports"

    ' New Excel.Application
    Set XLApp = CreateObject("Excel.Application")

    ' save attachment
    Set myAttachments = Item.Attachments
    Att = myAttachments.Item(1).DisplayName
    myAttachments.Item(1).SaveAsFile attPath & Att

    ' open personal.xls where macro is stored,
    ' just in case it doesn't open on its own
    On Error Resume Next
    XLApp.Workbooks.Open _
 ("C:\Documents and Settings\username\Application Data\Microsoft\Excel\XLSTART\PERSONAL.XLS")
    On Error GoTo 0

    ' open workbook and run macro
    XLApp.Workbooks.Open (attPath & Att)

    XLApp.Run ("PERSONAL.XLS!MacroName")
    XLApp.Workbooks.Close
    Kill attPath & Att
    XLApp.Quit
  End If
End If
End Sub

截至目前,它不会将表格复制到电子邮件中(idk如何做到这一点) . 它似乎也没有运行宏 . 每当我打开附件时,它会打开PERSONAL.XLS和附件(未格式化) .

我是否可以直接从outlook脚本编辑附件?就像将excel宏放入excel脚本而不是尝试在excel应用程序中运行它?

第2部分

该报告将发送给一个人:

  • 具有特定主题行和excel附件(报告)的电子邮件将到达 .

  • 我将使用outlook规则将此消息移动到某个文件夹并在其上运行我的脚本 .

  • 该脚本会将Excel工作表附件下载到具有日期的标准名称下的特定路径(即"Daily Report - MM/DD/YYYY") .

  • 然后必须编辑Excel工作表,并将工作表的某些行发送到某些电子邮件 . 我不确定步骤1-3中的脚本是否必须进行编辑,或者我是否要调用另一个宏 .

**我已经编写了宏来编辑/格式化Excel工作表,但我不知道如何发送它 . 报告中将有一个全名列 . 我想以某种方式将修改过的个人报告发送给那些人 . 这有点像将它们的名字从单元格粘贴到outlook中的“To:”字段,然后按ctrl k .

如果我没有解释清楚,这是一个例子:

r1 Col1 Clmn2 Col3 Col4
r2 itm1 name1 itm1 itm1
r3 itm2 name2 itm2 itm2
r4 itm3 name3 itm3 itm3
r5 itm4 name1 itm4 itm4

我想将第1行,第2行和第5行发送到名称1;第1行和第3行到名称2;第1行和第4行到名称3 .

**该表可以作为附件发送,但我也想将表粘贴到发送的电子邮件中 .

提前谢谢!!

1 回答

  • 1

    我是否可以直接从outlook脚本编辑附件?

    不它不是 . Outlook对象模型不提供任何属性或方法 . 扩展MAPI(Outlook和其他第三方组件所基于的低级API)允许获取表示附件的字节数组 . 因此,正确的方法是保存附加文件,然后重新打开它以进行编辑或阅读内容 .

    Outlook对象模型提供了三种修改主体的方法:

    • 正文 - 纯文本 .

    • HTML - HTML标记 .

    • 一个Word编辑器 . Inspector类提供WordEditor属性,该属性返回Document类的实例 . 因此,您可以使用Word对象模型来修改正文 . 见Chapter 17: Working with Item Bodies .

    最后,您可能会发现以下文章有用:

相关问题