将附件名称添加到邮件正文

时间:2012-08-03 15:46:35

标签: vba outlook ms-word word-vba outlook-vba

我希望有人可以帮助我。几个月前,我能够为Outlook 2003编写一个宏,用于在电子邮件中添加所有附件的文件名,这是我工作的真正需要。

但是,如果我将默认编辑器切换到Word,则宏甚至不会出现;我想它必须被整合到Word的normal.dot或其他东西中。如果我从Word添加到VB,我可以看到宏,但是我得到了各种各样的错误。

希望有人可以指出我正确的方向。我当前的宏,在“普通”Outlook消息(不是使用Word编辑器创建的消息)中工作的是:

Sub Names()

Dim Atmt As Attachment
Dim Mensaje As Outlook.MailItem
Dim Adjuntos As String


Set Mensaje = Application.ActiveInspector.CurrentItem
Mensaje.BodyFormat = olFormatHTML
i = 0
Adjuntos = ""

For Each Atmt In Mensaje.Attachments
    'If Atmt.Size > 5 Then
    Adjuntos = "<HMTL> ** Attached file: <u> " & Atmt.FileName & " </u> </html> <br>" & vbNewLine & Adjuntos
    i = i + 1
    'End If
Next Atmt

Adjuntos = "<HMTL> <u> <b> Total number of attached files: " & i & "</u></b> </html> <br>" & Adjuntos & vbNewLine

Mensaje.HTMLBody = Adjuntos & Mensaje.HTMLBody

Set Mensaje = Nothing

End Sub

1 个答案:

答案 0 :(得分:1)

下面两个代码块之间的区别仅仅是Outlook对象库的链接。在Outlook中,这不是必需的,但是从Word中,您需要包含库作为Word项目的引用,或者使用后期绑定(我在下面演示的方法)。

后期绑定将Outlook库链接到代码/项目中的对象,在这种情况下为OLK,并允许您使用关联的函数,而无需执行任何其他步骤/保存任何其他文件。

链接库也应该有效,但由于这不是一个普通的Word项目,你可以稍后引用/为每个新邮件创建一个新的Word项目,我想(虽然我没有测试)你会需要在Normal模板中包含代码,这意味着代码将在您创建的任何 Word文档中提供,除非您指定其他模板。

这可能是您想要做的,也可能不是,但如果是,那么只需将Outlook代码放入Normal模板和link the Outlook library as a reference


来自 MS Outlook (首选方法)

当粘贴到OUTLOOK项目中时,即使使用WORD作为电子邮件编辑应用程序,这也可以工作:

Option Explicit 

Sub Names()

Dim Atmt As Attachment
Dim Mensaje As Outlook.MailItem
Dim Adjuntos As String
Dim Body As String
Dim i As Integer


Set Mensaje = Application.ActiveInspector.CurrentItem
Mensaje.BodyFormat = olFormatHTML

Body = Mensaje.HTMLBody

i = 0
Adjuntos = ""

For Each Atmt In Mensaje.Attachments
    'If Atmt.Size > 5 Then
    Adjuntos = Adjuntos & "** Attached file: <u> " & Atmt.FileName & " </u> <br>"
    i = i + 1
    'End If
Next Atmt

Adjuntos = "<u> <b> Total number of attached files: " & i & "</u></b> <br>" & Adjuntos

Mensaje.HTMLBody = Left(Body, InStr(Body, "</body>") - 1) & Adjuntos & Right(Body, Len(Body) - InStr(Body, "</body>") + 4)

Set Mensaje = Nothing

End Sub

来自 MS Word /在新邮件项

我能够让以下工作,但你应该注意到我得到安全警告(正常的,不可避免的AFAIK)必须通过用户干预推进。

将下面的内容粘贴到您的WORD项目(打开邮件项目)并运行它。您还应该能够将其放在Normal模板中,但这意味着宏始终可用,这对您来说可能是也可能不是问题。

Sub Names()

Dim OLK As Object 'Oulook.Application
Dim Atmt As Object 'Attachment
Dim Mensaje As Object 'Outlook.MailItem
Dim Adjuntos As String
Dim Body As String
Dim i As Integer

Set OLK = CreateObject("Outlook.Application")
Set Mensaje = OLK.ActiveInspector.CurrentItem
Mensaje.BodyFormat = 2 'olFormatHTML

Body = Mensaje.HTMLBody

i = 0
Adjuntos = ""

For Each Atmt In Mensaje.Attachments
    'If Atmt.Size > 5 Then
    Adjuntos = Adjuntos & "** Attached file: <u> " & Atmt.FileName & " </u> <br>"
    i = i + 1
    'End If
Next Atmt

Adjuntos = "<u> <b> Total number of attached files: " & i & "</u></b> <br>" & Adjuntos

Mensaje.HTMLBody = Left(Body, InStr(Body, "</body>") - 1) & Adjuntos & Right(Body, Len(Body) - InStr(Body, "</body>") + 4)

Set OLK = Nothing
Set Mensaje = Nothing

End Sub