首页 文章

在Outlook 2016邮件中运行Word VBA宏以删除重复的段落

提问于
浏览
0

我正在尝试调整一些MS Word VBA宏以在Outlook 2016中运行 . 我想知道是否有人可以帮我修改下面转载的宏,由Tomalak? (见问题33562468)

在Outlook中我引用了Microsoft Word 16.0对象库,我尝试使用http://www.vboffice.net/en/developers/use-word-macro-in-outlook/https://www.slipstick.com/developer/word-macro-apply-formatting-outlook-email/的建议,但没有成功 .

原始VBA的目的是删除它在Word中执行的重复段落 . 我想调整它以对在Outlook 2016中打开和编辑的电子邮件执行相同的功能 .

在Word中运行时,VBA将删除每个重复段落中除一个实例之外的所有实例;保留第一个实例(最靠近文档顶部的实例) . 我宁愿保留最后一个实例(最靠近文档底部的实例) .

Sub DeleteDuplicateParagraphs()
  Dim p As Paragraph
  Dim d As New Scripting.Dictionary
  Dim t As Variant
  Dim i As Integer
  Dim StartTime As Single

  StartTime = Timer

  ' collect duplicates
  For Each p In ActiveDocument.Paragraphs
    t = p.Range.Text
    If t <> vbCr Then
      If Not d.Exists(t) Then d.Add t, New Scripting.Dictionary
      d(t).Add d(t).Count + 1, p
    End If
  Next

  ' eliminate duplicates
  Application.ScreenUpdating = False
  For Each t In d
    For i = 2 To d(t).Count
      d(t)(i).Range.Delete
    Next
  Next
  Application.ScreenUpdating = True

  MsgBox "This code ran successfully in " & Round(Timer - StartTime, 2) & " 
 seconds", vbInformation
End Sub

1 回答

  • 0

    为了使Tomalak的Word VBA代码与Outlook兼容,我将“Paragraph”替换为“Word.Paragraph”,将“ActiveDocument.Paragraphs”替换为“objDoc.Paragraphs”,并将修改后的代码插入到Diane Poremsky提出的Word-to-Outlook VBA代码适配器中(上面的链接) . 为了保留最后一个重复的段落而不是第一个,我将“For i = 2 to d(t).Count”更改为“For i = 1 to d(t).Count-1” .

相关问题