我希望有人可以帮助我。几个月前,我能够为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
答案 0 :(得分:1)
下面两个代码块之间的区别仅仅是Outlook对象库的链接。在Outlook中,这不是必需的,但是从Word中,您需要包含库作为Word项目的引用,或者使用后期绑定(我在下面演示的方法)。
后期绑定将Outlook库链接到代码/项目中的对象,在这种情况下为OLK
,并允许您使用关联的函数,而无需执行任何其他步骤/保存任何其他文件。
链接库也应该有效,但由于这不是一个普通的Word项目,你可以稍后引用/为每个新邮件创建一个新的Word项目,我想(虽然我没有测试)你会需要在Normal
模板中包含代码,这意味着代码将在您创建的任何 Word文档中提供,除非您指定其他模板。
这可能是您想要做的,也可能不是,但如果是,那么只需将Outlook代码放入Normal
模板和link the Outlook library as a reference。
当粘贴到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
我能够让以下工作,但你应该注意到我得到安全警告(正常的,不可避免的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