如何自动在邮件中保存附件和备忘录

时间:2019-07-19 06:10:48

标签: outlook-vba

我对VBA还是很陌生,只是在Excel中做了一些相当简单的数据导入和操作。 我会为Access准备一个宏,但是我面临缺少记录器作为起点的问题... 我会在打开的消息(已接收或已发送)上自动执行此操作:

  1. 通过弹出窗口将所有附件保存在文件夹中,让用户选择目标文件夹

    是的,该命令已经存在于“操作”>“其他操作”子菜单中,但是问题是,在以前存在附件的消息中没有任何痕迹可见,因此-就像我以前使用Lotus Notes时一样-想:

  2. 编辑消息以在开头添加一些文本,例如“附件已删除”之类的消息,甚至更好的是附件的保存路径。

我试图开始了解Outlook VBA,但对此感到不舒服...

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您在一个问题中问的太多了,希望获得完整的答案。该站点供程序员互相帮助开发。您的问题应该包括一些错误的代码,以便经验丰富的程序员可以解释您哪里出错了。

我了解您对Outlook VBA感到不舒服。当我开始的时候,我买了一本强烈推荐的书,发现这对我没有帮助。我通过实验学到的。当我想了解新知识时,我仍在尝试。我还在这里通读了Outlook的问答。有一些非常有知识的人回答问题。我发现,即使我不希望使用某些更奇特的功能,不断加深对使用Outlook可以实现的功能的理解也会有所帮助。

您需要将完整的任务分解为小的子任务。如果您的子任务足够小,则搜索时可能会找到相关的内容。我对您的任务的细分是:

  1. 允许用户标识要从中保存附件的Outlook文件夹。
  2. 允许用户标识要将附件保存到的光盘文件夹。
  3. 读取Outlook文件夹以查找带有用户附件的电子邮件。
  4. 对于每个带有用户附件的电子邮件: 4(a)将附件保存到光盘文件夹, 4(b)从电子邮件中删除附件 4(c)编辑电子邮件正文,其中包含已删除附件的详细信息。

我将提供一些代码来帮助您开始执行子任务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字符串,以控制背景色,字体颜色,字体大小和字体名称,以使插入文本的外观始终相同。