【问题标题】:Running a Word VBA macro in an Outlook 2016 message to remove duplicate paragraphs在 Outlook 2016 邮件中运行 Word VBA 宏以删除重复段落
【发布时间】:2018-07-16 23:56:34
【问题描述】:

我正在尝试调整一些 MS Word VBA 宏以在 Outlook 2016 中运行。我想知道是否有人可以帮助我调整下面由 Tomalak 复制的宏? (见Q 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

【问题讨论】:

  • 不要在段落上使用For...Each,而是使用For...Next循环从最后一段倒数:如果您的字典中已经有文本,您可以删除当前的。
  • 谢谢蒂姆。我不确定如何将 For Each..... 替换为 For...Next。
  • 我现在已经能够调整代码以在 Outlook 中运行,方法是用 Word.Paragraph 替换 Paragraph 并用 objDoc.Paragraphs 替换 ActiveDocument.Paragraphs,并将修改后的代码插入到 Diane Poremsky 的提议代码中(上面的链接)。
  • ...要保留最后一个重复段落而不是第一个,请将“For i=2 to d(t).Count”更改为“For i=1 to d(t).计数-1”。任务完成。感谢 Tomalak 提供原始代码。

标签: vba outlook ms-word


【解决方案1】:

为了使 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”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多