我正在尝试调整一些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 回答
为了使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” .