我对VBA还是很陌生,只是在Excel中做了一些相当简单的数据导入和操作。 我会为Access准备一个宏,但是我面临缺少记录器作为起点的问题... 我会在打开的消息(已接收或已发送)上自动执行此操作:
通过弹出窗口将所有附件保存在文件夹中,让用户选择目标文件夹
是的,该命令已经存在于“操作”>“其他操作”子菜单中,但是问题是,在以前存在附件的消息中没有任何痕迹可见,因此-就像我以前使用Lotus Notes时一样-想:
编辑消息以在开头添加一些文本,例如“附件已删除”之类的消息,甚至更好的是附件的保存路径。
我试图开始了解Outlook VBA,但对此感到不舒服...
有人可以帮我吗?
答案 0 :(得分:0)
您在一个问题中问的太多了,希望获得完整的答案。该站点供程序员互相帮助开发。您的问题应该包括一些错误的代码,以便经验丰富的程序员可以解释您哪里出错了。
我了解您对Outlook VBA感到不舒服。当我开始的时候,我买了一本强烈推荐的书,发现这对我没有帮助。我通过实验学到的。当我想了解新知识时,我仍在尝试。我还在这里通读了Outlook的问答。有一些非常有知识的人回答问题。我发现,即使我不希望使用某些更奇特的功能,不断加深对使用Outlook可以实现的功能的理解也会有所帮助。
您需要将完整的任务分解为小的子任务。如果您的子任务足够小,则搜索时可能会找到相关的内容。我对您的任务的细分是:
我将提供一些代码来帮助您开始执行子任务1和3。您应该能够在子任务2上找到帮助而没有太多困难。我将提供有关子任务4(a),4(b)和4(c)的一些指导。
我认为用户识别Outlook文件夹的最简单方法是用户打开该文件夹,然后启动宏。这就是我采取的方法。请将此代码复制到模块,打开适当的Outlook文件夹并运行宏。我相信我已经提供了足够的注释来解释宏的功能,但是在必要时提出问题:
Option Explicit
Sub DemoSelectFolderFromEmail()
Dim Exp As Explorer
' VBA has two types of Folder: Outlook folders and disc folders.
' Since you will need access to disc folders, it is important to be clear
' which type you mean.
Dim FldrSrc As Outlook.Folder
Dim InxA As Long
Dim InxF As Long
Dim ItemCrnt As MailItem
' Get collection of emails selected by user.
Set Exp = Outlook.Application.ActiveExplorer
' Check that an email has been selected.
If Exp.Selection.Count = 0 Then
Call MsgBox("Please select an email then try again", vbOKOnly)
Exit Sub
ElseIf Exp.Selection.Item(1).Class <> olMail Then
Call MsgBox("Please select an email then try again", vbOKOnly)
Exit Sub
End If
' The parent of a selected email is the Outlook folder that contains it.
' In my view, this is the easiest way for the user to identify the source
' folder.
Set FldrSrc = Exp.Selection.Item(1).Parent
Debug.Print FldrSrc.Name
' FldrSrc.Items is a collection of the items in FldrSrc.
' Probably every itemn is a MailItem but I check to be sure.
' ReceivedTime and Subject are just two of the properties that you can access.
' If there are any attachments, I display their names.
' Note that for VBA, signatures and images count as attachments. You will need
' to add code to idetify these attachments if you do not want to save them.
For InxF = FldrSrc.Items.Count To 1 Step -1
With FldrSrc.Items(InxF)
If .Class = olMail Then
Debug.Print .ReceivedTime & " " & .Subject
If .Attachments.Count > 0 Then
For InxA = 1 To .Attachments.Count
With .Attachments(InxA)
Debug.Print " " & InxA & " " & .DisplayName
End With
Next
End If
End If
End With
Next
End Sub
SaveAsFile
是将附件写入光盘文件夹的方法。请注意,SaveAsFile
将覆盖任何具有相同名称的现有文件。如果将相同的DisplayName
用于不同的附件,则需要具有一些使名称唯一的系统。
您需要编辑电子邮件以删除附件,然后保存编辑后的电子邮件。
电子邮件可以具有文本正文和/或HTML正文和/或RTF正文。我从未见过RTF正文,因此您可能会忽略它们。如果电子邮件同时具有文本和HTML正文,则用户会看到HTML正文。如今,很少有电子邮件没有HTML正文。您可能只需在Html正文的开头添加一个字符串就可以逃脱,但是您将需要进行实验以确保外观令人满意。我可能更希望在正文部分的开头插入一个完整的HTML字符串,以控制背景色,字体颜色,字体大小和字体名称,以使插入文本的外观始终相同。